Files
medical-mall/pages/mall/delivery/doc/index.md
2026-02-02 18:20:22 +08:00

64 lines
3.3 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.
# 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 情况做了保护,适合直接对接真实后端。