2024-05-18 08:53:17 +00:00
|
|
|
|
// 小数精度
|
|
|
|
|
|
import { getPrice } from 'components/sku-table/utils'
|
|
|
|
|
|
const decimalPrecision = 2
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
discountType: 'Tenant'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
unit() {
|
|
|
|
|
|
const {
|
|
|
|
|
|
emption: {
|
|
|
|
|
|
duration: { mode }
|
|
|
|
|
|
},
|
|
|
|
|
|
unit
|
|
|
|
|
|
} = this.addData
|
|
|
|
|
|
// 存在unit时自定义单位
|
|
|
|
|
|
if (unit) {
|
|
|
|
|
|
const [{ amount }] = this.elements
|
|
|
|
|
|
return mode === 'Hour' ? unit : `${amount}${unit}`
|
|
|
|
|
|
}
|
|
|
|
|
|
return mode === 'Hour' ? '小时' : '月'
|
|
|
|
|
|
},
|
|
|
|
|
|
discount() {
|
|
|
|
|
|
return this.$store.state.app.userData.discount
|
|
|
|
|
|
},
|
|
|
|
|
|
discountPrice() {
|
|
|
|
|
|
return (this.price * this.discount).toFixed(decimalPrecision)
|
|
|
|
|
|
},
|
|
|
|
|
|
price() {
|
|
|
|
|
|
let priceTotal = 0
|
|
|
|
|
|
const {
|
|
|
|
|
|
emption: {
|
|
|
|
|
|
count,
|
|
|
|
|
|
duration: { amount = 1 }
|
|
|
|
|
|
},
|
|
|
|
|
|
service
|
|
|
|
|
|
} = this.addData
|
|
|
|
|
|
this.elements.forEach((item) => {
|
|
|
|
|
|
const price = this.getSkuPrice(item)
|
|
|
|
|
|
priceTotal += price
|
|
|
|
|
|
})
|
|
|
|
|
|
return (priceTotal * amount * count).toFixed(decimalPrecision)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
// 获取每个规格的具体信息
|
|
|
|
|
|
getSkuPrice(item) {
|
|
|
|
|
|
const { service, serviceItem } = this.addData
|
|
|
|
|
|
const { skuId, skuList = [], insAmount = 1, otherAmount = 0, elements, serviceCode, basic } = item
|
|
|
|
|
|
if (elements) {
|
|
|
|
|
|
// 该元素下有多个类型
|
|
|
|
|
|
let priceTotal = 0
|
|
|
|
|
|
elements.forEach((cell) => {
|
|
|
|
|
|
const price = this.getSkuPrice(cell)
|
|
|
|
|
|
priceTotal += price
|
|
|
|
|
|
})
|
|
|
|
|
|
return priceTotal
|
|
|
|
|
|
}
|
|
|
|
|
|
let sku = skuList.find((item) => skuId === item.id)
|
|
|
|
|
|
if (!sku && skuList.length) {
|
|
|
|
|
|
const basicPrice = JSON.parse(skuList[0].basicPrice)
|
|
|
|
|
|
sku = {
|
|
|
|
|
|
...basicPrice[0],
|
|
|
|
|
|
billPolicy: 'spec',
|
|
|
|
|
|
billable: true
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 没有sku并且不是运维和编排服务,直接返回0
|
|
|
|
|
|
if (!sku && !service.includes('fabric') && !service.includes('operations')) return 0
|
|
|
|
|
|
const {
|
|
|
|
|
|
emption: {
|
|
|
|
|
|
duration: { mode }
|
|
|
|
|
|
}
|
|
|
|
|
|
} = this.addData
|
|
|
|
|
|
// 代码容错处理
|
|
|
|
|
|
if (!sku && !serviceItem) return 0
|
2024-05-28 07:53:11 +00:00
|
|
|
|
if (['cloudtower.standard.volume', 'cnware.standard.volume'].includes(serviceCode) && item.name === '系统盘') {
|
|
|
|
|
|
// cloudtower/cnware 系统盘根据基础定价来计算
|
|
|
|
|
|
const basicPrice = JSON.parse(skuList[0]?.basicPrice || '[]')
|
|
|
|
|
|
if (insAmount === 1) return 0
|
|
|
|
|
|
return basicPrice[0].monthPrice * insAmount
|
|
|
|
|
|
}
|
2024-05-18 08:53:17 +00:00
|
|
|
|
const price = getPrice(sku || serviceItem, mode)
|
|
|
|
|
|
// 集群部署多个实例
|
|
|
|
|
|
const { nodes = 1 } = this.addData
|
|
|
|
|
|
// 实例数量/计数单位向上取整
|
|
|
|
|
|
const count = Math.ceil(insAmount + otherAmount / 1)
|
|
|
|
|
|
const finallPrice = Number((price * count * nodes).toFixed(decimalPrecision))
|
|
|
|
|
|
return finallPrice
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|