feat(store): 门店订单页新增发货按钮及选择发货人功能

- 物流页发货信息依赖 shopOrderDelivery,之前门店确认完成不创建发货单导致显示为空
- 在门店订单页确认收款后增加发货按钮,允许选择门店店员作为发货人并创建发货单
- 新增接口 saveShopOrderDelivery 调用 POST /shop/shop-order-delivery 创建发货单
- 补全 shopStoreUser 模型字段,支持店员姓名、电话、角色等信息
- 订单列表支持发货操作按钮显示及样式,增加对应操作逻辑及UI弹窗选择发货人员
- 发货后订单状态置为已发货(deliveryStatus=20),同步更新发货时间和物流页显示
- 用户可选择门店全部店员(含经理)作为发货人员,确认完成按钮可与发货按钮共存,行为保持兼容
- 完成相关接口调用错误提示与加载状态处理,确保用户体验
- taro 构建通过,无类型错误
This commit is contained in:
2026-07-17 03:49:03 +08:00
parent fff2ceb40d
commit 7071ec408e
4 changed files with 202 additions and 4 deletions

View File

@@ -74,5 +74,23 @@
- **字段确认**:用户选择「送达时间」用 `order.deliveryTime`,且**保留**现有「发货时间」行 → `deliveryTime` 在两行各显示一次(用户明知并接受)
- **改动**第408-413行 `{order.expirationTime && ...过期时间}` 改为 `{order.deliveryTime && ...送达时间}`,数据用 `formatTime(order.deliveryTime)`
## 门店订单页「发货」按钮 + 选发货人员写 shopOrderDelivery解决物流页发货信息为空
- **根因**:物流页 `pages/order/logistics.tsx` 的「发货信息」卡片依赖 `shopOrderDelivery` 发货单;门店「确认完成」只改订单状态、不建发货单 → `delivery` 为 null → 卡片不渲染(空白)
- **方案**:在「确认收款」之后加「发货」按钮,选门店店员作为发货人,写入 `shopOrderDelivery`,从源头让物流页有数据
- **后端可行性(已确认)**`POST /shop/shop-order-delivery`(save) 已存在,实体字段全可空最少传 orderId`listShopStoreUser({storeId})` 已存在;请求层自动注入 `TenantId` 请求头(无需手动传租户);`ShopOrderDelivery` 实体有 orderId/deliveryMethod/sendName/sendPhone/sendAddress
- **前端改动**
- 新增 `src/api/shop/shopOrderDelivery/index.ts``saveShopOrderDelivery(data)` 封装 `POST /shop/shop-order-delivery`
- 补全 `src/api/shop/shopStoreUser/model``ShopStoreUser` 类型缺的 `name`/`phone`/`roleType`/`storeName`/`image`(前端模型此前不完整,后端实体有)
- `src/pages/store/orders/index.tsx`
- `OpType` 增加 `'ship'``OP_LABEL`/`OP_DESC` 补 ship
- `getOrderActions`:已付款 且 `deliveryStatus<20`(或未发货)且 `orderStatus!==1` 时显示「发货」(紫色 `bg-purple-500`)
- 新增状态 `showShipModal`/`clerkList`/`selectedClerkId`/`loadingClerks`/`shipping`
- 新增 `openShipModal(order)`(拉 `listShopStoreUser({storeId: order.storeId})`)与 `handleConfirmShip()`(先 `saveShopOrderDelivery({orderId, deliveryMethod:20, sendName:clerk.name, sendPhone:clerk.phone, sendAddress:order.storeName})`,再 `updateShopOrder({orderId, deliveryStatus:20, deliveryTime})`
- 渲染「选择发货人员」底部弹层(店员列表可点选,确认发货按钮置灰直到选中)
- **设计决策(用户确认)**:① 发货即把订单置「已发货」(deliveryStatus=20);② 发货人可选门店全部店员(经理+店员)
- **物流页**:无需改动,`shopOrderDelivery` 存在即自动渲染发货人
- **验证**tsc 仅剩预存 `@tarojs/taro` 类型缺失环境报错,本文件无新错误
- ⚠️ 行为说明:已付款未发货时「发货」与「确认完成」两个按钮同时显示;店员可跳过发货直接确认完成(该订单仍无发货单,物流页空白,与旧行为一致);如需强制「先发货才能确认完成」,可隐藏未发货订单的「确认完成」按钮(一行判断改动),待用户决定
### 验证
- `npx taro build --type weapp` 构建成功