feat(移动端): 确认页价格明细展示会员类优惠

- 新增用户等级/付费会员/会员运费三行优惠,确认接口取 priceGroup(camelCase)、重算接口取 snake_case 字段,口径对齐
- 积分抵扣金额统一保留两位小数
This commit is contained in:
吴昊天 2026-10-13 11:53:13 +08:00
parent f8d869dd97
commit acf277828f
2 changed files with 38 additions and 1 deletions

View File

@ -28,6 +28,21 @@
<view class="money" v-else-if="!integralTotal">{{ $t(`免费上门`) }}</view>
<view class="money" v-else>{{ $t(`免费上门`) }}</view>
</view>
<!-- 会员等级折扣(确认接口 priceGroup.levelPrice / 重算接口 level_price) -->
<view class="item acea-row row-between-wrapper" v-if="parseFloat(levelPrice) > 0">
<view>{{ $t(`用户等级优惠`) }}</view>
<view class="money money-minus">-¥{{ parseFloat(levelPrice).toFixed(2) }}</view>
</view>
<!-- 付费会员折扣 -->
<view class="item acea-row row-between-wrapper" v-if="parseFloat(memberPrice) > 0">
<view>{{ $t(`付费会员优惠`) }}</view>
<view class="money money-minus">-¥{{ parseFloat(memberPrice).toFixed(2) }}</view>
</view>
<!-- 会员运费折扣 -->
<view class="item acea-row row-between-wrapper" v-if="parseFloat(postageDiscount) > 0">
<view>{{ $t(`会员运费优惠`) }}</view>
<view class="money money-minus">-¥{{ parseFloat(postageDiscount).toFixed(2) }}</view>
</view>
<!-- 优惠券抵扣 -->
<view class="item acea-row row-between-wrapper" v-if="couponPrice > 0">
<view>{{ $t(`优惠券抵扣`) }}</view>
@ -36,7 +51,7 @@
<!-- 积分抵扣 -->
<view class="item acea-row row-between-wrapper" v-if="integralPrice > 0">
<view>{{ $t(`积分抵扣`) }}</view>
<view class="money money-minus">-¥{{ integralPrice }}</view>
<view class="money money-minus">-¥{{ parseFloat(integralPrice).toFixed(2) }}</view>
</view>
</view>
</template>
@ -51,6 +66,12 @@ const props = defineProps({
totalPrice: { type: [Number, String], default: '0.00' },
/** 运费 */
payPostage: { type: [Number, String], default: 0 },
/** 用户等级优惠金额 */
levelPrice: { type: [Number, String], default: 0 },
/** 付费会员优惠金额 */
memberPrice: { type: [Number, String], default: 0 },
/** 会员运费优惠金额 */
postageDiscount: { type: [Number, String], default: 0 },
/** 优惠券抵扣金额 */
couponPrice: { type: [Number, String], default: 0 },
/** 积分抵扣金额 */

View File

@ -105,6 +105,9 @@
<OrderPriceDetail
:total-price="totalPriceText"
:pay-postage="payPostage"
:level-price="levelPrice"
:member-price="memberPrice"
:postage-discount="postageDiscount"
:coupon-price="couponPrice"
:integral-price="integralPrice"
:integral-total="integralTotal"
@ -207,6 +210,10 @@ const orderKey = ref('');
const totalPrice = ref(0);
const payPrice = ref(0);
const payPostage = ref(0);
// 价格明细中的会员优惠,确认接口使用 camelCase,重算接口使用 snake_case。
const levelPrice = ref(0);
const memberPrice = ref(0);
const postageDiscount = ref(0);
const priceComputing = ref(false);
const priceReady = ref(false);
const priceError = ref('');
@ -420,6 +427,11 @@ async function loadConfirmData() {
totalPrice.value = data.total_price || 0;
payPrice.value = data.pay_price || 0;
payPostage.value = data.pay_postage || 0;
// 确认接口返回 priceGroup,不能只使用顶层金额字段,否则等级/会员折扣会丢失。
var confirmPriceGroup = data.priceGroup || {};
levelPrice.value = confirmPriceGroup.levelPrice ?? data.level_price ?? 0;
memberPrice.value = confirmPriceGroup.memberPrice ?? data.member_price ?? 0;
postageDiscount.value = confirmPriceGroup.postageDiscount ?? data.postage_discount ?? 0;
features.value = { ...features.value, ...(data.features || {}) };
// 保存活动订单信息(含免费支付方式标识与跳转地址,由交易模式 Handler 下发)
activityInfo.value = data.activity_info || {};
@ -586,6 +598,10 @@ async function computedPrice() {
var data = res.data || {};
payPrice.value = data.pay_price ?? 0;
payPostage.value = data.pay_postage ?? 0;
// computed 接口返回 snake_case 价格字段,和确认接口的 priceGroup 保持同一展示口径。
levelPrice.value = data.level_price ?? data.priceGroup?.levelPrice ?? levelPrice.value;
memberPrice.value = data.member_price ?? data.priceGroup?.memberPrice ?? memberPrice.value;
postageDiscount.value = data.storePostageDiscount ?? data.postage_discount ?? data.priceGroup?.postageDiscount ?? postageDiscount.value;
couponPrice.value = data.coupon_price ?? 0;
integralPrice.value = data.deduction_price ?? 0;
surplusIntegral.value = data.SurplusIntegral ?? usableIntegral.value;