Files
medical-mall/pages/mall/delivery/STATE_1-5_LOGIC.md
not-like-juvenile 09c33be394 订单匹配机制
2026-02-03 17:22:55 +08:00

5.0 KiB
Raw Blame History

状态 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 = 2supa.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-acceptedindex.uvue#L560
    • order-history.uvue 相应映射order-history.uvue#L243
  • 查询/展示
    • 当前任务区显示“开始取货”按钮index.uvue#L82
    • order-detail.uvueorder.status === 2 显示“前往取货/正在取货”order-detail.uvue#L169-L170
  • 更新/操作
    • startPickup() 会将 task 状态更新为 3index.uvue startPickup
    • 接单后代码尝试同步 ml_orders.order_status = 2index.uvue#L766
  • 建议/注意
    • 同步 ml_orders 的操作应做失败回退处理或在服务端做原子事务。

状态 3 — 取货中

  • 映射文本/样式
    • index.uvue 文本 '取货中'index.uvue#L573样式 task-pickingindex.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 = 4index.uvue & order-detail
  • 建议/注意
    • 确认取货应当原子更新任务与订单状态,或由后端封装接口完成。

状态 4 — 已取货

  • 映射文本/样式
    • index.uvue 文本 '已取货'index.uvue#L574样式 task-pickedindex.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-deliveringindex.uvue#L563
    • order-history.uvue 在样式处标为 status-deliveredorder-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 = 5index.uvue#L679-691
  • 建议/注意
    • 目前统计(如 todayStatsstatus >= 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 并提交。

请选择一项继续。