From 96a54240cdb2ea6578fd23d1ffee41b29c03f70e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Thu, 22 Oct 2026 13:19:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=AE=A2=E5=8D=95):=20=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E9=A1=B5=E5=95=86=E5=93=81=E9=87=91=E9=A2=9D=E4=B8=8E=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=80=BB=E4=BB=B7=E6=8C=89=E8=A7=84=E6=A0=BC=E5=8E=9F?= =?UTF-8?q?=E4=BB=B7=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 确认接口 priceGroup 增加 sumPrice(规格原价 × 数量),活动订单取活动价 - 下单引擎商品卡片使用规格原价,商品总价使用 sumPrice,等级/会员优惠单独列示 - 旧版确认页商品总价按 sumPrice 展示,修复运费字段名不一致导致的 NaN - 快递费用显示优惠前金额,会员运费优惠单独展示 --- .../v1/order/CenterOrderController.php | 14 ++++++++-- .../order/common/OrderPriceDetail.vue | 12 ++++++++- .../engines/OrderCreateEngine.vue | 24 ++++++++++++++--- .../src/pages/goods/order_confirm/index.vue | 26 ++++++++++++------- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/backend/app/api/controller/v1/order/CenterOrderController.php b/backend/app/api/controller/v1/order/CenterOrderController.php index 396b0b2f0..c3f615524 100644 --- a/backend/app/api/controller/v1/order/CenterOrderController.php +++ b/backend/app/api/controller/v1/order/CenterOrderController.php @@ -300,7 +300,8 @@ class CenterOrderController 'pay_price' => $priceData['payPrice'],// 应付金额 'pay_postage' => $priceData['payPostage'],// 配送费 'priceGroup' => [ - 'totalPrice' => $priceData['totalPrice'],// 订单总金额 + 'totalPrice' => $priceData['totalPrice'],// 订单总金额(等级/会员优惠后) + 'sumPrice' => $priceData['sumPrice'] ?? $priceData['totalPrice'],// 商品原价总额(等级/会员优惠前) 'payPostage' => $priceData['payPostage'],// 配送费 'postageDiscount' => 0,// 配送费优惠 'levelPrice' => $priceData['levelPrice'] ?? 0,// 等级优惠 @@ -410,6 +411,8 @@ class CenterOrderController $giftPrice = $priceGroup['giftPrice'] ?? 0; $priceData = [ 'totalPrice' => $priceGroup['totalPrice'] ?? 0, + // 原价总额:商品规格原价 × 数量之和,供确认页“商品总价”展示 + 'sumPrice' => $priceGroup['sumPrice'] ?? 0, 'payPrice' => bcadd( (string)bcadd((string)($priceGroup['totalPrice'] ?? 0), (string)($priceGroup['storePostage'] ?? 0), 2), (string)$giftPrice, @@ -576,7 +579,8 @@ class CenterOrderController 'pay_price' => $priceData['payPrice'],// 应付金额 'pay_postage' => $priceGroup['storePostage'] ?? 0,// 配送费 'priceGroup' => [ - 'totalPrice' => $priceGroup['totalPrice'] ?? 0,// 订单总金额 + 'totalPrice' => $priceGroup['totalPrice'] ?? 0,// 订单总金额(等级/会员优惠后) + 'sumPrice' => $priceGroup['sumPrice'] ?? 0,// 商品原价总额(等级/会员优惠前) 'payPostage' => $priceGroup['storePostage'] ?? 0,// 配送费 'postageDiscount' => $priceGroup['storePostageDiscount'] ?? 0,// 配送费优惠 'levelPrice' => $priceGroup['levelPrice'] ?? 0,// 等级优惠 @@ -2175,8 +2179,14 @@ class CenterOrderController } $totalPrice = bcmul((string)$cartInfo[0]['truePrice'], (string)$cartInfo[0]['cart_num'], 2); + // 活动订单没有等级/会员折扣,原价总额取活动价;普通订单取规格原价 + $sumPrice = $isActivityOrder + ? $totalPrice + : bcmul((string)($skuInfo['price'] ?? $productInfo['price'] ?? 0), (string)$num, 2); $priceData = [ 'totalPrice' => $totalPrice, + // 规格原价总额(等级/会员优惠前),与 cartInfo[0].sum_price 对齐 + 'sumPrice' => $sumPrice, 'payPrice' => bcadd($totalPrice, (string)$payPostage, 2), 'payPostage' => $payPostage, 'isStoreFreePostage' => false, diff --git a/frontend/uni-app/src/dynamic-pages/components/order/common/OrderPriceDetail.vue b/frontend/uni-app/src/dynamic-pages/components/order/common/OrderPriceDetail.vue index e364fdf75..4662231b2 100644 --- a/frontend/uni-app/src/dynamic-pages/components/order/common/OrderPriceDetail.vue +++ b/frontend/uni-app/src/dynamic-pages/components/order/common/OrderPriceDetail.vue @@ -22,7 +22,7 @@ {{ $t(`快递费用`) }} - ¥{{ payPostage }} + ¥{{ formattedOriginalPostage }} {{ $t(`免运费`) }} {{ $t(`免运费`) }} @@ -100,6 +100,16 @@ const formattedDoorPostage = computed(() => { const v = parseFloat(props.doorPostage || 0); return isNaN(v) ? '0.00' : v.toFixed(2); }); + +/** 快递费用原价 = 优惠后运费 + 会员运费优惠,优惠单独展示在下方 */ +const originalPostage = computed(() => { + const pay = parseFloat(props.payPostage || 0); + const discount = parseFloat(props.postageDiscount || 0); + return (isNaN(pay) ? 0 : pay) + (isNaN(discount) ? 0 : discount); +}); + +/** 快递费用原价格式化:保留两位小数 */ +const formattedOriginalPostage = computed(() => originalPostage.value.toFixed(2));