From 513e113ea9fab3a6ece36353d3e092d2f73da728 Mon Sep 17 00:00:00 2001 From: xianyi Date: Wed, 4 Feb 2026 09:22:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/types.ts | 2 ++ src/components/exam/ExamAddonPanel.tsx | 34 +++++++++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/api/types.ts b/src/api/types.ts index e376865..ce99d68 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -1446,6 +1446,8 @@ export interface InputAddItemCustomSettlementDetail { original_price: number; /** 结算金额 */ settlement_price: number; + /** 折扣率 */ + discount_ratio?: number | null; } /** diff --git a/src/components/exam/ExamAddonPanel.tsx b/src/components/exam/ExamAddonPanel.tsx index 5f2e526..91535e2 100644 --- a/src/components/exam/ExamAddonPanel.tsx +++ b/src/components/exam/ExamAddonPanel.tsx @@ -21,6 +21,7 @@ interface AddonItem { combinationItemCode?: number | null; isEnjoyDiscount?: number | null; discount_name?: string | null; + discount_ratio?: number | null; } interface ExamAddonPanelProps { @@ -305,6 +306,7 @@ export const ExamAddonPanel = ({ client, onGoToSign }: ExamAddonPanelProps) => { combinationItemCode: item.combination_item_code ?? null, isEnjoyDiscount: item.is_enjoy_discount ?? null, discount_name: item.discount_rate ?? null, + discount_ratio: item.discount_ratio ?? null, tags: [], paid: false, })); @@ -642,31 +644,35 @@ export const ExamAddonPanel = ({ client, onGoToSign }: ExamAddonPanelProps) => { return null; } const originalPrice = parseFloat(item.originalPrice || '0'); - let settlementPrice = originalPrice; - if (customSettlementType === 1) { - // 按比例折扣 - settlementPrice = originalPrice * (discountRatioValue / 100); - } else { - // 自定义结算价 - settlementPrice = (customFinalPrice ?? 0) / selectedItems.length; // 平均分配 - } + // if (customSettlementType === 1) { + // // 按比例折扣 + // settlementPrice = originalPrice * (discountRatioValue / 100); + // } else { + // // 自定义结算价 + // settlementPrice = (customFinalPrice ?? 0) / selectedItems.length; // 平均分配 + // } + + const discount_ratio = (() => { + const r = item.discount_ratio; + if (r == null || typeof r !== 'number') return 0; + return r > 1 ? r : Math.round(r * 100); + })(); return { combination_item_code: String(combinationItemCode), combination_item_name: item.name, original_price: originalPrice, - settlement_price: settlementPrice, + settlement_price: originalPrice * (discount_ratio / 100), + discount_ratio: discount_ratio, }; }) - .filter((item): item is { combination_item_code: string; combination_item_name: string; original_price: number; settlement_price: number } => item !== null); + .filter((item): item is { combination_item_code: string; combination_item_name: string; original_price: number; settlement_price: number; discount_ratio: number } => item !== null); - const original_settlement_price = selectedItems.reduce((sum, item) => { - return sum + parseFloat(item.currentPrice || item.originalPrice || '0'); - }, 0); + const original_settlement_price = listAddItemDetail.reduce((sum, item) => sum + item.original_price, 0); const final_settlement_price = customSettlementType === 1 - ? original_settlement_price * (discountRatioValue / 100) + ? totalCurrent * ((customDiscountRatio ?? 0) / 100) : (customFinalPrice ?? 0); const apply_user = localStorage.getItem('operatorName');