Files
suixinkan_ios_new/suixinkan/Features/ScenicPromotion/ScenicPromotion.md
汉秋 1b1e93b9ca 新增宣传页 Mock 模块并接入首页路由。
从 xh_test 同步 ScenicPromotion 演示页,补齐 MVVM 结构、本地资源、单元测试与模块文档,注册 promotion_page 首页入口。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 15:29:25 +08:00

80 lines
3.3 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.

# ScenicPromotion 模块业务逻辑
## 模块职责
ScenicPromotion 模块负责首页 `promotion_page` 入口,为摄影师和景区运营提供景区宣传与排队导览 Demo 页面。
当前阶段使用 Mock 数据完成业务闭环,不接入真实后端接口、真实视频地址或真实二维码。
## 页面流程
```mermaid
flowchart TD
Home[宣传页主页面] -->|QR 三连击 + 密码 1| Settings[宣传页设置]
Home -->|缩略图点击| Hero[底部主视觉联动]
Settings --> Preview[素材预览]
Settings -->|Mock 上传/删除| Settings
Settings -->|提交| Submit[Mock 提交结果]
```
## 核心实体
| 类型 | 说明 |
| --- | --- |
| `ScenicPromotionBoard` | 宣传页看板:景区名、副标题、打卡点列表 |
| `ScenicPromotionSpot` | 单个打卡点:排队信息 + 视频/照片素材 |
| `ScenicPromotionQueueInfo` | 排队人数、等待时间、叫号信息 |
| `ScenicPromotionMedia` | 横向素材与主视觉共用数据 |
| `ScenicPromotionQueuePoint` | 设置页排队打卡点(多选绑定) |
| `ScenicPromotionMaterialPoint` | 设置页素材所属打卡点(单选,与排队点独立) |
| `ScenicPromotionManagedMaterial` | 设置页已上传 Mock 素材 |
## 数据来源
- 全部 Mock 数据由 `ScenicPromotionMockStore` 提供种子数据。
- `ScenicPromotionViewModel` 驱动主页面状态与素材选中。
- `ScenicPromotionSettingsViewModel` 独立管理设置页排队绑定与素材上传。
## 主页面规则
1. 打卡点由接口返回列表动态展示Mock 含网红桥、汉地拔冲、空中草原、河谷花海、雪山栈道。
2. 5 个以内等分展示,超过 5 个时一屏露出 5 个并横向滚动。
3. 缩略图点击只联动底部主视觉,不跳转二级页。
4. 视频主视觉点击仅展示模拟播放提示。
5. 二维码快速点击 3 次1.1 秒内)→ 密码弹窗 → 输入 `1` 进入设置页。
6. 长按二维码可切换演示状态(正常 / 无媒体 / 无排队 / 加载 / 异常 / 空数据)。
## 设置页规则
1. 排队打卡点支持多选绑定;提交前至少选一个。
2. 素材所属打卡点与排队打卡点是两套独立数据。
3. 视频/图片上传前必须先选择素材所属打卡点。
4. 上传、删除、提交均为 Mock 本地状态变更。
## 路由
- 权限 URI`promotion_page`
- 首页路由:`HomeRoute.scenicPromotion`
- 入口依赖权限下发或用户手动添加到常用应用(`HomeCommonMenuStore.androidHomeMenuURIs` 白名单已包含该 URI
## 与相邻模块的边界
| 模块 | URI | 用途 | 后端 |
| --- | --- | --- | --- |
| ScenicPromotion | `promotion_page` | 景区宣传与排队导览 Demo | Mock |
| QueueManagement | `queue_management` | 真实排队叫号管理 | 真实 API |
| Assets | `asset_management` | 素材库管理 | 真实 API |
## 测试要求
- `ScenicPromotionTests`:主页面与设置页 ViewModel 成功路径、场景切换、上传校验。
- `HomeMenuRouterTests``promotion_page` 路由映射。
## 主要文件
- `Models/ScenicPromotionModels.swift` — 状态枚举与数据实体
- `Services/ScenicPromotionMockStore.swift` — Mock 种子数据
- `ViewModels/ScenicPromotionViewModels.swift` — 主页面与设置页 ViewModel
- `Views/ScenicPromotionViews.swift` — 主页面
- `Views/ScenicPromotionSettingsViews.swift` — 设置页与素材预览