# 游客端手机 H5 路线 PRD · 真实配置优化版

版本：2026-09-08 第二版。范围：在上一版手机 H5 原型上优化看区确认、接入真实配置、增加门票 OCR；保留原有入场、现场查位置、固定起点带路、离场和视图切换流程。

## 1. 本次依据

- 用户本轮提供的 `h5-content (13).json`。原始文件未修改。
- 上轮用户导出的路线导图 `source.png`，以及对“原型基于手机端 H5”的明确要求。
- 配置显示活动为“重庆铜梁龙 vs 上海申花｜9月6日 19:00”。这是导出快照，不是实时活动或管控状态。
- 导出包含 6 个入场组、8 个离场组、77 个数字看区，以及 VIP2、VIP3、包房；4 个入口、152 条策略、37 个路线资产。

当前可编辑数据为 `data.json`，浏览器数据为 `data.js`；抽取脚本为 `import-config.py`，原始图片地址与缓存路径对应见 `asset-sources.json`。原始稳定 ID 和方向全部保留。

## 2. 优化原则

用户不需要在几十个单独看区中逐个寻找，也不需要知道自己属于哪个业务分组。用户只确认票面具体区号，原型负责匹配当前方向的看区组。

两条找看区的路径并列：输入区号、门票本地 OCR。任何一种方式最终都落到同一具体看区，例如 108，而不是仅保存一个范围组。

主流程不做大改：

- 入场：确认票面看区 → 检票口 → 交通方式 → 出发地点 → 指引。
- 现场查位置：确认看区 → 只查位置；无需交通方式或起点。
- 现场带路：确认看区 → G1/G2/VIP 固定起点 → 指引图。
- 离场：带入具体看区 → 重新匹配离场组 → 离场口 → 交通方式 → 目的地。
- 首页移除场馆大图、宣传文案和活动横幅，保留 OCR，并将 3D 看区总览作为与入场、已到体育馆、离场并列的独立菜单项。取消场馆方位总览。
- 2D/3D 均使用第一版场馆示意图，停止展示配置中的旧路线图片；当前步骤与行程选择不清空。

## 3. 真实分组

### 入场

| 环道 | 票面看区 | 推荐入口 | 其他绑定入口 |
| --- | --- | --- | --- |
| 二层 | 101–112、123–127 | G1 | G2 |
| 二层 | 113–122、208–217 | G2 | G1 |
| 二层 | 201–207、218–222 | G1 | G2 |
| 四层 | 301–314、329–332 | G1 | G2 |
| 四层 | 315–324 | G2 | G1 |
| 贵宾 | VIP2层、VIP3层、包房 | VIP | G1、G2 |

### 离场

| 环道 | 票面看区 | 推荐出口 | 其他绑定出口 |
| --- | --- | --- | --- |
| 二层 | 101–103、123–127 | G4 | G1 |
| 二层 | 104–112、204–207 | G1 | G4 |
| 二层 | 113–122、208–217 | G2 | 无 |
| 二层 | 201–203、218–222 | G4 | G1 |
| 四层 | 301–303、329–332 | G4 | G1 |
| 四层 | 304–314 | G1 | G4 |
| 四层 | 315–324 | G2 | 无 |
| 贵宾 | VIP2层、VIP3层、包房 | VIP | G1、G2、G4 |

这些是配置快照中的看区绑定与推荐结果，具体交通路线还要继续验证策略与资产。不能据此承诺任何入口在活动当日一定开放。

325–328 没有出现在配置中，原型不自行补齐。环道楼层按组名解析，不能根据编号百位推断实际楼层；包房楼层以票面和现场为准。

## 4. 看区选择页面

1. 页首新增“识别门票看区”，支持拍摄门票和相册选图。
2. 支持直接搜索区号，例如 108、315、VIP；全角数字会规范化。
3. 隐藏全部、楼层和 VIP 分类标签；输入框下保留范围组卡片。
4. 不展示具体区号按钮网格。输入完整区号（例如 101）后自动精确匹配对应组，显示已匹配状态；仍需点击确认。输入未完成、清空或区号不存在时禁用确认，避免沿用旧选择。VIP 输入 VIP2、VIP3 或包房。
5. 底部展示已选区号、环道和分组匹配状态，明确确认后进入下一步。
6. 查无此区号时展示核对提示，不选最近的数字代替。
7. 从 OCR 结果确认后直接进入下一步，不要求再确认一次同样区号。

## 5. OCR 识别门票

### 输入和识别

使用 Tesseract.js 6.0.1 浏览器识别引擎及本地中文、英文模型，识别真实图片中的文字，不是固定返回演示结果。JPG、PNG、WebP 最大 12 MB；像素超过 2500 万时要求改用局部票面。

拍摄按钮使用移动端相机文件选择能力；相册按钮使用文件选择。相机在具体浏览器中的唤起行为需要真机验证。原型另有一张代码生成的 108 区测试票，点击后也经过同一 OCR 引擎。

### 识别与匹配规则

- 优先识别“看区、区域、区号、看台、Section、Block”附近的区号，或“108区”这样的明确字段。
- VIP2、VIP3、包房按独立标识匹配，不混入数字分组。
- 票价、排号、座位号、长订单/票号、日期不作为看区。
- 无明确字段时只提供已配置的独立三位数字候选，必须用户核对。
- 多个候选不自动选择；未知区号保留识别结果并提示无法匹配，不能自动变成邻近区号。
- 识别置信度偏低时提示特别核对，置信度只是 OCR 文本质量信号，不是门票真实性或权限证明。
- 手动输入修正后也要显式确认。确认只说明用户接受了看区，不验证票据真伪、场次有效性或检票权限。

### 用户确认

