mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-10-28 13:31:04 +00:00
fix(订单): 确认页商品金额与商品总价按规格原价展示
- 确认接口 priceGroup 增加 sumPrice(规格原价 × 数量),活动订单取活动价 - 下单引擎商品卡片使用规格原价,商品总价使用 sumPrice,等级/会员优惠单独列示 - 旧版确认页商品总价按 sumPrice 展示,修复运费字段名不一致导致的 NaN - 快递费用显示优惠前金额,会员运费优惠单独展示
This commit is contained in:
parent
944774bd44
commit
96a54240cd
@ -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,
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<!-- 运费(仅支持快递配送时显示) -->
|
||||
<view class="item acea-row row-between-wrapper" v-if="showPostage">
|
||||
<view>{{ $t(`快递费用`) }}</view>
|
||||
<view class="money" v-if="!integralTotal && payPostage > 0">¥{{ payPostage }}</view>
|
||||
<view class="money" v-if="!integralTotal && originalPostage > 0">¥{{ formattedOriginalPostage }}</view>
|
||||
<view class="money" v-else-if="!integralTotal">{{ $t(`免运费`) }}</view>
|
||||
<view class="money" v-else>{{ $t(`免运费`) }}</view>
|
||||
</view>
|
||||
@ -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));
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
:image="(item.productInfo || {}).image"
|
||||
:name="(item.productInfo || {}).store_name"
|
||||
:sku-label="getSkuLabel(item)"
|
||||
:price="item.truePrice"
|
||||
:price="getOriginalUnitPrice(item)"
|
||||
:integral-price="isIntegral && idx === 0 ? integralUnitPrice : 0"
|
||||
:num="item.cart_num"
|
||||
/>
|
||||
@ -393,6 +393,21 @@ function getSkuLabel(item) {
|
||||
if (productInfo.attrInfo && productInfo.attrInfo.suk) return productInfo.attrInfo.suk;
|
||||
return '';
|
||||
}
|
||||
/**
|
||||
* 商品卡片展示金额:规格原价(活动订单取活动价),不使用 truePrice(等级/会员优惠后单价)
|
||||
* @param {Object} item 购物车商品项
|
||||
* @return {string|number} 金额
|
||||
*/
|
||||
function getOriginalUnitPrice(item) {
|
||||
if (!item) return '0.00';
|
||||
// 活动订单展示活动价,普通订单展示规格原价(truePrice 是等级/会员优惠后单价)
|
||||
if (item.activity_type && item.activity_type !== 'normal') {
|
||||
return item.truePrice || item.sum_price || '0.00';
|
||||
}
|
||||
var productInfo = item.productInfo || {};
|
||||
var attrInfo = productInfo.attrInfo || {};
|
||||
return attrInfo.price || productInfo.price || item.sum_price || item.truePrice || '0.00';
|
||||
}
|
||||
/**
|
||||
* 点击商品卡片跳转对应商品详情页
|
||||
* @param {Object} item 购物车商品项
|
||||
@ -445,11 +460,12 @@ async function loadConfirmData() {
|
||||
var data = res.data || {};
|
||||
cartInfo.value = data.cartInfo || [];
|
||||
orderKey.value = data.order_key || '';
|
||||
totalPrice.value = data.total_price || 0;
|
||||
payPrice.value = data.pay_price || 0;
|
||||
payPostage.value = data.pay_postage || 0;
|
||||
// 确认接口返回 priceGroup,不能只使用顶层金额字段,否则等级/会员折扣会丢失。
|
||||
var confirmPriceGroup = data.priceGroup || {};
|
||||
// 商品总价展示规格原价之和(等级/会员优惠前的 sumPrice)
|
||||
totalPrice.value = confirmPriceGroup.sumPrice ?? data.sum_price ?? data.total_price ?? 0;
|
||||
payPrice.value = data.pay_price || 0;
|
||||
payPostage.value = data.pay_postage || 0;
|
||||
levelPrice.value = confirmPriceGroup.levelPrice ?? data.level_price ?? 0;
|
||||
memberPrice.value = confirmPriceGroup.memberPrice ?? data.member_price ?? 0;
|
||||
postageDiscount.value = confirmPriceGroup.postageDiscount ?? data.postage_discount ?? 0;
|
||||
|
||||
@ -242,10 +242,10 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class='item acea-row row-between-wrapper'
|
||||
v-if="priceGroup.payPostage > 0 || priceGroup.payPostageDiscount > 0">
|
||||
v-if="priceGroup.payPostage > 0 || priceGroup.postageDiscount > 0">
|
||||
<view>{{$t(`配送运费`)}}:</view>
|
||||
<view class='money'>
|
||||
{{$t(`¥`)}}{{(parseFloat(priceGroup.payPostage)+parseFloat(priceGroup.payPostageDiscount)).toFixed(2)}}
|
||||
{{$t(`¥`)}}{{(parseFloat(priceGroup.payPostage)+parseFloat(priceGroup.postageDiscount)).toFixed(2)}}
|
||||
</view>
|
||||
</view>
|
||||
<view class='item acea-row row-between-wrapper'
|
||||
@ -258,9 +258,9 @@
|
||||
<view>{{$t(`付费会员优惠`)}}:</view>
|
||||
<view class='money'>-{{$t(`¥`)}}{{parseFloat(priceGroup.memberPrice).toFixed(2)}}</view>
|
||||
</view>
|
||||
<view class='item acea-row row-between-wrapper' v-if="priceGroup.payPostageDiscount > 0">
|
||||
<view class='item acea-row row-between-wrapper' v-if="priceGroup.postageDiscount > 0">
|
||||
<view>{{$t(`会员运费优惠`)}}:</view>
|
||||
<view class='money'>-{{$t(`¥`)}}{{parseFloat(priceGroup.payPostageDiscount).toFixed(2)}}</view>
|
||||
<view class='money'>-{{$t(`¥`)}}{{parseFloat(priceGroup.postageDiscount).toFixed(2)}}</view>
|
||||
</view>
|
||||
<view class='item acea-row row-between-wrapper' v-if="coupon_price > 0">
|
||||
<view>{{$t(`优惠券抵扣`)}}:</view>
|
||||
@ -835,8 +835,8 @@
|
||||
integral_price.value = result.deduction_price;
|
||||
coupon_price.value = result.coupon_price;
|
||||
integral.value = useIntegral.value ? result.SurplusIntegral : usable_integral.value;
|
||||
priceGroup.value['payPostage'] = shippingTypeLocal == 1 ? 0 : result.pay_postage;
|
||||
priceGroup.value['postageDiscount'] = result.storePostageDiscount;
|
||||
priceGroup.value['payPostage'] = shippingTypeLocal == 1 ? 0 : (result.pay_postage ?? 0);
|
||||
priceGroup.value['postageDiscount'] = result.storePostageDiscount ?? 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -1064,9 +1064,17 @@
|
||||
totalPrice.value = util.$h.Add(parseFloat(res.data.priceGroup.totalPrice),
|
||||
parseFloat(res.data
|
||||
.priceGroup.payPostage));
|
||||
allPrice.value = util.$h.Add(parseFloat(res.data.priceGroup.totalPrice),
|
||||
parseFloat(res.data
|
||||
.priceGroup.memberPrice)).toFixed(2);
|
||||
allPrice.value = (() => {
|
||||
const pg = res.data.priceGroup || {};
|
||||
// 商品总价展示规格原价之和;sumPrice 缺失时回补等级/会员优惠
|
||||
const originalTotal = pg.sumPrice !== undefined && pg.sumPrice !== null
|
||||
? pg.sumPrice
|
||||
: util.$h.Add(
|
||||
util.$h.Add(parseFloat(pg.totalPrice || 0), parseFloat(pg.levelPrice || 0)),
|
||||
parseFloat(pg.memberPrice || 0)
|
||||
);
|
||||
return parseFloat(originalTotal).toFixed(2);
|
||||
})();
|
||||
seckillId.value = parseInt(res.data.seckill_id);
|
||||
invoice_func.value = res.data.invoice_func;
|
||||
special_invoice.value = res.data.special_invoice;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user