Files
xinlong-shop-taro/.workbuddy/memory/2026-07-17.md
赵忠林 098fc01623 feat(store-orders): 增强订单页支持搜索及重构Tab
- 将订单列表底部时间显示格式由只含日期改为显示至分钟的完整时间
- 门店订单页新增搜索功能,支持订单号、手机号、昵称等多字段模糊匹配
- 实现单个搜索框叠加于当前Tab内,切Tab及搜索提交自动刷新订单列表
- 调整ScrollView高度以适配搜索栏新增布局
- 优化订单Tab结构,由“全部/已完成/已关闭”改为“待处理/已完成/已关闭”
- 待处理Tab合并待付款、待发货、待核销、待收货多状态订单
- 去除原“全部”Tab,默认激活改为“待处理”Tab
- 新订单角标由“全部”Tab迁移到“待处理”Tab显示
- 搜索无结果时显示“未找到与‘xxx’相关的订单”提示
- 确保后端筛选与前端Tab状态映射一致,提升用户体验
2026-07-17 02:00:24 +08:00

5.2 KiB
Raw Blame History

2026-07-17 工作日志

门店订单管理页改造src/pages/store/orders/index.tsx

1. 删除订单改为关闭订单

  • 原"删除订单"按钮调用 removeShopOrder(物理删除),改为"关闭订单"调用 updateShopOrder({ orderId, orderStatus: 2 })(逻辑关闭)
  • 确认弹窗文案从"删除后无法恢复"改为"关闭后无法恢复"
  • 移除 removeShopOrder 导入,新增 confirmOfflinePayment 导入

2. 待付款订单加确认收款按钮

  • 背景:线下付款(payType=9)且未付款的订单,门店需要"确认收款"功能与后台管理guilixu-admin对齐
  • 后端接口PUT /shop/shop-order/confirm-offline-payment/{id}?remarks=xxx&paymentVoucher=xxx
    • 后端 ShopOrderController.confirmOfflinePayment()ShopOrderServiceImpl.confirmOfflinePayment()
    • 校验payType必须为9(线下付款)、orderStatus不能为2(已关闭)、不能重复确认
    • 确认后设置 payStatus=true、payTime=now(),可选保存 remarks(merchantRemarks) 和 paymentVoucher
  • 前端API:在 src/api/shop/shopOrder/index.ts 新增 confirmOfflinePayment(id, remarks?, paymentVoucher?) 函数
    • 注意Taro 的 request.put 不支持 params 参数,需手动拼接 query string
  • ShopOrder Model:新增 paymentVoucher?: string 字段
  • 页面改动
    • OpType 从 'pay'|'complete'|'editPrice' 改为 'confirmPay'|'complete'|'editPrice'
    • getOrderActions 新增条件:!payStatus && payType===9 && orderStatus===0 → 显示"确认收款"按钮
    • 弹窗新增备注 Textarea仅 confirmPay 显示凭证图片限制1张confirmPay必填校验
    • submitOperation 新增 confirmPay 分支,调用 confirmOfflinePayment API
    • 新增 payRemarks state

3. 订单详情页金额明细0隐藏src/pages/order/detail.tsx

  • BugReact 经典陷阱 {order.reducePrice && Number(order.reducePrice) > 0 && (...)},当 reducePrice 为数字 0 时,0 && ... 短路求值为 0React 渲染文本"0"
  • 修复:改为 {Number(order.reducePrice || 0) > 0 && (...)},始终返回 boolean

验证

  • npx taro build --type weapp 构建成功

地址/购物车问题修复

5. 地图选择首次打开列表不显示src/pages/user/address-edit.tsx

  • 问题:鸿蒙手机首次打开 Taro.chooseLocation 时地图 POI 列表不显示,需拖动才出现
  • 根因:未传入经纬度时地图默认定位到北京,鸿蒙系统不会自动获取用户位置
  • 修复:调 chooseLocation 前先 Taro.getLocation({ type: 'gcj02' }) 获取当前位置,将 latitude/longitude 传给地图确保首次打开就在用户位置附近POI 列表立即加载

6. 收货地址编辑不加载旧数据

  • Bug 1API 路径不匹配):前端 updateShopUserAddressPUT /shop/shop-user-address/{id},但后端 @PutMapping()/{id} 路径 → 404
    • 修复:改为 PUT /shop/shop-user-address(去掉 /{id}id 通过 body 传递)
  • Bug 2加载防御setFormData(addr) 直接替换 state若后端返回 null 字段会覆盖初始 ''
    • 修复:改为 setFormData(prev => ({...prev, ...addr, name: addr.name || '', ...})) 保证字段非 null

7. 新用户注册后首次加购购物车不刷新

  • 根因:注册页 register.tsx 和登录页 login.tsx 只调 saveStorageByLoginUser() 存 storage未调 UserContext.loginUser() 更新 React 状态 → isLoggedIn 仍为 false → 购物车页 useDidShowif (isLoggedIn) refresh() 不执行
  • 修复
    1. register.tsxlogin.tsxsaveStorageByLoginUser 后加 loginUser(token, user) 同步 UserContext
    2. sms-login.tsxloginBySms 后加 syncFromStorage() 同步状态
    3. 防御性措施:cart.tsxproduct-detail.tsxindex/index.tsxuseDidShowsyncFromStorage() 确保页面显示时从 storage 同步用户状态

门店订单页 Tab 改造src/pages/store/orders/index.tsx

  • 需求:原「全部 / 已完成 / 已关闭」Tab 改为「待处理 / 已完成 / 已关闭」
    • 待处理 = 待付款(0) + 待发货(1) + 待核销(2) + 待收货(3),按用户确认把待核销(2)也并入
    • 已完成 = statusFilter 5不变已关闭 = statusFilter 8不变
  • TabKey 类型'all' | 'pending' | 'completed''pending' | 'completed' | 'closed'
  • TABS 配置:删除原「全部」无筛选 Tab待处理用 params 数组 [{statusFilter:0},{1},{2},{3}] 并行请求合并去重loadOrders 已支持)
  • 默认选中useState<TabKey>('all')'pending'
  • 新订单角标tab.key === 'all'tab.key === 'pending'(移到待处理 Tab
  • statusFilter 后端映射参考ShopOrderMapper.xml 第240-282行0待支付=未付款、1待发货=pay1&delivery10&order0、2待核销=pay1&order0、3待收货=delivery20&order!=1、5已完成=order1、8已取消=order2
  • 验证tsc 仅剩预存 @tarojs/taro 类型缺失环境报错,本文件无新错误
  • ⚠️ 注意原「全部」Tab 显示的「待评价(statusFilter=4)」订单在改版后无 Tab 承接(用户确认不含待评价),如需可见后续可并入待处理

验证

  • npx taro build --type weapp 构建成功