Преглед изворни кода

🔧 feat: 在订单详情页增加通过订单号查询订单详情功能

- 支持通过订单号参数 order_no 查询订单详情
- 使用订单列表的过滤功能实现,无需修改后端接口
- 保持与现有订单ID查询方式的兼容性

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname пре 4 недеља
родитељ
комит
7df55e6339
1 измењених фајлова са 40 додато и 13 уклоњено
  1. 40 13
      mini/src/pages/order-detail/index.tsx

+ 40 - 13
mini/src/pages/order-detail/index.tsx

@@ -9,26 +9,53 @@ import { useState } from 'react'
 import './index.css'
 
 export default function OrderDetailPage() {
-  // 获取订单ID
+  // 获取订单ID或订单号
   const params = Taro.getCurrentInstance().router?.params
   const orderId = params?.id ? parseInt(params.id) : 0
+  const orderNo = params?.order_no || ''
   const queryClient = useQueryClient()
 
   // 取消原因对话框状态
   const [showCancelDialog, setShowCancelDialog] = useState(false)
 
+  // 通过订单ID或订单号查询订单详情
   const { data: order, isLoading } = useQuery({
-    queryKey: ['order', orderId],
+    queryKey: ['order', orderId, orderNo],
     queryFn: async () => {
-      const response = await orderClient[':id'].$get({
-        param: { id: orderId }
-      })
-      if (response.status !== 200) {
-        throw new Error('获取订单详情失败')
+      // 如果提供了订单ID,直接通过ID查询
+      if (orderId > 0) {
+        const response = await orderClient[':id'].$get({
+          param: { id: orderId }
+        })
+        if (response.status !== 200) {
+          throw new Error('获取订单详情失败')
+        }
+        return response.json()
       }
-      return response.json()
+
+      // 如果提供了订单号,通过订单列表过滤查询
+      if (orderNo) {
+        const response = await orderClient.$get({
+          query: {
+            filters: JSON.stringify({ orderNo }),
+            page: 1,
+            pageSize: 1
+          }
+        })
+        if (response.status !== 200) {
+          throw new Error('获取订单详情失败')
+        }
+        const data = await response.json()
+        if (data.data && data.data.length > 0) {
+          return data.data[0]
+        } else {
+          throw new Error('订单不存在')
+        }
+      }
+
+      throw new Error('缺少订单参数')
     },
-    enabled: orderId > 0,
+    enabled: orderId > 0 || orderNo !== '',
     staleTime: 5 * 60 * 1000,
   })
 
@@ -37,7 +64,7 @@ export default function OrderDetailPage() {
     mutationFn: async (reason: string) => {
       const response = await orderClient['cancel-order'].$post({
         json: {
-          orderId,
+          orderId: order?.id || orderId,
           reason
         }
       })
@@ -48,7 +75,7 @@ export default function OrderDetailPage() {
     },
     onSuccess: () => {
       // 取消成功后刷新订单数据
-      queryClient.invalidateQueries({ queryKey: ['order', orderId] })
+      queryClient.invalidateQueries({ queryKey: ['order', orderId, orderNo] })
 
       // 显示取消成功信息
       Taro.showToast({
@@ -131,7 +158,7 @@ export default function OrderDetailPage() {
   }
 
   // 使用orderGoods关联关系获取商品信息
-  const orderGoods = order?.orderGoods || []
+  const orderGoods = (order as any)?.orderGoods || []
 
   if (isLoading) {
     return (
@@ -195,7 +222,7 @@ export default function OrderDetailPage() {
         refresherTriggered={false}
         onRefresherRefresh={() => {
           // 下拉刷新逻辑
-          queryClient.invalidateQueries({ queryKey: ['order', orderId] })
+          queryClient.invalidateQueries({ queryKey: ['order', orderId, orderNo] })
         }}
       >
         {/* 顶部状态卡片 */}