This commit is contained in:
@@ -200,7 +200,10 @@
|
||||
placeholder="请输入真流量额度"
|
||||
@change="handleRealDataChange"
|
||||
/>
|
||||
<div v-if="realDataGb" style="margin-top: 4px; font-size: 12px; color: var(--el-text-color-secondary)">
|
||||
<div
|
||||
v-if="realDataGb"
|
||||
style="margin-top: 4px; font-size: 12px; color: var(--el-text-color-secondary)"
|
||||
>
|
||||
{{ realDataGb }}GB = {{ form.real_data_mb }}MB
|
||||
</div>
|
||||
</ElFormItem>
|
||||
@@ -216,22 +219,27 @@
|
||||
</ElCol>
|
||||
</ElRow>
|
||||
|
||||
<!-- 虚流量额度和到期计时基准 -->
|
||||
<!-- 虚流量比例和到期计时基准 -->
|
||||
<ElRow :gutter="20">
|
||||
<ElCol :span="12" v-if="form.enable_virtual_data">
|
||||
<ElFormItem label="虚流量额度(GB)" prop="virtual_data_gb">
|
||||
<ElFormItem label="虚流量比例(%)" prop="virtual_ratio_percent">
|
||||
<ElInputNumber
|
||||
v-model="virtualDataGb"
|
||||
v-model="virtualRatioPercent"
|
||||
:min="0"
|
||||
:max="100"
|
||||
:precision="2"
|
||||
:step="0.1"
|
||||
:step="1"
|
||||
:controls="false"
|
||||
style="width: 100%"
|
||||
placeholder="请输入虚流量额度"
|
||||
@change="handleVirtualDataChange"
|
||||
placeholder="请输入虚流量比例"
|
||||
@change="handleVirtualRatioChange"
|
||||
/>
|
||||
<div v-if="virtualDataGb" style="margin-top: 4px; font-size: 12px; color: var(--el-text-color-secondary)">
|
||||
{{ virtualDataGb }}GB = {{ form.virtual_data_mb }}MB
|
||||
<div
|
||||
v-if="virtualRatioPercent !== null && realDataGb > 0"
|
||||
style="margin-top: 4px; font-size: 12px; color: var(--el-text-color-secondary)"
|
||||
>
|
||||
{{ realDataGb }}×(1-{{ virtualRatioPercent }}%) =
|
||||
{{ calculatedVirtualDataGb }}GB
|
||||
</div>
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
@@ -586,7 +594,17 @@
|
||||
|
||||
// GB 输入值(用于界面显示)
|
||||
const realDataGb = ref<number>(0)
|
||||
const virtualDataGb = ref<number>(0)
|
||||
const virtualRatioPercent = ref<number | null>(null) // 虚流量比例(百分比)
|
||||
|
||||
// 计算得出的虚流量GB值
|
||||
const calculatedVirtualDataGb = computed(() => {
|
||||
if (virtualRatioPercent.value === null || realDataGb.value === 0) {
|
||||
return 0
|
||||
}
|
||||
const ratio = virtualRatioPercent.value / 100
|
||||
const virtualGb = realDataGb.value * (1 - ratio)
|
||||
return Number(virtualGb.toFixed(2))
|
||||
})
|
||||
|
||||
// GB 转 MB 处理
|
||||
const handleRealDataChange = (value: number | null) => {
|
||||
@@ -595,14 +613,19 @@
|
||||
return
|
||||
}
|
||||
form.real_data_mb = Math.round(value * 1024)
|
||||
// 真流量变化时,重新计算虚流量
|
||||
handleVirtualRatioChange(virtualRatioPercent.value)
|
||||
}
|
||||
|
||||
const handleVirtualDataChange = (value: number | null) => {
|
||||
if (value === null || value === undefined) {
|
||||
// 虚流量比例变化处理
|
||||
const handleVirtualRatioChange = (value: number | null) => {
|
||||
if (value === null || value === undefined || realDataGb.value === 0) {
|
||||
form.virtual_data_mb = 0
|
||||
return
|
||||
}
|
||||
form.virtual_data_mb = Math.round(value * 1024)
|
||||
// 根据比例计算虚流量:真流量 × (1 - 比例)
|
||||
const virtualGb = calculatedVirtualDataGb.value
|
||||
form.virtual_data_mb = Math.round(virtualGb * 1024)
|
||||
}
|
||||
|
||||
const packageList = ref<PackageResponse[]>([])
|
||||
@@ -974,7 +997,13 @@
|
||||
form.virtual_data_mb = row.virtual_data_mb || 0
|
||||
// MB 转换为 GB 显示
|
||||
realDataGb.value = form.real_data_mb ? Number((form.real_data_mb / 1024).toFixed(2)) : 0
|
||||
virtualDataGb.value = form.virtual_data_mb ? Number((form.virtual_data_mb / 1024).toFixed(2)) : 0
|
||||
// 从虚流量额度反推比例:比例 = (1 - 虚流量/真流量) × 100%
|
||||
if (form.real_data_mb > 0 && form.virtual_data_mb > 0) {
|
||||
const ratio = (1 - form.virtual_data_mb / form.real_data_mb) * 100
|
||||
virtualRatioPercent.value = Number(ratio.toFixed(2))
|
||||
} else {
|
||||
virtualRatioPercent.value = null
|
||||
}
|
||||
form.cost_price = (row.cost_price ?? 0) / 100 // 分转换为元显示
|
||||
form.suggested_retail_price = row.suggested_retail_price
|
||||
? row.suggested_retail_price / 100
|
||||
@@ -994,9 +1023,9 @@
|
||||
form.expiry_base = 'from_activation'
|
||||
form.real_data_mb = 0
|
||||
form.virtual_data_mb = 0
|
||||
// 重置 GB 值
|
||||
// 重置 GB 值和比例
|
||||
realDataGb.value = 0
|
||||
virtualDataGb.value = 0
|
||||
virtualRatioPercent.value = null
|
||||
form.cost_price = 0
|
||||
form.suggested_retail_price = undefined
|
||||
form.description = ''
|
||||
@@ -1036,9 +1065,9 @@
|
||||
form.expiry_base = 'from_activation'
|
||||
form.real_data_mb = 0
|
||||
form.virtual_data_mb = 0
|
||||
// 重置 GB 值
|
||||
// 重置 GB 值和比例
|
||||
realDataGb.value = 0
|
||||
virtualDataGb.value = 0
|
||||
virtualRatioPercent.value = null
|
||||
form.cost_price = 0
|
||||
form.suggested_retail_price = undefined
|
||||
form.description = ''
|
||||
@@ -1084,36 +1113,35 @@
|
||||
package_name: form.package_name,
|
||||
package_type: form.package_type,
|
||||
duration_months: form.duration_months,
|
||||
cost_price: costPriceInCents,
|
||||
enable_virtual_data: form.enable_virtual_data || false,
|
||||
expiry_base: form.expiry_base || 'from_activation'
|
||||
cost_price: costPriceInCents
|
||||
}
|
||||
|
||||
// 可选字段
|
||||
if (form.series_id) {
|
||||
if (form.series_id !== undefined && form.series_id !== null) {
|
||||
data.series_id = form.series_id
|
||||
}
|
||||
if (form.calendar_type) {
|
||||
data.calendar_type = form.calendar_type
|
||||
}
|
||||
if (form.data_reset_cycle) {
|
||||
data.data_reset_cycle = form.data_reset_cycle
|
||||
}
|
||||
// calendar_type 是可选字段,有值就传递
|
||||
if (form.calendar_type) {
|
||||
data.calendar_type = form.calendar_type
|
||||
}
|
||||
// 当流量重置周期为每日,或套餐周期类型为按天时,传递套餐天数
|
||||
if (
|
||||
(form.data_reset_cycle === 'daily' || form.calendar_type === 'by_day') &&
|
||||
form.duration_days
|
||||
) {
|
||||
if (form.duration_days !== undefined && form.duration_days !== null) {
|
||||
data.duration_days = form.duration_days
|
||||
}
|
||||
if (suggestedRetailPriceInCents !== undefined) {
|
||||
if (form.enable_virtual_data !== undefined) {
|
||||
data.enable_virtual_data = form.enable_virtual_data
|
||||
}
|
||||
if (form.expiry_base) {
|
||||
data.expiry_base = form.expiry_base
|
||||
}
|
||||
if (suggestedRetailPriceInCents !== undefined && suggestedRetailPriceInCents !== null) {
|
||||
data.suggested_retail_price = suggestedRetailPriceInCents
|
||||
}
|
||||
if (form.real_data_mb) {
|
||||
if (form.real_data_mb !== undefined && form.real_data_mb !== null) {
|
||||
data.real_data_mb = form.real_data_mb
|
||||
}
|
||||
if (form.enable_virtual_data && form.virtual_data_mb) {
|
||||
if (form.virtual_data_mb !== undefined && form.virtual_data_mb !== null) {
|
||||
data.virtual_data_mb = form.virtual_data_mb
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user