From 37cea1b6d0fdd0ce70ac2b38705b8dff8e8aaf89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 17 Jul 2026 15:28:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(order):=20=E4=BF=AE=E6=AD=A3=E6=9C=AA?= =?UTF-8?q?=E4=BB=98=E6=AC=BE=E5=B7=B2=E5=8F=91=E8=B4=A7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 订单列表卡片 OrderCard 中将已发货/已收货状态判断提前,覆盖未付款状态显示 - 订单详情页 detail.tsx 调整 getOrderDisplayStatus 和 getOrderPhase 函数,优先显示物流状态 - 确保未付款但已发货订单状态正确显示为“待收货” - 改动不影响正常付款和发货流程,仅修正异常状态显示问题 --- .workbuddy/memory/2026-07-17.md | 7 +++++++ src/components/common/OrderCard/index.tsx | 6 ++++-- src/pages/order/detail.tsx | 14 +++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/.workbuddy/memory/2026-07-17.md b/.workbuddy/memory/2026-07-17.md index 78e2540..fe5291f 100644 --- a/.workbuddy/memory/2026-07-17.md +++ b/.workbuddy/memory/2026-07-17.md @@ -104,3 +104,10 @@ - 右上角按钮用 `absolute top-3 right-4 z-20` 定位,半透明白色圆形背景 + base64 SVG 图标 - 小程序不支持 `` 标签,用 `Image` 组件 + `data:image/svg+xml;base64,...` data URI 渲染图标 - 用户取消扫码(errMsg 含 'cancel')静默处理 + +## 修复未付款已发货订单状态显示错误 +- **问题**:订单列表卡片(OrderCard)和详情页(detail.tsx)状态判断时 `!payStatus`(待付款)优先于 `deliveryStatus` 判断,导致"未付款但已发货"(payStatus=false + deliveryStatus=20) 的订单显示"待付款"而非"待收货" +- **修改文件**: + - `src/components/common/OrderCard/index.tsx`:`getCardStatus` 把 `deliveryStatus===20/30` 判断提前到 `!payStatus` 之前 + - `src/pages/order/detail.tsx`:`getOrderDisplayStatus` 和 `getOrderPhase` 两个函数都做同样调整,物流状态优先于付款状态 +- **影响范围**:仅影响"未付款但已发货"的异常场景,正常流程不受影响 diff --git a/src/components/common/OrderCard/index.tsx b/src/components/common/OrderCard/index.tsx index 612191b..e164c72 100644 --- a/src/components/common/OrderCard/index.tsx +++ b/src/components/common/OrderCard/index.tsx @@ -25,12 +25,14 @@ const getCardStatus = (order: ShopOrder): { text: string; color: string } => { // 终态:orderStatus=1 必须最先判断,盖过 deliveryStatus/payStatus if (orderStatus === 1) return { text: '已完成', color: '#0e932e' } + // 物流状态优先于付款状态(已发货/已收货的订单,即使未付款也显示物流状态) + if (deliveryStatus === 20) return { text: '待收货', color: '#4b9cf5' } + if (deliveryStatus === 30) return { text: '已收货', color: '#0e932e' } + // 货到付款(8):下单时后端已 setPayStatus(true),不会走到这里 // 线下付款(9):保持 payStatus=false(待商家确认收款),应显示"待付款"与 Tab 一致 if (!payStatus && !isCod) return { text: '待付款', color: '#ee0a24' } if (deliveryStatus === 10) return { text: '待发货', color: '#4b9cf5' } - if (deliveryStatus === 20) return { text: '待收货', color: '#4b9cf5' } - if (deliveryStatus === 30) return { text: '已收货', color: '#0e932e' } return { text: '已付款', color: '#0e932e' } } diff --git a/src/pages/order/detail.tsx b/src/pages/order/detail.tsx index 4d3bc2f..b9cd260 100644 --- a/src/pages/order/detail.tsx +++ b/src/pages/order/detail.tsx @@ -71,7 +71,12 @@ const getOrderDisplayStatus = (order: ShopOrder): { title: string; bgColor: stri return { bgColor: '#ee0a24', title: '退款被拒绝', subtitle: '退款申请已被拒绝' } } - // 正常订单流程 + // 物流状态优先于付款状态(已发货/已收货的订单,即使未付款也显示物流状态) + if (deliveryStatus === 20 || deliveryStatus === 30) { + return { bgColor: '#4b9cf5', title: '待收货', subtitle: '商品运输中,请注意查收' } + } + + // 未发货时按付款状态显示 if (!payStatus && !isCod && !isOffline) { return { bgColor: '#ff7d00', title: '待付款', subtitle: '请尽快完成支付' } } @@ -84,9 +89,6 @@ const getOrderDisplayStatus = (order: ShopOrder): { title: string; bgColor: stri if (deliveryStatus === 10) { return { bgColor: '#4b9cf5', title: '待发货', subtitle: '商家正在准备商品' } } - if (deliveryStatus === 20 || deliveryStatus === 30) { - return { bgColor: '#4b9cf5', title: '待收货', subtitle: '商品运输中,请注意查收' } - } if (orderStatus === OrderStatus.Completed) { return { bgColor: '#0e932e', title: '已完成', subtitle: '交易已完成,感谢购买' } } @@ -111,12 +113,14 @@ const getOrderPhase = (order: ShopOrder): OrderPhase => { return orderStatus === OrderStatus.Cancelled || orderStatus === OrderStatus.RefundSuccess ? 'cancelled' : 'refund' } + // 物流状态优先于付款状态(已发货/已收货的订单,即使未付款也进入 shipped 阶段) + if (deliveryStatus === 20 || deliveryStatus === 30) return 'shipped' + // 线下付款且未确认收款:等待商家确认,不显示"立即支付"按钮 if (isOffline && !payStatus) return 'offline_pending' // 货到付款订单:payStatus=true 但还未实际付款,直接进入 unshipped 阶段(不需要"立即支付"按钮) if (!payStatus && !isCod) return 'unpaid' if (deliveryStatus === 10) return 'unshipped' - if (deliveryStatus === 20 || deliveryStatus === 30) return 'shipped' if (orderStatus === OrderStatus.Completed) return 'completed' return 'unshipped'