# 状态 1–5 行为与代码位置说明

本文档针对 `ml_delivery_tasks.status` 中 1–5 的状态，逐项列出在 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 / 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 为配送中）。

## 跨页不一致与改进建议（摘要）
- 不一致点：`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` 并提交。

请选择一项继续。