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
}