diff --git a/src/views/package-management/package-list/index.vue b/src/views/package-management/package-list/index.vue index 391010e..01b1e72 100644 --- a/src/views/package-management/package-list/index.vue +++ b/src/views/package-management/package-list/index.vue @@ -200,7 +200,10 @@ placeholder="请输入真流量额度" @change="handleRealDataChange" /> -
+
{{ realDataGb }}GB = {{ form.real_data_mb }}MB
@@ -216,22 +219,27 @@ - + - + -
- {{ virtualDataGb }}GB = {{ form.virtual_data_mb }}MB +
+ {{ realDataGb }}×(1-{{ virtualRatioPercent }}%) = + {{ calculatedVirtualDataGb }}GB
@@ -586,7 +594,17 @@ // GB 输入值(用于界面显示) const realDataGb = ref(0) - const virtualDataGb = ref(0) + const virtualRatioPercent = ref(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([]) @@ -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 }