修改页面逻辑
This commit is contained in:
@@ -22,30 +22,26 @@
|
||||
- 解析 `options.id` 与 `options.status`,调用 `loadOrderDetail(id)`。
|
||||
|
||||
- `loadOrderDetail(id)`
|
||||
- 判断 ID 类型(UUID / 数字 / 非数字)以决定查询字段(`id`、`cid`、`order_no`)。
|
||||
- 并行查询 `ml_orders`, `ml_order_items`, `ml_shops`, `ml_delivery_tasks` 并合并到页面状态。
|
||||
- **加载保护**:对 `supaReady` 采用 1.5s 超时策略包装,防止会话刷新阻塞页面加载。
|
||||
- **智能 ID 回查**:优先从 `ml_orders` (UUID/cid/order_no) 查找。若未找到,则尝试从未分配任务表 `ml_delivery_tasks` 中根据 ID 查找,再反查关联订单。
|
||||
- **降级机制(Fallback)**:当 `ml_orders` 行缺失时,自动回退到从 `ml_delivery_tasks` 提取地址、手机号、配送费及距离等基础信息进行展示,并在 UI 上显示回退加载提示。
|
||||
- **清理加载状态**:在 `finally` 块中统一切除加载动画 (`uni.hideLoading`),防止界面挂起。
|
||||
|
||||
- `acceptOrder()` / `rejectOrder(reason)`
|
||||
- accept: 尝试对 `ml_delivery_tasks` 执行 `update driver_id` 操作并设置 `status=2`(处理中),需要后端并发保护。
|
||||
- reject: 增加拒单原因到 `ml_delivery_tasks` 或 `order_notes` 并回滚本地 UI 状态。
|
||||
## 交互与样式优化(2026-02-03 更新)
|
||||
- **联系人信息解析**:地址栏(取货/送货)现在仅在“联系人姓名”存在时显示分隔点 `·`。若无姓名,则仅显示手机号,避免显示为 `. 手机号`。
|
||||
- **联系方式布局优化**:为了防止手机号在不同屏幕宽度下被图标遮挡,联系人区域采用**垂直居中布局**(图标在上,姓名电话在下),显著拉高了边框高度 (`min-height: 180rpx`) 并增加了垂直间距。
|
||||
- **文本显示优化**:
|
||||
- 商品区域的“**订单号**”增加了加粗显示 (`bold`),提升核对便利性。
|
||||
- 展示给配送员的联系手机号调大了字号并加粗,确保清晰可见。
|
||||
- 修复了在 Uni-app x 下由于类型推断导致的手机号无法通过点语法访问的问题(改用索引访问)。
|
||||
|
||||
- `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()
|
||||
## 示例:地址兼容解析逻辑
|
||||
```typescript
|
||||
// 兼容 JSON 字符串及对象格式的地址字段
|
||||
let shipping = {}
|
||||
if (typeof raw == 'string') {
|
||||
try { shipping = JSON.parse(raw) } catch (e) { shipping = { detail: raw } }
|
||||
} else { shipping = raw || {} }
|
||||
// 访问方式:(address as UTSJSONObject)['phone']
|
||||
```
|
||||
|
||||
## 事务与并发注意
|
||||
- 接单场景应使用后端原子性检查(数据库事务或行级乐观锁)以避免多司机同时接单。
|
||||
- 前端接单流程:先尝试 update(带 where driver_id IS NULL),若返回 0 row affected 则提示已被接单。
|
||||
|
||||
## 错误处理与回退
|
||||
- 捕获所有 supa 调用错误并将友好错误展示给用户(例如:'网络错误,请稍后重试')。
|
||||
- 对可能缺失的字段(地址为字符串或对象)使用 `_transformAddress()` 做兼容处理。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user