结果页展示票面预览、候选区号、对应范围组。用户点击“确认这个看区”后才记录具体区号；普通入场进入入口选择，现场进入查位置/带路选择。

### 失败与取消

提供格式/体积错误、图片解码失败、引擎加载失败、识别超时（90 秒）、无候选、多候选和未知区号状态。支持取消、重新选择图片、重新识别、直接输入区号和返回输入区号。

### 本地数据

原图、全文、票号等不上传、不写入看区记忆或评审备注。图片使用临时 Object URL；离开识别流程时取消 worker 并释放图片。语言模型可能缓存在浏览器 IndexedDB。确认后只保存具体区号、配置范围标识和时间。

识别仅处理用户选择的图片，不会访问相册其他文件。不主动申请位置权限。

## 6. 入场记忆与离场重匹配

保存格式为当前配置范围标识、具体区号、保存时间。本原型用配置内容摘要作为快照范围标识；正式版应使用明确的场馆、活动与配置版本。

例如：108 入场属于“101–112 / 123–127”，离场属于“104–112 / 204–207”。101 入场推荐 G1，离场所在组推荐 G4。不能保存入场组 ID 后直接拿它查离场策略。

如果范围标识失效、区号不存在或对应方向无唯一组，则回到选择页面。修改区号会清除入口、交通方式、地点等依赖项；手选现场起点保留后必须重新检验看区绑定。

## 7. 真实路线与图片

- 四个入口为 G1、G2、G4、VIP。G4 按离场配置展示，现场入场固定起点仍限定 G1/G2/VIP。
- 轨道点为龙兴站、高石塔站；自驾点为体育小镇停车场、龙源路临时停车点、渝江大道临时停车点。
- 免费大巴仅在存在离场策略的组合中展示，配置说明为五里店站和嘉州站方向。不创建导出中没有的入场大巴或网约车点。
- 选择列表按方向、看区组、入口、交通、地点查策略，再用 assetId 查对应资产；排除键与管控状态生效。
- 场外距离和时长来自导出。比如龙兴站 → G1 为 214m / 3分钟，这只能描述场外接驳段，不是到具体看区的全程距离。
- 2D、3D 使用第一版 SVG 示意图。3D 支持旋转；路线关系仅用于原型交互演示，几何位置不是实际坐标。
- 部分四层组仍可查看实景楼梯照片。已缓存的 58 张配置图片保留为参考资源，旧路线图片不再用于地图展示。已发布至独立测试站点 https://prd.test.twinverseguide.com/ 。

## 8. 新旧能力边界

本轮仍是 PRD 原型，已独立发布到测试站点 https://prd.test.twinverseguide.com/ ，没有修改 V1、V2、Next 正式运行代码，也没有发布生产环境。

实际配置没有可逐步执行的场内转弯节点、完整楼梯电梯图和障碍点。因此场内段展示交互示意图及现场导视说明，不沿用第一版的虚构台阶、电梯、480 米或施工围挡样例。

3D 保留可旋转的结构示意与业务上下文；没有真实模型、坐标映射、连续定位、自动寻路或座位级导航。不能把示意中的几何位置当作实际看区位置。

## 9. 验收用例

| 编号 | 操作 | 预期 |
| --- | --- | --- |
| C01 | 输入 108 | 只命中入场“101–112 / 123–127”组，可确认具体 108 |
| C02 | 输入 315 | 自动匹配四层 315–324 组，可确认具体 315 |
| C03 | 输入 325 | 无匹配，不自动映射 324/329 |
| C04 | 108 确认后选入口 | G1 推荐，G2 也可用，VIP 不可用 |
| C05 | 108 入场后进入离场 | 保留 108，重新匹配“104–112 / 204–207” |
| C06 | 101 离场 | 推荐 G4，可用绑定按离场配置处理 |
| C07 | 入场选择交通 | 不展示无入场路线的免费大巴 |
| C08 | 离场可用组合 | 显示配置中的免费大巴站点和方向说明 |
| C09 | G2 自驾选择地点 | 不展示被排除的体育小镇停车场组合 |
| C10 | 识别 108 测试票 | 不把 08 排、16 座、180 元作为看区，确认后进入下一步 |
| C11 | OCR 文本同时含 108 区和 113 区 | 多候选，不直接确认 |
| C12 | OCR 识别为 325 区 | 无匹配提示，允许手动修正 |
| C13 | 识别后取消或返回 | 不保存原图/全文，停止识别任务 |
| C14 | 管控/资源异常 | 明确提示；不生成不存在的行走指令 |
| C15 | 切换 2D/3D、当前步骤/路段 | 行程与步骤保留；3D 明确为示意 |
| C16 | 首页进入 3D 看区总览菜单并切换地图 | 使用第一版 SVG 示意图，不加载旧路线图片；3D 可旋转 |

## 10. 使用和交付

测试体验地址：https://prd.test.twinverseguide.com/ 。本机预览地址：http://127.0.0.1:4398/ 。

交付包解压后运行“启动预览.ps1”，然后打开脚本显示的本地地址。HTML 内嵌页面代码，但实际图片和 OCR 模型仍依赖同目录的 `assets/`、`vendor/`，不要只转发一个 HTML 文件。双击 HTML 可以查看一般流程；浏览器 OCR 需要 HTTP 环境。

主要文件：`index.html`、`app.js`、`model.js`、`data.json`、`data.js`、`styles.css`、`refinements.css`、`build.cjs`。`real-data.test.cjs` 是本轮定向测试。OCR 来源与许可见 `THIRD_PARTY.md`。

本轮证据与未验证边界见 `verification.md`。测试票通过不能代替真实门票样本、微信、手机摄像头或业务验收。
