213 lines
5.2 KiB
JavaScript
213 lines
5.2 KiB
JavaScript
Tea.context(function () {
|
|
this.selectedNetworkId = 0
|
|
this.selectedProtectionBandwidth = ""
|
|
this.selectedServerBandwidth = ""
|
|
this.selectedPackageId = 0
|
|
this.selectedPeriodId = 0
|
|
this.amount = -1
|
|
this.max = 1
|
|
this.count = 1
|
|
this.selectedPrice = null
|
|
|
|
this.$delay(function () {
|
|
if (this.allNetworks.length > 0) {
|
|
this.selectNetwork(this.allNetworks[0].id)
|
|
}
|
|
})
|
|
|
|
this.selectNetwork = function (networkId) {
|
|
this.selectedNetworkId = networkId
|
|
this.selectedProtectionBandwidth = ""
|
|
this.selectedServerBandwidth = ""
|
|
this.selectedPeriodId = 0
|
|
this.amount = -1
|
|
|
|
// 选择第一个防护带宽
|
|
let that = this
|
|
let found = false
|
|
this.prices.sort(function (v1, v2) {
|
|
return that.compareBits(v1.protectionBandwidth, v2.protectionBandwidth)
|
|
}).forEach(function (v) {
|
|
if (!found && v.networkId == that.selectedNetworkId) {
|
|
that.selectProtectionBandwidth(v.protectionBandwidth)
|
|
found = true
|
|
}
|
|
})
|
|
}
|
|
|
|
this.selectProtectionBandwidth = function (protectionBandwidth) {
|
|
this.selectedProtectionBandwidth = protectionBandwidth
|
|
this.selectedServerBandwidth = ""
|
|
this.selectedPeriodId = 0
|
|
this.amount = -1
|
|
|
|
// 选择第一个业务带宽
|
|
let that = this
|
|
let found = false
|
|
this.prices.sort(function (v1, v2) {
|
|
return that.compareBits(v1.serverBandwidth, v2.serverBandwidth)
|
|
}).forEach(function (v) {
|
|
if (!found && v.networkId == that.selectedNetworkId && v.protectionBandwidth == protectionBandwidth) {
|
|
that.selectServerBandwidth(v.serverBandwidth)
|
|
found = true
|
|
}
|
|
})
|
|
}
|
|
|
|
this.selectServerBandwidth = function (serverBandwidth) {
|
|
this.selectedServerBandwidth = serverBandwidth
|
|
this.selectedPeriodId = 0
|
|
this.amount = -1
|
|
|
|
// 选择第一个有效期
|
|
let that = this
|
|
let found = false
|
|
|
|
this.prices.sort(function (v1, v2) {
|
|
let periodId1 = v1.periodId
|
|
let periodId2 = v2.periodId
|
|
return (that.toPeriodMonths(that.findPeriodWithId(periodId1)) > that.toPeriodMonths(that.findPeriodWithId(periodId2))) ? 1 : -1
|
|
}).forEach(function (v) {
|
|
if (!found && v.networkId == that.selectedNetworkId && v.protectionBandwidth == that.selectedProtectionBandwidth && v.serverBandwidth == serverBandwidth) {
|
|
that.selectPeriod(v.periodId)
|
|
found = true
|
|
}
|
|
})
|
|
}
|
|
|
|
this.selectPeriod = function (periodId) {
|
|
this.selectedPeriodId = periodId
|
|
|
|
let price = null
|
|
let found = false
|
|
let that = this
|
|
this.prices.forEach(function (v) {
|
|
if (!found && v.networkId == that.selectedNetworkId
|
|
&& v.protectionBandwidth == that.selectedProtectionBandwidth
|
|
&& v.serverBandwidth == that.selectedServerBandwidth
|
|
&& v.periodId == that.selectedPeriodId) {
|
|
price = v
|
|
found = true
|
|
}
|
|
})
|
|
if (price == null) {
|
|
teaweb.warn("数据错误,请刷新页面后重试,如果仍然没有恢复,请联系管理员。")
|
|
return
|
|
}
|
|
|
|
this.selectedPrice = price
|
|
|
|
this.selectedPackageId = price.packageId
|
|
this.count = 1
|
|
this.max = price.maxInstances
|
|
this.changeCount(this.count)
|
|
}
|
|
|
|
this.hasProtectionBandwidth = function (protectionBandwidth) {
|
|
if (this.prices == null) {
|
|
return
|
|
}
|
|
|
|
let found = false
|
|
let that = this
|
|
this.prices.forEach(function (v) {
|
|
if (v.networkId == that.selectedNetworkId && v.protectionBandwidth == protectionBandwidth) {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|
|
|
|
this.hasServerBandwidth = function (serverBandwidth) {
|
|
if (this.prices == null) {
|
|
return
|
|
}
|
|
|
|
let found = false
|
|
let that = this
|
|
this.prices.forEach(function (v) {
|
|
if (v.networkId == that.selectedNetworkId
|
|
&& v.protectionBandwidth == that.selectedProtectionBandwidth
|
|
&& v.serverBandwidth == serverBandwidth) {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|
|
|
|
this.hasPeriod = function (periodId) {
|
|
if (this.prices == null) {
|
|
return
|
|
}
|
|
|
|
let found = false
|
|
let that = this
|
|
this.prices.forEach(function (v) {
|
|
if (v.networkId == that.selectedNetworkId
|
|
&& v.protectionBandwidth == that.selectedProtectionBandwidth
|
|
&& v.serverBandwidth == that.selectedServerBandwidth
|
|
&& v.periodId == periodId) {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|
|
|
|
this.changeCount = function () {
|
|
if (this.selectedPrice == null) {
|
|
this.amount = -1
|
|
return
|
|
}
|
|
this.amount = this.selectedPrice.price * this.count
|
|
|
|
// 从服务器获取最新价格
|
|
this.$post(".price")
|
|
.params({
|
|
packageId: this.selectedPackageId,
|
|
periodId: this.selectedPeriodId,
|
|
count: this.count
|
|
})
|
|
.success(function (resp) {
|
|
this.amount = resp.data.amount
|
|
})
|
|
}
|
|
|
|
this.toBits = function (b) {
|
|
let m = b.match(/^(\d+)(\w+)$/)
|
|
let n = parseInt(m[1])
|
|
switch (m[2]) {
|
|
case "bps":
|
|
return n
|
|
case "Kbps":
|
|
return n * 1024
|
|
case "Mbps":
|
|
return n * Math.pow(1024, 2)
|
|
case "Gbps":
|
|
return n * Math.pow(1024, 3)
|
|
case "Tbps":
|
|
return n * Math.pow(1024, 4)
|
|
case "Pbps":
|
|
return n * Math.pow(1024, 5)
|
|
}
|
|
return n
|
|
}
|
|
|
|
this.compareBits = function (b1, b2) {
|
|
return (this.toBits(b1) > this.toBits(b2)) ? 1 : -1
|
|
}
|
|
|
|
this.findPeriodWithId = function (periodId) {
|
|
return this.allPeriods.$find(function (k, v) {
|
|
return v.id == periodId
|
|
})
|
|
}
|
|
|
|
this.toPeriodMonths = function (period) {
|
|
switch (period.unit) {
|
|
case "year":
|
|
return period.count * 12
|
|
default:
|
|
return period.count
|
|
}
|
|
}
|
|
}) |