sunshibo il y a 18 heures
Parent
commit
8029e7bf27

+ 6 - 3
api/dining.js

@@ -215,11 +215,11 @@ export const GetMyOrders = (params) =>
 export const GetOrderInfo = (orderId) =>
   api.get({ url: `/store/order/info/${encodeURIComponent(orderId)}` });
 
-// 订单支付(GET /payment/prePay,入参 orderNo、payType、payer、price、subject、storeId、couponId、payerId、discountAmount 优惠金额、payAmount 支付金额;返回微信支付调起参数)
+// 订单支付(GET /payment/prePay,入参 orderNo、payType、payer、price、subject、storeId、couponId、payerId、discountAmount、payAmount、serviceFee 服务费;返回微信支付调起参数)
 export const PostOrderPay = (params) => {
   const query = {
     orderNo: params.orderNo,
-    payType: 'wechatPayMininProgram',
+    payType: 'wechatPayPartnerMininProgram',
     payer: params.payer,
     price: params.price,
     subject: params.subject ?? '订单支付',
@@ -237,6 +237,9 @@ export const PostOrderPay = (params) => {
   if (params.payAmount != null && params.payAmount !== '') {
     query.payAmount = params.payAmount;
   }
+  if (params.serviceFee != null && params.serviceFee !== '') {
+    query.serviceFee = params.serviceFee;
+  }
   return api.get({
     url: '/payment/prePay',
     params: query
@@ -249,7 +252,7 @@ export const GetSearchOrderByOutTradeNoPath = (params) =>
   api.get({
     url: '/payment/searchOrderByOutTradeNoPath',
     params: {
-      payType: params.payType ?? 'wechatPayMininProgram',
+      payType: params.payType ?? 'wechatPayPartnerMininProgram',
       transactionId: params.transactionId,
       storeId: params.storeId
     },

+ 5 - 2
api/genericDining.js

@@ -229,7 +229,7 @@ export const GetOrderInfo = (orderId) =>
 export const PostOrderPay = (params) => {
   const query = {
     orderNo: params.orderNo,
-    payType: 'wechatPayMininProgram',
+    payType: 'wechatPayPartnerMininProgram',
     payer: params.payer,
     price: params.price,
     subject: params.subject ?? '订单支付',
@@ -247,6 +247,9 @@ export const PostOrderPay = (params) => {
   if (params.payAmount != null && params.payAmount !== '') {
     query.payAmount = params.payAmount;
   }
+  if (params.serviceFee != null && params.serviceFee !== '') {
+    query.serviceFee = params.serviceFee;
+  }
   return api.get({
     url: '/payment/prePay',
     params: query
@@ -258,7 +261,7 @@ export const GetSearchOrderByOutTradeNoPath = (params) =>
   api.get({
     url: '/payment/searchOrderByOutTradeNoPath',
     params: {
-      payType: params.payType ?? 'wechatPayMininProgram',
+      payType: params.payType ?? 'wechatPayPartnerMininProgram',
       transactionId: params.transactionId,
       storeId: params.storeId
     },

+ 4 - 2
pages/checkout/index.vue

@@ -545,6 +545,7 @@ const handleConfirmPay = async () => {
           ? String(selectedCouponId.value)
           : '';
     const discountAmountVal = Number(orderInfo.value.discountAmount) || 0;
+    const serviceFeeVal = Math.round((Number(orderInfo.value.serviceFee ?? 0) || 0) * 100) / 100;
     const res = await diningApi.PostOrderPay({
       orderNo,
       payer: openid,
@@ -554,7 +555,8 @@ const handleConfirmPay = async () => {
       couponId: couponIdVal || undefined,
       payerId: payerId ? String(payerId) : undefined,
       discountAmount: discountAmountVal,
-      payAmount: payAmountVal
+      payAmount: payAmountVal,
+      serviceFee: serviceFeeVal
     });
     uni.hideLoading();
     uni.requestPayment({
@@ -570,7 +572,7 @@ const handleConfirmPay = async () => {
         if (oid) {
           diningApi.PostOrderSettlementUnlock({ orderId: oid }).catch((e) => console.warn('解锁订单失败:', e));
         }
-        const payType = 'wechatPayMininProgram';
+        const payType = 'wechatPayPartnerMininProgram';
         // 查询支付结果需用 prePay 返回的 transactionId,与订单号 orderNo 可能不同
         const prePayTid =
           res?.transactionId ??

+ 0 - 2
pages/orderInfo/index.vue

@@ -211,8 +211,6 @@ async function loadOrderList(tab, append = false) {
     if (keyword) params.keyword = keyword;
     const sid = storeIdRef.value;
     if (sid != null && sid !== '') params.storeId = Number(sid);
-    const tid = tableIdRef.value;
-    if (tid != null && tid !== '') params.tableId = Number(tid);
     const res = await GetOrderPage(params);
     // /store/order/my-orders:返回 data,可能为 { records, total } 或 { data: { records, total } }
     const raw = res && typeof res === 'object' ? res : {};

+ 55 - 10
pages/orderInfo/orderDetail.vue

@@ -45,7 +45,7 @@
           <view class="info-item-label">菜品总价</view>
           <view class="info-item-value">¥{{ priceDetail.dishTotal }}</view>
         </view>
-        <view v-if="priceDetail.serviceFeeAmount > 0" class="info-item">
+        <view class="info-item">
           <view class="info-item-label">服务费</view>
           <view class="info-item-value">¥{{ priceDetail.serviceFee }}</view>
         </view>
@@ -54,7 +54,7 @@
           v-if="orderDetail.orderStatus === 3 && completedOrderDiscountDisplay > 0"
           class="info-item info-item--coupon"
         >
-          <view class="info-item-label">优惠金额</view>
+          <view class="info-item-label">优惠</view>
           <view class="info-item-value coupon-value">
             <text class="coupon-amount">-¥{{ formatPrice(completedOrderDiscountDisplay) }}</text>
           </view>
@@ -66,15 +66,23 @@
        
       </view>
     </view>
-    <!-- 已完成订单显示支付信息 -->
-    <view v-if="orderDetail.orderStatus === 3" class="card">
+    <!-- 已支付 / 已完成:支付信息(结算方式、支付方式、支付时间) -->
+    <view v-if="showPaidOrderPaymentCard" class="card">
       <view class="card-header">
         <view class="card-header-title">支付信息</view>
       </view>
       <view class="card-content">
         <view class="info-item">
-          <view class="info-item-label">{{ payMethodText }}</view>
-          <view class="info-item-value">¥{{ formatPrice(orderSummaryDisplayAmount) }}</view>
+          <view class="info-item-label">结算方式</view>
+          <view class="info-item-value">{{ settlementMethodText }}</view>
+        </view>
+        <view class="info-item">
+          <view class="info-item-label">支付方式</view>
+          <view class="info-item-value">{{ payMethodText }}</view>
+        </view>
+        <view class="info-item">
+          <view class="info-item-label">支付时间</view>
+          <view class="info-item-value">{{ payTimeDisplay }}</view>
         </view>
       </view>
     </view>
@@ -145,7 +153,11 @@ const orderDetail = ref({
   contactPhone: '',
   remark: '',
   orderStatus: null,
-  payType: ''  // 支付方式,如 wechatPayMininProgram
+  payType: '', // 支付方式编码,如 wechatPayMininProgram
+  /** 结算方式文案,接口无则默认「手机支付」 */
+  settlementMethod: '',
+  /** 支付完成时间 */
+  payTime: ''
 });
 
 // 价格明细(两位小数)
@@ -162,12 +174,32 @@ const priceDetail = ref({
   total: '0.00'
 });
 
-// 支付方式展示:根据 payType 转为中文
+// 已支付(1) / 已完成(3) 展示支付信息卡片
+const showPaidOrderPaymentCard = computed(() => {
+  const s = orderDetail.value?.orderStatus;
+  return s === 1 || s === 3;
+});
+
+// 结算方式:优先接口 settlementMethod / settlementTypeName,小程序场景默认「手机支付」
+const settlementMethodText = computed(() => {
+  const m = orderDetail.value?.settlementMethod;
+  if (m != null && String(m).trim() !== '') return String(m).trim();
+  return '手机支付';
+});
+
+// 支付方式:根据 payType 转为中文
 const payMethodText = computed(() => {
   const t = orderDetail.value?.payType ?? '';
   if (/wechat|微信/i.test(t)) return '微信支付';
   if (/alipay|支付宝/i.test(t)) return '支付宝';
-  return t || '微信支付';
+  return t && String(t).trim() !== '' ? String(t).trim() : '微信支付';
+});
+
+// 支付时间
+const payTimeDisplay = computed(() => {
+  const t = orderDetail.value?.payTime;
+  if (t != null && String(t).trim() !== '') return String(t).trim();
+  return '—';
 });
 
 // 优惠券展示:满减券显示 nominalValue+元,折扣券显示 discountRate+折,否则显示 couponName 或 已使用优惠券(与 checkout 一致)
@@ -314,7 +346,20 @@ function applyOrderData(data) {
     contactPhone: raw?.contactPhone ?? raw?.phone ?? '',
     remark: raw?.remark ?? '',
     orderStatus: raw?.orderStatus ?? raw?.status ?? null,
-    payType: raw?.payType ?? raw?.payMethod ?? ''
+    payType: raw?.payType ?? raw?.payMethod ?? '',
+    settlementMethod:
+      raw?.settlementMethod ??
+      raw?.settlementTypeName ??
+      raw?.settlementTypeDesc ??
+      raw?.payChannelName ??
+      '',
+    payTime:
+      raw?.payTime ??
+      raw?.paymentTime ??
+      raw?.paidTime ??
+      raw?.payFinishTime ??
+      raw?.paySuccessTime ??
+      ''
   };
   const couponInfo = raw?.couponInfo ?? raw?.coupon ?? {};
   const dishTotal = raw?.totalAmount ?? raw?.dishTotal ?? raw?.orderAmount ?? raw?.foodAmount ?? 0;

+ 2 - 2
pages/paymentSuccess/index.vue

@@ -18,7 +18,7 @@ import { getFileUrl } from "@/utils/file.js";
 import { GetSearchOrderByOutTradeNoPath, PostOrderComplete } from "@/api/dining.js";
 
 const orderId = ref('');
-const payType = ref('wechatPayMininProgram');
+const payType = ref('wechatPayPartnerMininProgram');
 const transactionId = ref('');
 const storeId = ref('');
 const loading = ref(true);
@@ -53,7 +53,7 @@ async function queryPayResult() {
 
 onLoad((options) => {
   orderId.value = options?.id ?? '';
-  payType.value = options?.payType ?? 'wechatPayMininProgram';
+  payType.value = options?.payType ?? 'wechatPayPartnerMininProgram';
   transactionId.value = options?.transactionId ?? '';
   storeId.value = options?.storeId ?? '';
   queryPayResult();