From 39f6fca28e3f78abe48f08e474ec011abb990b36 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 09 九月 2026 10:39:21 +0800
Subject: [PATCH] update

---
 frontend/src/views/OrdersView.vue |   40 +++++++++++++++++++++++++++++++++-------
 1 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/frontend/src/views/OrdersView.vue b/frontend/src/views/OrdersView.vue
index da46bb8..3892dfd 100644
--- a/frontend/src/views/OrdersView.vue
+++ b/frontend/src/views/OrdersView.vue
@@ -24,14 +24,34 @@
 const refundOrderRecord = ref(null)
 const refundForm = reactive({ amount: '' })
 const visitorId = Number(route.query.visitorId) || undefined
+const guideId = Number(route.query.guideId) || undefined
 const query = reactive({ page: 1, size: 10, keyword: '', scenicName: null, status: null })
 const paymentMethodMap = { WECHAT: '微信支付', ALIPAY: '支付宝' }
+const refundStatusMap = {
+  REFUNDING: '\u9000\u6b3e\u5904\u7406\u4e2d',
+  PARTIAL: '\u90e8\u5206\u9000\u6b3e',
+  REFUND_FAILED: '\u9000\u6b3e\u5931\u8d25',
+}
+const refundStatusTypeMap = { REFUNDING: 'warning', PARTIAL: 'warning', REFUND_FAILED: 'danger' }
 
 const formatDateTime = (value) => value ? value.replace('T', ' ').slice(0, 19) : '-'
 const formatMoney = (value) => Number(value || 0).toFixed(2)
-const canRefund = (order) => refundableOrderStatuses.includes(order.status)
+const getRefundableAmount = (order) => Number(
+  order.refundableAmount
+    ?? (Number(order.paymentAmount ?? order.amount ?? 0) - Number(order.refundedAmount ?? 0)),
+)
+const canRefund = (order) => (refundableOrderStatuses.includes(order.status)
+  || (order.status === 'CANCELLED' && ['PARTIAL', 'REFUND_FAILED'].includes(order.refundStatus)))
   && !['REFUNDING', 'REFUNDED'].includes(order.refundStatus)
+  && getRefundableAmount(order) > 0
+const statusLabel = (order) => refundStatusMap[order.refundStatus] || orderStatusMap[order.status] || order.status
+const statusType = (order) => refundStatusTypeMap[order.refundStatus] || orderStatusTypeMap[order.status] || 'info'
 const refundableAmount = computed(() => Number(
+  refundOrderRecord.value?.refundableAmount
+    ?? (Number(refundOrderRecord.value?.paymentAmount ?? refundOrderRecord.value?.amount ?? 0)
+      - Number(refundOrderRecord.value?.refundedAmount ?? 0)),
+))
+const paymentAmount = computed(() => Number(
   refundOrderRecord.value?.paymentAmount ?? refundOrderRecord.value?.amount ?? 0,
 ))
 const loadOrders = async () => {
@@ -39,7 +59,7 @@
   try {
     const [startDate, endDate] = dateRange.value || []
     const result = await getOrders({
-      page: query.page, size: query.size, keyword: query.keyword.trim() || undefined, visitorId,
+      page: query.page, size: query.size, keyword: query.keyword.trim() || undefined, visitorId, guideId,
       scenicName: query.scenicName || undefined, status: query.status || undefined, startDate, endDate,
     })
     records.value = result.records
@@ -80,8 +100,12 @@
   }
   refundSubmitting.value = true
   try {
-    await refundOrder(refundOrderRecord.value.id, amount.toFixed(2))
-    ElMessage.success('退款成功')
+    const result = await refundOrder(refundOrderRecord.value.id, amount.toFixed(2))
+    if (result?.refundStatus === 'REFUNDED') {
+      ElMessage.success('退款成功')
+    } else {
+      ElMessage.info('退款申请已提交,等待支付渠道确认')
+    }
     refundDialogVisible.value = false
     await loadOrders()
   } finally {
@@ -158,7 +182,9 @@
         <el-table-column label="下单时间" min-width="160" align="center">
           <template #default="{ row }">{{ formatDateTime(row.placedAt) }}</template>
         </el-table-column>
-        <el-table-column prop="meetingPointCount" label="讲解路线汇合点" min-width="115" align="center" />
+        <el-table-column label="讲解路线汇合点" min-width="115" align="center">
+          <template #default="{ row }">{{ row.meetingPointName || '-' }}</template>
+        </el-table-column>
         <el-table-column prop="guideName" label="导游姓名" min-width="100" align="center">
           <template #default="{ row }">{{ row.guideName || '-' }}</template>
         </el-table-column>
@@ -167,7 +193,7 @@
         </el-table-column>
         <el-table-column label="状态" min-width="125" fixed="right" align="center">
           <template #default="{ row }">
-            <el-tag :type="orderStatusTypeMap[row.status] || 'info'" effect="plain">{{ orderStatusMap[row.status] || row.status }}</el-tag>
+            <el-tag :type="statusType(row)" effect="plain">{{ statusLabel(row) }}</el-tag>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="125" fixed="right" align="center">
@@ -214,7 +240,7 @@
           <span class="refund-label">订单金额</span>
           <strong>¥{{ formatMoney(refundOrderRecord.amount) }}</strong>
           <span class="refund-label">实际支付</span>
-          <strong>¥{{ formatMoney(refundableAmount) }}</strong>
+          <strong>¥{{ formatMoney(paymentAmount) }}</strong>
 
           <span class="refund-label">支付流水号</span>
           <span class="refund-flow-no">{{ refundOrderRecord.paymentOrderNo || '-' }}</span>

--
Gitblit v1.7.1