Files
medical-mall/pages/mall/delivery/doc/STATE_1-5_LOGIC.md
not-like-juvenile 768140fda3 合并后修改文件
2026-02-03 20:12:36 +08:00

81 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 状态 15 行为与代码位置说明
本文档针对 `ml_delivery_tasks.status` 中 15 的状态,逐项列出在 delivery 页面中涉及的展示、查询、更新位置、按钮/动作与已发现的不一致点与建议。
## 状态 1 — 待接取
- 映射文本/样式
- `index.uvue`: `getTaskStatusClass` -> `task-pending`(见 index.uvue getTaskStatusClass
- `index.uvue`: `getTaskStatusText` case 1 -> '待接取'index.uvue#L571
- `order-history.uvue`: 同样映射order-history.uvue#L230, #L242
- 查询/展示
- `loadAvailableOrders` 查询:`supa.from('ml_delivery_tasks').is('driver_id','null').eq('status', 1)`index.uvue loadAvailableOrders
- 在可接订单列表与当前任务区显示“接受任务/接受订单”按钮index.uvue#L81、order card accept button
- 更新/操作
- 接单时更新为 `status = 2``supa.from('ml_delivery_tasks').update({ driver_id: driverId, status: 2 }).eq('id', ...)`index.uvue acceptTask / acceptOrderindex.uvue#L602,#L756
- 建议/注意
- 接单使用条件更新或后端 RPC 避免抢单竞态(目前无 WHERE driver_id IS NULL 条件)。
## 状态 2 — 已接取
- 映射文本/样式
- `index.uvue` 文本 '已接取'index.uvue#L572),样式 `task-accepted`index.uvue#L560
- `order-history.uvue` 相应映射order-history.uvue#L243
- 查询/展示
- 当前任务区显示“开始取货”按钮index.uvue#L82
- `order-detail.uvue``order.status === 2` 显示“前往取货/正在取货”order-detail.uvue#L169-L170
- 更新/操作
- `startPickup()` 会将 task 状态更新为 3index.uvue startPickup
- 接单后代码尝试同步 `ml_orders.order_status = 2`index.uvue#L766
- 建议/注意
- 同步 ml_orders 的操作应做失败回退处理或在服务端做原子事务。
## 状态 3 — 取货中
- 映射文本/样式
- `index.uvue` 文本 '取货中'index.uvue#L573),样式 `task-picking`index.uvue#L561
- `order-history.uvue` 同步映射order-history.uvue#L244
- 查询/展示
- 当前任务区显示“确认取货”按钮index.uvue#L83
- `order-detail.uvue` 在 route 区显示“确认取货”按钮order-detail.uvue#L55,#L173
- 更新/操作
- `confirmPickup()` 将 status -> 4 并写入 `pickup_time`,同时尝试把 `ml_orders.order_status = 4`index.uvue & order-detail
- 建议/注意
- 确认取货应当原子更新任务与订单状态,或由后端封装接口完成。
## 状态 4 — 已取货
- 映射文本/样式
- `index.uvue` 文本 '已取货'index.uvue#L574),样式 `task-picked`index.uvue#L562
- `order-history.uvue` 文本 '已取货'order-history.uvue#L245
- 查询/展示
- 当前任务区显示“开始配送”按钮index.uvue#L84
- `order-detail.uvue` 显示“确认送达”按钮order-detail.uvue#L68,#L176
- 更新/操作
- `startDelivery()` 将 status -> 5index.uvue startDelivery
- 建议/注意
- 明确 4 与 5 的边界并在统计/历史中统一口径(是否将 5 视作已完成)。
## 状态 5 — 配送中
- 映射文本/样式
- `index.uvue` 文本 '配送中'index.uvue#L575),样式 `task-delivering`index.uvue#L563
- `order-history.uvue` 在样式处标为 `status-delivered`order-history.uvue#L234)且文本处 `case 5: return '已完成'`order-history.uvue#L246)——存在不一致。
- 查询/展示
- 当前任务区显示“确认送达”入口index.uvue#L85 -> showConfirmDeliveryDialog
- `order-detail.uvue` 在状态 >=5 时进度条显示为已送达getStatusDesc
- 更新/操作
- `confirmDelivery()` 将 task.status -> 6 并写入 `delivered_time`,再尝试同步 `ml_orders.order_status = 5`index.uvue#L679-691
- 建议/注意
- 目前统计(如 todayStats`status >= 5` 视作“已完成”计数,而 UI 有时把 5 显示为“配送中”,建议统一规则(推荐:把 6 视作真正完成5 为配送中)。
## 跨页不一致与改进建议(摘要)
- 不一致点:`status = 5` 在不同页面既被视作“配送中”,又被视作“已完成”;`confirmDelivery` 设置 task=6但统计使用 `>=5` 判断完成,导致计数或展示差异。
- 建议:
1. 明确“完成”阈值推荐status === 6 为已完成status === 5 为配送中并在所有统计、过滤、UI 映射处统一实现。
2. 将状态映射抽到共享工具文件 `utils/deliveryStatus.uts` 并替换硬编码。
3. 接单、确认取货、确认送达等关键操作应使用后端事务或条件更新避免竞态与不一致。
---
文档已生成于 `pages/mall/delivery/STATE_1-5_LOGIC.md`。要我现在:
- A) 将 `getTaskStatusText` / `getOrderStatusText` 抽到 `utils/deliveryStatus.uts` 并替换页面中的映射,或
- B) 实现接单的条件更新补丁(修改 `acceptTask` / `acceptOrder`),或
- C) 仅把“5 是否计作完成”的规范改写回 `DELIVERY_LOGIC.md` 并提交。
请选择一项继续。