64 lines
3.3 KiB
Markdown
64 lines
3.3 KiB
Markdown
# index.uvue — 配送端首页
|
||
|
||
## 概要
|
||
配送员主界面,包含司机信息、在线/离线切换、今日统计、当前配送任务、附近可接订单与快捷入口。
|
||
|
||
## 数据结构
|
||
- DeliveryDriverType (来自 `ml_delivery_drivers`)
|
||
- id, user_id, real_name, avatar_url, work_status, vehicle_type, vehicle_number, rating, service_areas, ...
|
||
|
||
- CurrentTaskType / AvailableOrderType
|
||
- id, order_no, status, pickup_address, delivery_address, pickup_contact, delivery_contact, delivery_fee, distance, estimated_time, created_at
|
||
|
||
## 关键方法
|
||
- `onLoad()`
|
||
- 调用 `getCurrentUser()` 确保用户上下文可用
|
||
- 执行:`loadDriverInfo()`, `loadTodayStats()`, `loadCurrentTask()`, `loadAvailableOrders()`
|
||
|
||
- `loadDriverInfo()`
|
||
- 从 `ml_delivery_drivers` 表按 `user_id` 查询并更新 `driverInfo`。
|
||
|
||
- `loadTodayStats()`
|
||
- 查询 `ml_delivery_tasks` 在当天范围内的记录,计算完成订单数、总收入、配送里程等。
|
||
|
||
- `loadCurrentTask()`
|
||
- 查询 `ml_delivery_tasks` 中 driver_id 的未完成任务(status < 5),并取最新一条作为当前任务。
|
||
|
||
- `loadAvailableOrders()`
|
||
- 若 `isOnline` 且无 `currentTask`,从 `ml_delivery_tasks` 查询 `driver_id IS NULL` 且 status=1 的订单列表(可按地理位置筛选)。
|
||
|
||
- `_transformTask(task)`
|
||
- 兼容处理 `pickup_address` / `delivery_address` 与 `pickup_contact` 的多种格式(对象或 JSON 字符串),输出页面期望结构。
|
||
|
||
## 关键 DB 查询 示例
|
||
```
|
||
await supa.from('ml_delivery_drivers').select('*').eq('user_id', userId).limit(1).execute()
|
||
|
||
await supa.from('ml_delivery_tasks')
|
||
.select('id,delivery_fee,distance,created_at,status')
|
||
.eq('driver_id', driverId)
|
||
.gte('created_at', start)
|
||
.lte('created_at', end)
|
||
.execute()
|
||
```
|
||
|
||
## 交互与状态流
|
||
- `toggleWorkStatus()`:切换 `isOnline` 并调用 `startWork()` / `stopWork()`。上线时会刷新可接订单列表。
|
||
- 接单/开始取货/确认取货/开始配送/确认送达等均通过对 `ml_delivery_tasks` 的 `update` 操作变更 `status`,并在成功后更新本地 `currentTask`。
|
||
|
||
## 注意事项
|
||
- 高并发接单场景需后端保证原子性(乐观锁或 DB 事务)以防止竞单冲突。
|
||
- `loadAvailableOrders()` 最好按司机服务区域与距离筛选,并使用分页/实时推送代替频繁轮询。
|
||
- 日志(console.log)语句便于调试,但生产环境建议使用集中化日志系统。
|
||
# index.uvue — 配送端首页
|
||
|
||
页面目的:配送员主界面,展示司机资料、工作状态、今日统计、当前任务与可接订单。
|
||
|
||
关键点:
|
||
- 数据加载:`onLoad()` 调用 `getCurrentUser()` 后依次调用 `loadDriverInfo()`, `loadTodayStats()`, `loadCurrentTask()`, `loadAvailableOrders()`。
|
||
- Supabase 交互:通过 `supa.from(...).select(...).eq(...).execute()` 查询 `ml_delivery_drivers`、`ml_delivery_tasks` 等表。
|
||
- 兼容解析:`_transformTask(task)` 将 DB 返回的地址/contact 字段兼容解析为页面所需结构(处理字符串或对象)。
|
||
- 操作:接单/开始取货/确认取货/开始配送/确认送达等,会调用 supa 更新 `ml_delivery_tasks` 状态并同步页面状态。
|
||
|
||
注意:对 supa 操作有大量 try/catch,页面对无用户 ID 情况做了保护,适合直接对接真实后端。
|