feat(order-logistics): 改造订单详情物流查看功能

- 后端 ShopOrderServiceImpl.getByIdRel 填充发货单 shopOrderDelivery 信息
- 前端新增 ShopOrderDelivery 类型,ShopOrder 接口添加 shopOrderDelivery 字段
- 物流页支持仅传 orderId 即可加载订单及发货单,无需必须传 expressNo 和 expressCompany
- 物流轨迹查询条件调整,失败时展示发货单信息,不阻塞页面
- 新增发货信息卡展示发货人、联系方式、地址、物流单号、发货时间及发货方式
- 新增收货信息卡,展示订单收货人名称、电话、地址
- 订单列表“待付款”Tab修复状态显示为“待付款”,兼容线下付款订单逻辑
- 组件OrderCard中去除isOffline判断,修正订单状态文案一致性
- 物流详情页复制功能优化,支持复制正确的物流单号
- 优化快递状态提示、时间格式化显示及页面空状态处理
- 电话联系客服按钮事件名称修正和调用逻辑优化
This commit is contained in:
2026-07-15 16:38:24 +08:00
parent af645c058e
commit b45a5722eb
4 changed files with 272 additions and 130 deletions

View File

@@ -138,6 +138,25 @@
- 引入:从 `@tarojs/components` 新增导入 `Button`
- 注意:微信客服 Button 在开发者工具中无效,需真机预览测试
## 订单详情页查看物流改造(显示 shopOrderDelivery
- 需求:订单详情页点击「查看物流」跳转 `/pages/order/logistics`,原页面强制要求 URL 带 expressNo + expressCompany但详情页只传了 orderId导致 toast「缺少物流参数」+ 空状态
- 后端修复(`/Users/gxwebsoft/JAVA/guilixu-java`1 个文件):
- `ShopOrderServiceImpl.java``getByIdRel(orderId)` 原本只调 `baseMapper.selectListRel(param)`,没有像 `pageRel` 那样填充 `shopOrderDelivery`。新增私有方法 `fillShopOrderDelivery(order)`,在快递配送(deliveryType==0/null)且已发货(deliveryStatus>10)时调 `shopOrderDeliveryService.getByOrderId(orderId)` 查发货单,并关联 `shopExpressService.getById(expressId)` 取 expressName 填充
- 编译验证Maven compile 成功
- 前端类型补充(`src/api/shop/shopOrder/model/index.ts`
- 新增 `ShopOrderDelivery` 接口(与后端 ShopOrderDelivery 实体对应deliveryId/orderId/deliveryMethod/expressId/expressName/sendName/sendPhone/sendAddress/expressNo/createTime 等)
- `ShopOrder` 接口新增 `shopOrderDelivery?: ShopOrderDelivery | null` 字段
- 前端物流页改造(`src/pages/order/logistics.tsx`
- 不再强制要求 URL 带 expressNo/expressCompany只要求 orderId
-`getShopOrder(orderId)` 加载订单(含后端填充的 shopOrderDelivery
- 运单号优先级URL expressNo → delivery.expressNo → order.expressNo
- 物流轨迹:仅在有 expressNo + expressCompany 代码时才查询 queryLogistics失败不阻塞发货单展示
- 新增「发货信息」卡:发货人/联系方式/发货地址/物流单号(可复制)/发货时间/发货方式(10手动/20无需物流/30电子面单)
- 新增「收货信息」卡:从订单读 realName/mobile/address
- 保留原物流轨迹时间线(仅在查询到时展示)和温馨提示
- 空状态:订单接口也失败时才显示
- 后端需重启服务才生效
## 修复 VIP 价格首页不显示 + 后端不认 price 字段
- **问题 1首页**`src/pages/index/index.tsx`tabBar 首页)没接入 `useVipStatus`,热销推荐价格一直显示 `product.price` 而非 `dealerPrice`。商品详情/商城列表/购物车/分类都修了,唯独漏了 tabBar 首页
- **问题 2后端 DTO 缺字段)**:前端 `OrderGoodsItem` 已传 `price` 字段,但后端 `OrderCreateRequest.OrderGoodsItem`(嵌套静态类)**根本没有 `price` 字段**Jackson 反序列化直接丢弃。后端 `OrderBusinessService.validateAndCalculateTotal()``saveOrderGoods()` 都用 `goods.getPrice()` 兜底 —— 这就是「前端传的对、后端处理就错」的根本原因
@@ -157,3 +176,14 @@
- `goods.salePrice` - 市场价(划掉的)
- `goods.dealerPrice` - VIP 专享价
- 前端传 `dealerPrice``OrderGoodsItem.price`,后端通过该字段下单
## 修复订单列表"待付款"Tab 下状态显示"待发货"
- 文件:`src/components/common/OrderCard/index.tsx`
- 问题:用户切到"待付款"Tab下方订单卡片状态文字显示"待发货",与 Tab 不一致
- 根因:线下付款(payType=9)订单的 `payStatus=false`(数据库 pay_status=0后端 `statusFilter=0` 的 SQL 条件 `pay_status=0 AND order_status=0` 把它归入"待付款"Tab 是合理的(待商家确认收款)。但 OrderCard 的 `getCardStatus``isOffline=true``!isOffline=false` → 跳过"待付款"分支,进入 `if (deliveryStatus === 10)` → 显示"待发货"
- 关键业务规则:
- 货到付款(8):后端 Controller `saveLegacy()` 下单时已 `setPayStatus(true)`,不会进入 statusFilter=0
- 线下付款(9):保持 `payStatus=false`,会进入 statusFilter=0
- 微信支付(1):未付款 `payStatus=false`,正常进入 statusFilter=0
- 修复:`getCardStatus` 第 30 行去掉 `&& !isOffline` 条件,改为 `if (!payStatus && !isCod) return { text: '待付款' }`。保留 `!isCod`(货到付款的特殊兜底,虽然正常流程不会走到这里);清理掉不再使用的 `isOffline` 变量
- 决策依据:用户认可"线下付款订单出现在待付款 Tab"是合理的,因此只改前端文案判断,不动后端 SQL