5.0 KiB
5.0 KiB
状态 1–5 行为与代码位置说明
本文档针对 ml_delivery_tasks.status 中 1–5 的状态,逐项列出在 delivery 页面中涉及的展示、查询、更新位置、按钮/动作与已发现的不一致点与建议。
状态 1 — 待接取
- 映射文本/样式
index.uvue:getTaskStatusClass->task-pending(见 index.uvue getTaskStatusClass)index.uvue:getTaskStatusTextcase 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 / acceptOrder,index.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 状态更新为 3(index.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 -> 5(index.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 为配送中)。
- 目前统计(如 todayStats)将
跨页不一致与改进建议(摘要)
- 不一致点:
status = 5在不同页面既被视作“配送中”,又被视作“已完成”;confirmDelivery设置 task=6,但统计使用>=5判断完成,导致计数或展示差异。 - 建议:
- 明确“完成”阈值(推荐:status === 6 为已完成,status === 5 为配送中),并在所有统计、过滤、UI 映射处统一实现。
- 将状态映射抽到共享工具文件
utils/deliveryStatus.uts并替换硬编码。 - 接单、确认取货、确认送达等关键操作应使用后端事务或条件更新避免竞态与不一致。
文档已生成于 pages/mall/delivery/STATE_1-5_LOGIC.md。要我现在:
- A) 将
getTaskStatusText/getOrderStatusText抽到utils/deliveryStatus.uts并替换页面中的映射,或 - B) 实现接单的条件更新补丁(修改
acceptTask/acceptOrder),或 - C) 仅把“5 是否计作完成”的规范改写回
DELIVERY_LOGIC.md并提交。
请选择一项继续。