From b6625748ac661a23c96462fdf4b56395c590f595 Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Tue, 28 Apr 2026 18:40:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A5=97=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/api/packageManagement.ts | 15 +- .../order-management/order-list/index.vue | 52 ++++- .../package-list/detail.vue | 86 ++++--- .../package-management/package-list/index.vue | 211 +++++++++++++++--- .../series-grants/index.vue | 16 +- 5 files changed, 320 insertions(+), 60 deletions(-) diff --git a/src/types/api/packageManagement.ts b/src/types/api/packageManagement.ts index 8884d85..5a40d96 100644 --- a/src/types/api/packageManagement.ts +++ b/src/types/api/packageManagement.ts @@ -121,7 +121,13 @@ export interface PackageResponse { enable_virtual_data?: boolean // 是否启用虚流量 expiry_base?: ExpiryBase // 到期计时基准: from_activation(实名激活时起算) / from_purchase(购买时起算) cost_price?: number // 成本价(分) - suggested_retail_price?: number // 建议零售价(分) + suggested_retail_price?: number | null // 建议零售价(分),可能为 null 表示"未配置" + retail_price?: number | null // 原始代理零售价(分),可能为 null + is_gift?: boolean // 是否为赠送套餐 + price_config_status?: string // 价格配置状态 + price_config_status_name?: string // 价格配置状态名称 + effective_retail_price?: number | null // 有效零售价(分) + retail_price_config_status?: string // 零售价配置状态(代理视角) current_commission_rate?: string // 当前返佣比例(仅代理用户可见) one_time_commission_amount?: number | null // 一次性佣金金额(分,代理视角) profit_margin?: number | null // 利润空间(分,仅代理用户可见) @@ -162,7 +168,8 @@ export interface CreatePackageRequest { enable_virtual_data?: boolean // 是否启用虚流量,可选 expiry_base?: ExpiryBase | null // 到期计时基准: from_activation(实名激活时起算) / from_purchase(购买时起算),可选 cost_price: number // 成本价(分),必填 - suggested_retail_price?: number | null // 建议零售价(分),可选 + suggested_retail_price?: number | null // 建议零售价(分),普通套餐可不传或为null表示"未配置",赠送套餐必须传0 + is_gift?: boolean // 是否为赠送套餐 } /** @@ -181,7 +188,9 @@ export interface UpdatePackageRequest { enable_virtual_data?: boolean | null // 是否启用虚流量,可选 expiry_base?: ExpiryBase | null // 到期计时基准,可选 cost_price?: number | null // 成本价(分),可选 - suggested_retail_price?: number | null // 建议零售价(分),可选 + suggested_retail_price?: number | null // 建议零售价(分),不能再用0表示"清空",清空要用 clear_suggested_retail_price + is_gift?: boolean // 是否为赠送套餐 + clear_suggested_retail_price?: boolean // 清空建议零售价(当需要将价格设为null时使用) } /** diff --git a/src/views/order-management/order-list/index.vue b/src/views/order-management/order-list/index.vue index 8b19a9f..b86c556 100644 --- a/src/views/order-management/order-list/index.vue +++ b/src/views/order-management/order-list/index.vue @@ -139,11 +139,17 @@ :key="pkg.id" :label="`${pkg.package_name} (¥${((pkg.cost_price || 0) / 100).toFixed(2)})`" :value="pkg.id" + :disabled="pkg.is_gift" >
{{ pkg.package_name }} - ¥{{ ((pkg.cost_price || 0) / 100).toFixed(2) }} + +
@@ -158,14 +164,24 @@ 该系列暂无可用套餐 + - + { + if (!createForm.package_id) return false + const selectedPackage = packageOptions.value.find((pkg) => pkg.id === createForm.package_id) + return selectedPackage?.is_gift || false + }) + // IoT卡选择变化时,根据series_id加载套餐列表 const handleIotCardChange = (cardId: number | null) => { if (!cardId) { @@ -997,6 +1020,19 @@ } ) + // 当套餐切换时,如果选择的是赠送套餐,自动切换到线下支付 + watch( + () => createForm.package_id, + (packageId) => { + if (packageId) { + const selectedPackage = packageOptions.value.find((pkg) => pkg.id === packageId) + if (selectedPackage?.is_gift) { + createForm.payment_method = 'offline' + } + } + } + ) + onMounted(() => { getTableData() }) @@ -1170,6 +1206,18 @@ return } + // 检查是否是赠送套餐 + const selectedPackage = packageOptions.value.find( + (pkg) => pkg.id === createForm.package_id + ) + const isGiftPackage = selectedPackage?.is_gift || false + + // 线下支付时,支付凭证为必填 + if (createForm.payment_method === 'offline' && !createForm.payment_voucher_key) { + ElMessage.error('线下支付必须上传支付凭证') + return + } + // 创建订单(后端接收数组,前端单选转为单元素数组) const data: CreateOrderRequest = { identifier, diff --git a/src/views/package-management/package-list/detail.vue b/src/views/package-management/package-list/detail.vue index 8c55c86..c97ed71 100644 --- a/src/views/package-management/package-list/detail.vue +++ b/src/views/package-management/package-list/detail.vue @@ -25,7 +25,7 @@