|
|
@@ -50,9 +50,19 @@
|
|
|
<view class="info-item-label">餐具费</view>
|
|
|
<view class="info-item-value">¥{{ priceDetail.tablewareFee }}</view>
|
|
|
</view>
|
|
|
+ <!-- 已完成订单:优惠金额(满减用 nominalValue;折扣按菜品总价与折扣率计算,与结算页选券逻辑一致) -->
|
|
|
+ <view
|
|
|
+ v-if="orderDetail.orderStatus === 3 && completedOrderDiscountDisplay > 0"
|
|
|
+ class="info-item info-item--coupon"
|
|
|
+ >
|
|
|
+ <view class="info-item-label">优惠金额</view>
|
|
|
+ <view class="info-item-value coupon-value">
|
|
|
+ <text class="coupon-amount">-¥{{ formatPrice(completedOrderDiscountDisplay) }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
<view class="price-line">
|
|
|
<view class="price-line-label">合计</view>
|
|
|
- <view class="price-line-value">¥{{ priceDetail.total }}</view>
|
|
|
+ <view class="price-line-value">¥{{ formatPrice(orderSummaryDisplayAmount) }}</view>
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
@@ -65,7 +75,7 @@
|
|
|
<view class="card-content">
|
|
|
<view class="info-item">
|
|
|
<view class="info-item-label">{{ payMethodText }}</view>
|
|
|
- <view class="info-item-value">¥{{ priceDetail.total }}</view>
|
|
|
+ <view class="info-item-value">¥{{ formatPrice(orderSummaryDisplayAmount) }}</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -177,6 +187,41 @@ const couponDisplayText = computed(() => {
|
|
|
return p.couponName || '已使用优惠券';
|
|
|
});
|
|
|
|
|
|
+// 已完成订单展示用优惠金额:与 pages/checkout 选券后 discountAmount 计算一致
|
|
|
+// couponType 1 满减:取 nominalValue;2 折扣:菜品总价 × (1 - discountRate/10),discountRate 已为接口值/10
|
|
|
+const completedOrderDiscountDisplay = computed(() => {
|
|
|
+ if (orderDetail.value.orderStatus !== 3) return 0;
|
|
|
+ const p = priceDetail.value;
|
|
|
+ const dishTotalNum = Number(p.dishTotal) || 0;
|
|
|
+ const type = Number(p.couponType);
|
|
|
+
|
|
|
+ if (type === 1) {
|
|
|
+ if (p.nominalValue != null && p.nominalValue !== '') {
|
|
|
+ const nv = Number(p.nominalValue);
|
|
|
+ return Number.isNaN(nv) ? 0 : Math.max(0, nv);
|
|
|
+ }
|
|
|
+ return Math.max(0, Number(p.discountAmount) || 0);
|
|
|
+ }
|
|
|
+ if (type === 2) {
|
|
|
+ if (p.discountRate == null || p.discountRate === '' || dishTotalNum <= 0) return 0;
|
|
|
+ const rate = Number(p.discountRate) || 0;
|
|
|
+ return Math.round(dishTotalNum * (1 - rate / 10) * 100) / 100;
|
|
|
+ }
|
|
|
+ return Math.max(0, Number(p.discountAmount) || 0);
|
|
|
+});
|
|
|
+
|
|
|
+// 合计 / 已完成实付展示:已完成 = 菜品总价 + 餐具费 − 优惠(与结算页 payAmount 一致);未完成 = 接口应付 total
|
|
|
+const orderSummaryDisplayAmount = computed(() => {
|
|
|
+ const p = priceDetail.value;
|
|
|
+ if (orderDetail.value.orderStatus === 3) {
|
|
|
+ const dish = Number(p.dishTotal) || 0;
|
|
|
+ const utensil = Number(p.tablewareFee) || 0;
|
|
|
+ const discount = completedOrderDiscountDisplay.value;
|
|
|
+ return Math.max(0, Math.round((dish + utensil - discount) * 100) / 100);
|
|
|
+ }
|
|
|
+ return Number(p.total) || 0;
|
|
|
+});
|
|
|
+
|
|
|
// 菜品列表(接口订单明细)
|
|
|
const foodList = ref([]);
|
|
|
|
|
|
@@ -266,21 +311,23 @@ function applyOrderData(data) {
|
|
|
orderStatus: raw?.orderStatus ?? raw?.status ?? null,
|
|
|
payType: raw?.payType ?? raw?.payMethod ?? ''
|
|
|
};
|
|
|
+ const couponInfo = raw?.couponInfo ?? raw?.coupon ?? {};
|
|
|
const dishTotal = raw?.totalAmount ?? raw?.dishTotal ?? raw?.orderAmount ?? raw?.foodAmount ?? 0;
|
|
|
const tablewareFee = raw?.tablewareFee ?? raw?.tablewareAmount ?? 0;
|
|
|
const couponDiscount = raw?.couponAmount ?? raw?.couponDiscount ?? 0;
|
|
|
const discountAmountVal = Number(raw?.discountAmount ?? raw?.couponAmount ?? raw?.couponDiscount ?? 0) || 0;
|
|
|
const total = raw?.payAmount ?? raw?.totalAmount ?? raw?.totalPrice ?? 0;
|
|
|
- const rawDiscountRate = raw?.discountRate ?? raw?.couponInfo?.discountRate ?? raw?.coupon?.discountRate;
|
|
|
+ const rawDiscountRate =
|
|
|
+ raw?.discountRate ?? couponInfo?.discountRate ?? raw?.coupon?.discountRate;
|
|
|
const discountRateVal = rawDiscountRate != null && rawDiscountRate !== '' ? (Number(rawDiscountRate) || 0) / 10 : null;
|
|
|
priceDetail.value = {
|
|
|
dishTotal: formatPrice(dishTotal),
|
|
|
tablewareFee: formatPrice(tablewareFee),
|
|
|
couponDiscount: formatPrice(couponDiscount),
|
|
|
discountAmount: discountAmountVal,
|
|
|
- couponName: raw?.couponName ?? '',
|
|
|
- couponType: raw?.couponType ?? null,
|
|
|
- nominalValue: raw?.nominalValue ?? null,
|
|
|
+ couponName: raw?.couponName ?? couponInfo?.couponName ?? couponInfo?.name ?? '',
|
|
|
+ couponType: raw?.couponType ?? couponInfo?.couponType ?? null,
|
|
|
+ nominalValue: raw?.nominalValue ?? couponInfo?.nominalValue ?? couponInfo?.amount ?? null,
|
|
|
discountRate: discountRateVal,
|
|
|
total: formatPrice(total)
|
|
|
};
|