连接数据库并修改页面

This commit is contained in:
not-like-juvenile
2026-02-02 18:20:22 +08:00
parent 5f856a96c9
commit 8efe6d5e89
22 changed files with 1630 additions and 992 deletions

View File

@@ -0,0 +1,51 @@
# order-detail.uvue — 订单详情
## 概要
展示单笔订单全部信息并提供状态流转(接单、确认取货、确认送达、拒单等)。页面会联合查询 `ml_orders``ml_order_items``ml_shops``ml_delivery_tasks`
## 数据结构(常用字段)
- `Order`
- `id: string | number`
- `order_no: string`
- `cid?: number` (兼容旧字段)
- `shipping_address | pickup_address`: object/string
- `shipping_fee`, `total_amount`, `status`
- `OrderItem`
- `id`, `order_id`, `product_name`, `qty`, `price`
- `DeliveryTask`
- `id`, `order_id`, `driver_id`, `status`, `accepted_at`, `picked_at`, `delivered_at`
## 关键方法
- `onLoad(options)`
- 解析 `options.id``options.status`,调用 `loadOrderDetail(id)`
- `loadOrderDetail(id)`
- 判断 ID 类型UUID / 数字 / 非数字)以决定查询字段(`id``cid``order_no`)。
- 并行查询 `ml_orders`, `ml_order_items`, `ml_shops`, `ml_delivery_tasks` 并合并到页面状态。
- `acceptOrder()` / `rejectOrder(reason)`
- accept: 尝试对 `ml_delivery_tasks` 执行 `update driver_id` 操作并设置 `status=2`(处理中),需要后端并发保护。
- reject: 增加拒单原因到 `ml_delivery_tasks``order_notes` 并回滚本地 UI 状态。
- `confirmPickup()` / `confirmDelivery()`
- 根据 `task.id` 更新相应时间戳字段(`picked_at`/`delivered_at`)并设置状态(例如 `status=3/4`)。
## 示例:按 id 类型查询(伪代码)
```
let q = supa.from('ml_orders').select('*')
if (isUUID(id)) q = q.eq('id', id)
else if (isNumeric(id)) q = q.eq('cid', id)
else q = q.eq('order_no', id)
const { data: order } = await q.limit(1).execute()
```
## 事务与并发注意
- 接单场景应使用后端原子性检查(数据库事务或行级乐观锁)以避免多司机同时接单。
- 前端接单流程:先尝试 update带 where driver_id IS NULL若返回 0 row affected 则提示已被接单。
## 错误处理与回退
- 捕获所有 supa 调用错误并将友好错误展示给用户(例如:'网络错误,请稍后重试')。
- 对可能缺失的字段(地址为字符串或对象)使用 `_transformAddress()` 做兼容处理。