修改bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m24s

This commit is contained in:
sexygoat
2026-04-09 15:57:51 +08:00
parent b171e7cc03
commit 6a46aeea15

View File

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