Files
frontend-miniapp/docs/QA/user-flow-closure-audit-2026-06-10.md
2026-06-11 16:18:57 +08:00

154 lines
14 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.
# 用户逻辑闭环浏览器测试报告
日期2026-06-10
项目:深圳自然博物馆智能导览应用 - frontend-miniapp
接续会话:`019eab78-f40b-72b1-9751-f8d4c4ff8fba`
测试地址:`http://192.168.0.112:5180/#/`
运行目标H5
测试方式浏览器自动化点击、DOM 状态观察、当前源码佐证
测试范围:导览首页、全局顶部菜单、搜索页、设施详情页、路线详情页、返回/取消/重置/状态保留
## 结论
本次测试确认:导览首页到搜索、搜索结果到设施详情/路线预览、路线页室外预览返回室内预览等主路径已经可以渲染,浏览器或系统返回也能在若干场景中恢复上一页;搜索筛选状态从设施详情返回后仍能保留,是一个正向结果。
但用户逻辑闭环仍未完成。当前问题不是页面打不开,而是用户在进入二级页面后缺少稳定的页面级返回、取消、重置和继续路径;部分关键按钮只 `toast``console.log`,导致任务停在中间态。尤其是搜索页不能重新输入关键词、设施页不能真正选择起点、路线页不能继续到“目标位置确认/导航完成”,这些都属于闭环断点。
需要特别说明:当前产品能力仍应表述为“室内 3D 展示 + POI/位置预览”。源码中的提示也明确指出正式路线数据尚未接入,不能把现有路径宣传为真实室内路线规划或实时导航。
## 当前已验证正向路径
| 路径 | 浏览器验证结果 | 备注 |
| --- | --- | --- |
| 首页导览 -> 点击搜索框 -> 搜索页 | 成功进入 `/pages/search/index` | 搜索页默认关键词为“卫生间”。 |
| 搜索页 -> 结果卡片“查看” -> 路线页 | 最终可渲染路线详情页 | 首次进入时出现过短暂空白,后续编译完成后恢复。 |
| 路线页 -> 查看室外地图 -> 返回预览 | 可切换到 `outdoor-preview`,并通过按钮回到 `preview` | `handleViewOutdoorMap``handleReturnToPreview` 有明确状态切换。 |
| 搜索页 -> 设施卡片 -> 设施详情 -> 浏览器返回 | 可回到搜索页 | 测试中搜索筛选状态保留,例如“无障碍”过滤未丢失。 |
| 首页室内 3D 主 CTA | 已从“开始馆内导航”调整为“选择目标地点”并跳搜索页 | 避免直接进入未完成的路线规划态。 |
## 浏览器验证问题
### P1自定义导航页面缺少页面级返回/取消闭环
用户路径:搜索页 -> 设施详情页 / 路线详情页
观察结果:页面使用自定义导航后,顶部统一展示“导览 / 讲解”切换,但详情和路线页没有清晰的页面级返回、关闭或取消入口;测试中主要依赖浏览器或系统返回恢复。
期望闭环:二级页应在顶部或内容区提供明确的“返回上一页/取消本次选择/回到搜索结果”路径,并保留搜索关键词、筛选、目标对象和预览状态。
影响:用户可以进入详情或路线页,但如果没有浏览器返回习惯,容易认为流程已卡死;在 H5 壳或嵌入式容器里,这个风险更高。
源码证据:
- `src/pages.json:11``src/pages.json:47`:搜索、设施详情、路线详情等页面均配置 `navigationStyle: "custom"`
- `src/components/navigation/GuidePageFrame.vue:3``src/components/navigation/GuidePageFrame.vue:9`:页面框架只注入 `GuideTopTabs` 和内容 slot没有返回/关闭能力。
- `src/components/navigation/GuideTopTabs.vue:3``src/components/navigation/GuideTopTabs.vue:12`:顶部控件只渲染全局 tab。
- `src/utils/guideTopTabs.ts:14``src/utils/guideTopTabs.ts:17`tab 切换使用 `uni.reLaunch` 回首页 tab不是页面返回。
建议:保留全局 `GuideTopTabs`,但在 `GuidePageFrame` 增加可选页面级 back/cancel 插槽或 props。搜索、设施详情、路线详情应显式提供返回上一页路线/起点选择等多步骤页还应提供“取消本次导航/重置目标”。
### P1搜索结果页不能重新输入或重置搜索
用户路径:首页导览 -> 搜索框 -> 搜索页 -> 点击搜索页顶部搜索框
观察结果:点击搜索页顶部搜索框后只保持当前页,未打开输入框、搜索弹层或清空/重搜流程。
期望闭环:用户应能在搜索结果页继续编辑关键词、清空关键词、提交新搜索,并能保留或重置筛选条件。
影响:搜索是导览任务的主要入口。如果用户第一次默认进入“卫生间”结果后想改搜展厅、入口或设施,目前只能绕路返回首页再进,任务链路被打断。
源码证据:
- `src/pages/search/index.vue:94`:默认 `searchKeyword` 为“卫生间”。
- `src/pages/search/index.vue:153``src/pages/search/index.vue:157`:路由参数可覆盖关键词并加载结果。
- `src/pages/search/index.vue:160``src/pages/search/index.vue:162``handleSearchTap``console.log('保持搜索结果页')`
- `src/pages/search/index.vue:168``src/pages/search/index.vue:177`:结果卡片和“查看”可以继续跳详情/路线,但搜索本身没有再输入闭环。
建议:搜索页顶部搜索框应进入真实输入态。最小修复可以是打开一个输入面板,支持确认搜索、清空关键词和取消;更完整的方案是把首页搜索和搜索页搜索抽成同一套搜索组件。
### P1路线页“查看目标位置”没有形成下一步
用户路径:搜索页 -> 结果“查看” -> 路线详情页 -> 点击“查看目标位置”
观察结果按钮只显示“正式路线数据尚未接入可先查看馆内三维位置”的提示没有切换到目标位置高亮、POI 卡片、3D 定位或可恢复状态。
期望闭环:在真实路线数据未接入前,按钮文案和行为应稳定落到“位置预览”:例如高亮目标 POI、展示楼层/区域/说明、提供返回搜索和查看室外参考入口。
影响:用户已经选择目标,但点击后没有获得更多可操作信息,会误以为目标定位失败或导航不可用。
源码证据:
- `src/services/navAssets.ts:3`:路线不可用提示为“正式路线数据尚未接入,可先查看馆内三维位置”。
- `src/pages/route/detail.vue:333``src/pages/route/detail.vue:338``handleShowTargetLocation``uni.showToast`
- `src/pages/route/detail.vue:329``src/pages/route/detail.vue:341`:室外预览有状态切换和返回,但目标位置按钮没有同等状态落点。
- `src/pages/route/detail.vue:84`:室外预览文案说明真实馆内路线需等待 `route_graph/nav_data` 接入。
建议:短期把该动作改为“高亮目标位置/查看位置详情”,并切换到明确的 preview 子状态;中期接入 POI 坐标后,在 3D 视图中定位目标点;正式导航能力上线前,不使用“开始导航/路线规划已完成”等表述。
### P1设施详情“选择起点”没有起点选择流程
用户路径:搜索页 -> 设施详情 -> 点击“选择起点”
观察结果:按钮只显示“请选择当前位置”,没有进入定位、手动选点、取消、确认或重置流程。
期望闭环:起点选择应至少包含“使用当前位置 / 手动选择 / 取消”的状态,并把起点写入路线页参数或共享状态;失败时应说明原因和恢复路径。
影响:用户无法完成“从哪里到目标设施”的前置步骤。即使之后点击查看位置/路线页,也只是目标预览,不是起点到终点的闭环。
源码证据:
- `src/pages/facility/detail.vue:118``src/pages/facility/detail.vue:123``handleChooseStart``uni.showToast`
- `src/pages/facility/detail.vue:125``src/pages/facility/detail.vue:129`:主按钮直接进入路线 `state=preview`,没有携带起点。
- `src/pages/route/detail.vue:348``src/pages/route/detail.vue:352`:路线页手动选择也只是 `toast`
建议:先把“选择起点”改造成受控步骤:进入 `selecting-start` 状态,显示取消、确认和手动位置候选;没有定位能力时明确禁用真实起点选择,并提供“只查看目标位置”。
### P2首次进入路线页可能出现短暂空白应有加载/降级态
用户路径:搜索页 -> 第一个结果“查看” -> 路线详情页
观察结果:浏览器测试中首次进入路线页有过短暂空白,之后页面完成渲染。该现象在开发服务中可能由 Vite 首次编译或异步资源加载造成。
期望闭环:即使在首次加载、资源未就绪或 3D 资源较慢时,也应显示稳定的页面骨架、加载中、失败重试和返回路径。
影响:移动端网络或 WebGL 资源加载慢时,用户可能在白屏阶段退出;如果没有错误恢复,路线页会被认为不可用。
源码证据:
- `src/pages/route/detail.vue:2``src/pages/route/detail.vue:96`:路线页主要内容挂在 `GuidePageFrame` 内,当前浏览器现象需要后续用生产构建验证加载态是否足够。
- `src/components/navigation/GuidePageFrame.vue:35``src/components/navigation/GuidePageFrame.vue:60`:框架是满屏布局,内容未就绪时需要页面自身提供可见占位。
建议:路线页增加首屏 loading skeleton 和错误 fallback对 3D/静态资源加载失败要给“重试 / 返回搜索 / 仅查看文字位置”的降级路径。此项需要用 `pnpm build:h5` 后的 H5 预览再验证一次。
### P2全局顶部 tab 切换会重启首页,可能丢失当前二级流程
用户路径:设施详情或路线页 -> 点击顶部“讲解/导览”
观察结果:顶部 tab 是全局切换,调用 `uni.reLaunch` 进入首页指定 tab。它适合全局入口切换但不保留当前搜索、设施或路线流程。
期望闭环:全局顶部菜单可以保持全局跳转,但二级流程页应同步提供独立返回/取消;如果用户正在多步骤任务中,切走前可考虑确认或保存上下文。
影响:用户误触顶部 tab 后,当前目标、筛选和路线预览上下文可能被抛弃。
源码证据:
- `src/utils/guideTopTabs.ts:12``src/utils/guideTopTabs.ts:17`:所有 tab 切换都 `reLaunch` 到首页。
- `src/components/navigation/GuidePageFrame.vue:3``src/components/navigation/GuidePageFrame.vue:6`:所有使用该框架的页面都会显示顶部 tab。
建议:将顶部 tab 定义为全局主导航;把“返回/取消/继续当前任务”定义为页面导航。二者不要混用。对路线、起点选择、搜索结果这类有上下文的页面,增加页面内保护和恢复。
## 源码侧风险补充
| 风险 | 当前证据 | 处理建议 |
| --- | --- | --- |
| 路线能力仍是预览态 | `src/services/navAssets.ts:3` 保留正式路线未接入提示;`src/pages/route/detail.vue:84` 明确等待 `route_graph/nav_data` | 所有 UI 文案统一为“位置预览/查看位置”,避免“真实导航”承诺。 |
| 搜索默认词会影响用户意图 | `src/pages/search/index.vue:94` 默认“卫生间” | 默认结果可以保留,但必须允许立即编辑、清空和重新搜索。 |
| 起点未写入路线参数 | `src/pages/facility/detail.vue:125``src/pages/facility/detail.vue:129` 只传 `facilityId/target/state` | 增加 start 参数或共享状态,并定义取消/重置。 |
| 顶部菜单不是返回按钮 | `src/utils/guideTopTabs.ts:14``src/utils/guideTopTabs.ts:17` 使用 `reLaunch` | 继续作为全局菜单使用,同时给页面加 back/cancel。 |
## 建议修复顺序
1. P1`GuidePageFrame` 增加页面级返回/取消能力,并在搜索、设施详情、路线详情启用。
2. P1补齐搜索页顶部搜索框的输入、清空、取消、重新提交。
3. P1把设施详情“选择起点”改为明确的起点选择步骤未接定位时使用禁用态或预览态文案。
4. P1把路线页“查看目标位置”落到真实 preview 子状态,不再只是 toast。
5. P2给路线页和 3D/位置预览增加加载、失败、重试、返回搜索的降级 UI。
6. P2为全局顶部 tab 切换和二级流程上下文定义保存或确认策略。
## 回归测试用例
| 用例 | 操作 | 预期 |
| --- | --- | --- |
| 搜索页重搜 | 首页 -> 搜索 -> 点击搜索页搜索框 -> 输入新关键词 -> 确认 | 结果按新关键词刷新,可清空,可取消回原结果。 |
| 搜索筛选保留 | 搜索页选择“无障碍” -> 打开设施详情 -> 返回 | 回到搜索页后筛选和关键词保持。 |
| 设施起点取消 | 设施详情 -> 选择起点 -> 取消 | 返回设施详情,不丢失目标设施。 |
| 设施起点确认 | 设施详情 -> 选择起点 -> 确认 -> 查看位置 | 路线页能读取目标和起点;未接真实路线时明确展示预览态。 |
| 路线目标预览 | 搜索结果“查看” -> 路线页 -> 查看目标位置 | 页面出现目标位置高亮或目标卡片,不只 toast。 |
| 路线室外返回 | 路线页 -> 查看室外地图 -> 返回预览/返回室内 3D | 状态回到室内预览,目标对象不丢失。 |
| 二级页返回 | 搜索 -> 设施详情/路线页 -> 点击页面返回 | 返回上一页,搜索关键词和筛选保留。 |
| 顶部 tab 误触 | 路线页 -> 点击“讲解” -> 再回导览 | 行为符合产品定义;若会丢失路线上下文,应有明确提示或可恢复路径。 |
| 首次加载路线 | 清缓存或首次打开 -> 搜索结果“查看” -> 路线页 | 不出现无反馈白屏;至少显示 loading、失败重试和返回。 |
## 本次测试边界
- 本报告接续旧会话的浏览器自动化结果,没有在当前会话重新启动 H5 服务或重复跑全量点击。
- 本报告只覆盖 H5 用户逻辑闭环,不覆盖 mp-weixin。
- 真实室内路线规划、定位、到达判定不在当前已验证能力内;需等待 `route_graph/nav_data` 接入并完成独立验证。
- 当前文档只新增测试报告,不修改业务实现。