Files
suixinkan_ios_new/suixinkan/Features/Orders/Orders.md

91 lines
5.7 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.

# 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 对齐)。