Vue.component("plan-traffic-ranges", { props: ["value"], data: function () { let ranges = this.value if (ranges == null) { ranges = [] } return { ranges: ranges, isAdding: false, minGB: "", minGBUnit: "gb", maxGB: "", maxGBUnit: "gb", pricePerGB: "", totalPrice: "", addingRange: { minGB: 0, maxGB: 0, pricePerGB: 0, totalPrice: 0 } } }, methods: { add: function () { this.isAdding = !this.isAdding let that = this setTimeout(function () { that.$refs.minGB.focus() }) }, cancelAdding: function () { this.isAdding = false }, confirm: function () { if (this.addingRange.minGB < 0) { teaweb.warn("流量下限需要大于0") return } if (this.addingRange.maxGB < 0) { teaweb.warn("流量上限需要大于0") return } if (this.addingRange.pricePerGB <= 0 && this.addingRange.totalPrice <= 0) { teaweb.warn("请设置单位价格或者总价格") return; } this.isAdding = false this.minGB = "" this.maxGB = "" this.pricePerGB = "" this.totalPrice = "" this.ranges.push(this.addingRange) this.ranges.$sort(function (v1, v2) { if (v1.minGB < v2.minGB) { return -1 } if (v1.minGB == v2.minGB) { if (v2.maxGB == 0 || v1.maxGB < v2.maxGB) { return -1 } return 0 } return 1 }) this.change() this.addingRange = { minGB: 0, maxGB: 0, pricePerGB: 0, totalPrice: 0 } }, remove: function (index) { this.ranges.$remove(index) this.change() }, change: function () { this.$emit("change", this.ranges) }, formatGB: function (gb) { return teaweb.formatBytes(gb * 1024 * 1024 * 1024) }, changeMinGB: function (v) { let minGB = parseFloat(v.toString()) if (isNaN(minGB) || minGB < 0) { minGB = 0 } switch (this.minGBUnit) { case "tb": minGB *= 1024 break case "pb": minGB *= 1024 * 1024 break case "eb": minGB *= 1024 * 1024 * 1024 break } this.addingRange.minGB = minGB }, changeMaxGB: function (v) { let maxGB = parseFloat(v.toString()) if (isNaN(maxGB) || maxGB < 0) { maxGB = 0 } switch (this.maxGBUnit) { case "tb": maxGB *= 1024 break case "pb": maxGB *= 1024 * 1024 break case "eb": maxGB *= 1024 * 1024 * 1024 break } this.addingRange.maxGB = maxGB } }, watch: { minGB: function (v) { this.changeMinGB(v) }, minGBUnit: function (v) { this.changeMinGB(this.minGB) }, maxGB: function (v) { this.changeMaxGB(v) }, maxGBUnit: function (v) { this.changeMaxGB(this.maxGB) }, pricePerGB: function (v) { let pricePerGB = parseFloat(v.toString()) if (isNaN(pricePerGB) || pricePerGB < 0) { pricePerGB = 0 } this.addingRange.pricePerGB = pricePerGB }, totalPrice: function (v) { let totalPrice = parseFloat(v.toString()) if (isNaN(totalPrice) || totalPrice < 0) { totalPrice = 0 } this.addingRange.totalPrice = totalPrice } }, template: `
` })