# 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)` - **加载保护**:对 `supaReady` 采用 1.5s 超时策略包装,防止会话刷新阻塞页面加载。 - **智能 ID 回查**:优先从 `ml_orders` (UUID/cid/order_no) 查找。若未找到,则尝试从未分配任务表 `ml_delivery_tasks` 中根据 ID 查找,再反查关联订单。 - **降级机制(Fallback)**:当 `ml_orders` 行缺失时,自动回退到从 `ml_delivery_tasks` 提取地址、手机号、配送费及距离等基础信息进行展示,并在 UI 上显示回退加载提示。 - **清理加载状态**:在 `finally` 块中统一切除加载动画 (`uni.hideLoading`),防止界面挂起。 ## 交互与样式优化(2026-02-03 更新) - **联系人信息解析**:地址栏(取货/送货)现在仅在“联系人姓名”存在时显示分隔点 `·`。若无姓名,则仅显示手机号,避免显示为 `. 手机号`。 - **联系方式布局优化**:为了防止手机号在不同屏幕宽度下被图标遮挡,联系人区域采用**垂直居中布局**(图标在上,姓名电话在下),显著拉高了边框高度 (`min-height: 180rpx`) 并增加了垂直间距。 - **文本显示优化**: - 商品区域的“**订单号**”增加了加粗显示 (`bold`),提升核对便利性。 - 展示给配送员的联系手机号调大了字号并加粗,确保清晰可见。 - 修复了在 Uni-app x 下由于类型推断导致的手机号无法通过点语法访问的问题(改用索引访问)。 ## 示例:地址兼容解析逻辑 ```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'] ```