Files
waf-platform/EdgeAdmin/web/views/@default/clusters/anti-ddos/user-instances/createPopup.js

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
}
}
})