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));