91 lines
5.7 KiB
Markdown
91 lines
5.7 KiB
Markdown
# Orders 模块业务逻辑
|
||
|
||
## 模块职责
|
||
|
||
Orders 模块负责登录后的订单 Tab 与订单相关二级页面。当前已对齐 Android `zhiflyfollow` 订单列表能力:主订单列表(摄影师/非店长)、店长押金式订单 Tab、独立核销管理页,以及押金订单独立入口、历史拍摄、任务上传、尾片入口和 orderType 11/14 订单来源(带客单绑定)闭环。
|
||
|
||
订单 Tab 内不再展示「订单管理 / 核销订单」分段;核销管理通过首页菜单、TabBar 扫码或路由 push 进入独立页面。
|
||
|
||
门店订单详情页与核销订单详情页暂未接入,列表卡片仅展示摘要信息与卡片内操作。
|
||
|
||
当前仍不迁移独立视频播放器增强、尾片审核进度、上传后自动关联订单尾片等后端未体现的能力;多点位核销的定位 + 打卡点 Sheet 若 iOS 尚无完整能力,列表内仅预留扫码入口。
|
||
|
||
## 页面结构
|
||
|
||
| 场景 | 视图 | 说明 |
|
||
|------|------|------|
|
||
| 订单 Tab · 非店长 | `StoreOrderListView` | 对齐 Android `OrderListScreen` |
|
||
| 订单 Tab · 店长 | `StoreAdminOrderListView` | 对齐 Android `DepositOrderListScreen` |
|
||
| 核销管理 | `WriteOffListView` | 对齐 Android `WriteOffListScreen`,独立 push 页 |
|
||
| 押金订单入口 | `DepositOrderEntryView` | 首页 `deposit_order*` 仍保留独立入口 |
|
||
|
||
`OrdersRootView` 按 `AppRoleCode.storeAdmin` 分流店长 Tab 与主订单 Tab。
|
||
|
||
## 核心对象
|
||
|
||
- `StoreOrderListView`:主订单 Tab 根视图,组合 `OrderListHeaderView`、`OrderListCardView` 与 `OrdersViewModel`。
|
||
- `StoreAdminOrderListView`:店长订单 Tab,组合共享头部与店长卡片,使用 `StoreAdminOrderListViewModel`。
|
||
- `WriteOffListView`:核销管理页,使用 `WriteOffListViewModel`,含横向状态 pill、日期筛选与扫码/手动核销。
|
||
- `OrderListHeaderView`:白底状态/日期筛选头部;手机号搜索使用系统 `.searchable`。
|
||
- `OrderListCardView`:主订单卡片,对齐 Android `OrderView` 展示顺序与操作区。
|
||
- `OrderListComponents`:状态 Chip、信息行、操作按钮、精修单选等共享组件。
|
||
- `OrderDialogViews`:退款、赠送修图/视频、店长退款、核销确认弹窗。
|
||
- `OrdersViewModel`:主订单列表分页、筛选、卡片操作(退款/核销/精修/取消/赠送)与订单来源。
|
||
- `StoreAdminOrderListViewModel`:店长订单列表与 `storeOrderList` / `storeOrderRefund`。
|
||
- `WriteOffListViewModel`:核销列表筛选、分页与核销提交。
|
||
- `DepositOrderListViewModel`:押金订单分页、核销、退款(独立押金入口)。
|
||
- `OrderRefundViewModel`:普通订单退款金额校验与提交。
|
||
- `OrdersAPI`:订单列表、核销列表、精修更新、取消、赠送、店长列表/退款等接口。
|
||
- `OrdersEntry`:订单 Tab 内部入口枚举,保留 `verificationOrders` 供测试/推送兼容。
|
||
- `OrdersRoute`:二级路由,含 `writeOffList`、押金详情、历史拍摄、任务上传、尾片入口。
|
||
- `OrderNumberParser`:从扫码内容解析订单号。
|
||
|
||
## 数据流程
|
||
|
||
### 主订单列表
|
||
|
||
从 `AccountContext.currentScenic` 读取景区 ID,从 `PermissionContext.currentAppRole` 读取角色。景区管理员(`scenicAdmin`)使用景区管理员订单接口且卡片只读(隐藏退款/核销/拨号/精修/赠送/取消)。
|
||
|
||
支持状态筛选(含精修筛选项)、手机号搜索、日期范围 Sheet 筛选。筛选变更后从第一页重新加载,滚动到底加载下一页。
|
||
|
||
卡片展示订单号、状态、创建时间、类型、订单来源、操作行、上传任务条(orderType 19)、精修单选、信息行、条件行、退款信息、备注、历史拍摄缩略图与取消订单按钮。操作受 `hideOrderWriteActions` 控制。
|
||
|
||
### 店长订单 Tab
|
||
|
||
从 `AccountContext.currentStore` 读取门店 ID,调用 `GET /api/app/store/order/list`。筛选为全部/已支付/已完成/已退款。卡片展示项目、金额、时间、UID、手机号与退款/部分退款;线下产品订单额外展示核销按钮。仅 `orderType == 19` 可进详情。
|
||
|
||
### 核销管理
|
||
|
||
独立页面,调用 `writeOffList` 并支持 `order_status`、`order_verify_status`、`start_time`、`end_time`、`user_phone` 查询参数。横向 pill:全部/已支付/已完成/已核销/未核销。
|
||
|
||
扫码使用 `OrderCodeScannerView`,命中列表时滚动高亮;核销前弹确认框,成功后刷新第一页。TabBar 全局扫码通过 `pendingOrderScanCode` 交给核销页消费。
|
||
|
||
### 押金订单(独立入口)
|
||
|
||
首页 `deposit_order_detail`、`deposit_order`、`deposit_order_shooting_info` 进入 `DepositOrderEntryView`,与 Tab 内店长列表 UI 分离但共用部分 API。
|
||
|
||
### 订单来源(带客单绑定)
|
||
|
||
仅对 `orderType == 11` 或 `14` 展示,景区管理员只读。绑定接口 `POST .../sale-user/bind-referral-order`;退款成功后若存在带客单则异步更新状态。
|
||
|
||
### 历史拍摄与任务上传
|
||
|
||
历史拍摄:`GET .../photog/order/multi-travel/shoot-history`。任务上传:仅 orderType 19,先拉已核销打卡点再上传素材。
|
||
|
||
## 路由边界
|
||
|
||
| 入口 | 目标 |
|
||
|------|------|
|
||
| `photographer_orders`、`/scenic-order-manage` | 订单 Tab · 主列表或店长列表 |
|
||
| `verification_order` | push `OrdersRoute.writeOffList`(核销管理) |
|
||
| `deposit_order*` | push 押金订单页 |
|
||
| TabBar 扫码 | 核销管理页消费扫码结果 |
|
||
|
||
`AppRouter.routeToOrderVerification` 切换订单 Tab 并 push 核销页,不再设置 `selectedOrdersEntry`。
|
||
|
||
未明确接口的订单能力继续占位,避免入口崩溃。
|
||
|
||
## 设计常量
|
||
|
||
订单列表专用色值与间距定义在 `AppDesign`(页面背景 `#F5F5F5`、输入背景 `#F4F4F4`、状态 Chip 色等与 Android 对齐)。
|