This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
审计日期:2026-05-28
|
||||
审计分支:`analysis/ux-ui-audit-2026-05-28`
|
||||
审计对象:`museum-guide-v4.0/frontend-miniapp`
|
||||
审计范围:Mock 数据、类型定义、数据加载、搜索/地图/详情页硬编码数据、静态资源、3D/室内 POI 数据、数据治理与性能策略。
|
||||
审计范围:Mock 数据、类型定义、数据加载、搜索/地图/详情页硬编码数据、静态资源、3D/馆内 POI 数据、数据治理与性能策略。
|
||||
|
||||
## 执行摘要
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
| 方法 | 覆盖内容 | 证据来源 |
|
||||
| --- | --- | --- |
|
||||
| JSON 结构扫描 | 展品、展厅、设施、路线、楼层、室内 POI 数量与字段 | `src/assets/data/*.json`、`static/data/f1-indoor-pois.json` |
|
||||
| JSON 结构扫描 | 展品、展厅、设施、路线、楼层、馆内 POI 数量与字段 | `src/assets/data/*.json`、`static/data/f1-indoor-pois.json` |
|
||||
| 引用完整性校验 | 展品到展厅、楼层到展厅/设施、路线到站点 | Node 脚本读取 JSON 后交叉比对 |
|
||||
| 静态资源存在性校验 | 图片、音频、展厅图是否存在于 `static/` | 文件系统校验 |
|
||||
| 硬编码扫描 | 页面、组件、地图、搜索中的本地数组和占位 URL | `rg` 搜索 |
|
||||
@@ -40,7 +40,7 @@
|
||||
| `src/assets/data/facilities.json` | 8 | 基础设施/模型坐标混合数据 | 点位坐标来自 `f1-floor.glb` 提取,应保留;但实体名称、类型、描述仍与真实 1F POI 和自然博物馆语义不一致 |
|
||||
| `src/assets/data/routes.json` | 3 | 艺术馆路线 Mock | 路线名称、站点均围绕艺术作品;不适配自然博物馆参观动线 |
|
||||
| `src/assets/data/floors.json` | 4 | 楼层索引 | `B1` 引用不存在设施,且无展厅 |
|
||||
| `static/data/f1-indoor-pois.json` | 67 | 真实 1F 室内点位基准 | 其它设施、展厅、搜索、地图详情数据未以它为准,存在大面积冲突 |
|
||||
| `static/data/f1-indoor-pois.json` | 67 | 真实 1F 馆内点位基准 | 其它设施、展厅、搜索、地图详情数据未以它为准,存在大面积冲突 |
|
||||
| `static/models/*.glb` | 2 | 真实 1F 3D 模型资产 | `f1-indoor.glb`、`f1-floor.glb` 均为自然博物馆 1F 真实模型;需补模型清单、坐标系与部署目录策略 |
|
||||
| `static/icons/*.svg` | 8 | 地图图标 | 可用,但 POI 类型枚举与图标映射未统一 |
|
||||
|
||||
@@ -53,7 +53,7 @@ flowchart TD
|
||||
D["pages/detail.vue<br/>硬编码详情"] --> E["详情页展示"]
|
||||
F["SearchPanel / ExplainList<br/>自然博物馆硬编码 Mock"] --> G["搜索/讲解抽屉"]
|
||||
H["TencentMap / ThreeMap<br/>硬编码地图点"] --> I["地图弹层"]
|
||||
J["static/data/f1-indoor-pois.json<br/>67 个室内 POI"] -.未统一接入.-> I
|
||||
J["static/data/f1-indoor-pois.json<br/>67 个馆内 POI"] -.未统一接入.-> I
|
||||
```
|
||||
|
||||
## 1. 数据完整性审计
|
||||
@@ -64,7 +64,7 @@ flowchart TD
|
||||
| --- | --- | --- | --- |
|
||||
| 展品 | 5 个艺术作品 | 缺少标本、化石、矿物、动植物、年代、分类、馆藏编号、展陈状态、讲解文本层级 | P0 |
|
||||
| 展厅 | 5 个艺术主题展厅 | 缺少自然史展厅分区、楼层分布、入口/出口、展厅开放状态、人流/容量 | P0 |
|
||||
| 设施 | 8 个基础设施 | 室内 POI 有 58 个设施,但未与设施表合并;缺少服务台、母婴室、寄存、无障碍、楼梯等正式类型 | P1 |
|
||||
| 设施 | 8 个基础设施 | 馆内 POI 有 58 个设施,但未与设施表合并;缺少服务台、母婴室、寄存、无障碍、楼梯等正式类型 | P1 |
|
||||
| 路线 | 3 条艺术馆路线 | 缺少亲子、研学、无障碍、快速参观、自然史主题路线 | P0 |
|
||||
| 楼层 | 4 层索引 | 只有简单数组引用,无真实地图区域、楼层坐标系、模型版本、开放状态 | P1 |
|
||||
| POI | F1 有 67 个模型点 | 只覆盖 `1F`,未绑定展品/展厅/路线/设施详情 | P1 |
|
||||
@@ -202,7 +202,7 @@ POI floors: 1F
|
||||
|
||||
| 类型 | 当前定义 | 发现的问题 | 严重性 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Position` | `{ x, y }` | 2D 坐标,不支持室内 POI 的 `{ x, y, z }`,也不支持腾讯地图的 `{ latitude, longitude }` | P1 |
|
||||
| `Position` | `{ x, y }` | 2D 坐标,不支持馆内 POI 的 `{ x, y, z }`,也不支持腾讯地图的 `{ latitude, longitude }` | P1 |
|
||||
| `Facility.type` | `restroom/cafe/shop/exit/elevator/info` | 不包含 `entrance`、`hall`、`stairs`、`mother_baby`、`accessible_restroom`、`service_desk` 等真实 POI 类型 | P1 |
|
||||
| `POIMarker.type` | `exhibit/hall/facility/location` | 不包含 `entrance`,与 `ThreeMap`、`f1-indoor-pois.json` 不一致 | P1 |
|
||||
| `Exhibit` | 艺术品字段 `artist/year/material/size` | 自然博物馆需要 `taxonomy`、`period`、`specimenType`、`collectionNo`、`scientificName`、`ageRange` 等字段 | P0 |
|
||||
@@ -309,9 +309,9 @@ interface DataResult<T> {
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 展品/标本 | 5 | 30 到 60 | 200+ |
|
||||
| 展厅/展区 | 5 | 8 到 12 | 按真实楼层和展陈分区完整覆盖 |
|
||||
| 设施 | 8 | 30 到 60 | 与室内 POI 全量绑定 |
|
||||
| 设施 | 8 | 30 到 60 | 与馆内 POI 全量绑定 |
|
||||
| 路线 | 3 | 5 到 8 | 支持人群、时长、无障碍、拥堵策略 |
|
||||
| 室内 POI | 67,仅 1F | 每层 50+ | 全楼层、全关键节点 |
|
||||
| 馆内 POI | 67,仅 1F | 每层 50+ | 全楼层、全关键节点 |
|
||||
|
||||
当前数量只适合演示 UI,无法支撑真实导览。
|
||||
|
||||
@@ -323,9 +323,9 @@ interface DataResult<T> {
|
||||
| --- | --- | --- |
|
||||
| 核心 JSON | `position: { x, y }` | 未声明坐标系、楼层、比例尺和原点 |
|
||||
| 3D POI | `{ x, y, z }` | 未进入 `types/index.ts`,未绑定实体 |
|
||||
| 腾讯地图 | `{ latitude, longitude }` | 硬编码在组件内,未与室内 POI 建立转换关系 |
|
||||
| 腾讯地图 | `{ latitude, longitude }` | 硬编码在组件内,未与馆内 POI 建立转换关系 |
|
||||
|
||||
`TencentMap.vue` 里的建筑轮廓和 `ThreeMap.vue` 的中心点均硬编码为深圳自然博物馆附近坐标,但无法验证这些点与 GLB 模型、室内 POI、楼层图是否同源。
|
||||
`TencentMap.vue` 里的建筑轮廓和 `ThreeMap.vue` 的中心点均硬编码为深圳自然博物馆附近坐标,但无法验证这些点与 GLB 模型、馆内 POI、楼层图是否同源。
|
||||
|
||||
### 3.4 多语言数据
|
||||
|
||||
@@ -419,7 +419,7 @@ flowchart LR
|
||||
|
||||
| 资源 | 路径 | 大小 |
|
||||
| --- | --- | ---: |
|
||||
| 室内模型 | `static/models/f1-indoor.glb` | 1,562,816 bytes |
|
||||
| 馆内模型 | `static/models/f1-indoor.glb` | 1,562,816 bytes |
|
||||
| 楼层模型 | `static/models/f1-floor.glb` | 95,720 bytes;`facilities.json` 点位坐标来源 |
|
||||
| 部署副本 | `public/models/f1-indoor.glb`、`public/models/f1-floor.glb` | 与 `static/models` 同大小;如果两端都会打包,需要明确去重或按端分发 |
|
||||
|
||||
@@ -673,7 +673,7 @@ scripts/
|
||||
| P1 | 设施类型粒度不足 | 真实 POI 全部压成 `facility/entrance/hall`,具体类别藏在中文 label 中 | 搜索、筛选、图标、无障碍路线无法可靠判断类别 | 增加 `category/subtype`,如 `restroom_female`、`elevator`、`stairs`、`ticket_office`、`nursing_room` |
|
||||
| P1 | UI 筛选分类与真实标签没有规范映射 | `AreaSelector` 有 `卫生间/电梯/楼梯/停车场/母婴室/服务中心/寄存处/饮水处/影院`,真实标签是 `女卫001`、`电梯020`、`楼梯.001`、`存包处`、`茶水间` 等 | 用户选择分类后很难精确筛出真实点位 | 建立 label 归一化和分类映射表,区分展示名与检索名 |
|
||||
| P1 | 搜索数据未覆盖真实 1F 设施 | 搜索 Mock 只有 `洗手间`、`咖啡厅`、`服务中心`、`纪念品商店` 等 | 搜索不到真实存在的售票机、服务台、母婴间、轮椅及儿童车租车处、贵宾卫生间等 | 搜索索引从真实 POI 和设施实体生成 |
|
||||
| P1 | 存在两套 POI 坐标模型 | 真实 POI 为 `{x,y,z}`;`ThreeMap.vue` props/default POI 为 `{latitude,longitude}` | 组件接口同名但数据形态不同,后续接入容易错用 | 将室内 3D POI 与室外经纬度 POI 拆成不同类型 |
|
||||
| P1 | 存在两套 POI 坐标模型 | 真实 POI 为 `{x,y,z}`;`ThreeMap.vue` props/default POI 为 `{latitude,longitude}` | 组件接口同名但数据形态不同,后续接入容易错用 | 将馆内 3D POI 与馆外经纬度 POI 拆成不同类型 |
|
||||
| P2 | 真实 POI label 带模型导出痕迹 | `电梯001`、`楼梯.001`、`无障碍卫生间.001` | 直接展示会显得粗糙,也不利于搜索同义词 | 保留原始 label,同时新增 `displayName`、`instanceNo`、`normalizedName` |
|
||||
| P2 | `entrance` 类型语义混杂 | `售票处`、`售票机`、`服务台` 被标为 `entrance` | 类型名称无法表达真实服务属性 | 原始类型可保留,业务层补充 `category: ticket/service` |
|
||||
|
||||
@@ -685,7 +685,7 @@ scripts/
|
||||
| `src/assets/data/halls.json` | 1F 展厅名称和数量与真实 POI 冲突 | 重建 halls,并绑定 `poi_0/poi_51` 到 `poi_55` |
|
||||
| `src/assets/data/floors.json` | 1F 只引用 3 个旧设施 | 从真实 POI 派生楼层设施索引 |
|
||||
| `src/pages/index/index.vue` | `markerDataMap` 不认识 `poi_*`,点击设施被忽略 | 改为根据 `poiId/entityId` 查询 repository |
|
||||
| `src/components/map/ThreeMap.vue` | 默认 POI 使用经纬度,和真实室内 `{x,y,z}` POI 混用 | 拆分 `IndoorPOI` 与 `OutdoorMarker` |
|
||||
| `src/components/map/ThreeMap.vue` | 默认 POI 使用经纬度,和真实馆内 `{x,y,z}` POI 混用 | 拆分 `IndoorPOI` 与 `OutdoorMarker` |
|
||||
| `src/types/index.ts` | `Position` 只有 `{x,y}`,`POIMarker` 不含 `entrance` | 扩展坐标和 POI 类型 |
|
||||
| `src/components/search/SearchPanel.vue` | 搜索 Mock 未来自真实 POI | 搜索索引从 `pois + entities` 生成 |
|
||||
| `src/components/area/AreaSelector.vue` | 分类只停留在 UI 文案,没有连接真实 POI subtype | 建立设施分类字典和 label 归一化规则 |
|
||||
@@ -736,7 +736,7 @@ interface FacilityInstance {
|
||||
|
||||
| 数据/资产 | 可信部分 | 仍存在的问题 |
|
||||
| --- | --- | --- |
|
||||
| `static/models/f1-indoor.glb` | 真实 1F 室内 3D 模型 | 缺少 `modelId`、hash、版本、来源、坐标系、比例尺、与 POI 文件的绑定说明 |
|
||||
| `static/models/f1-indoor.glb` | 真实 1F 馆内 3D 模型 | 缺少 `modelId`、hash、版本、来源、坐标系、比例尺、与 POI 文件的绑定说明 |
|
||||
| `static/models/f1-floor.glb` | 真实 1F 楼层模型,且是 `facilities.json.position` 的提取来源 | `facilities.json` 未记录 `sourceModel`、提取工具、提取时间、坐标原点、单位、投影规则 |
|
||||
| `static/data/f1-indoor-pois.json` | 真实 1F POI 点位,使用 `{x,y,z}` 模型空间坐标 | 未绑定业务实体,label 仍是模型导出名称,需要业务归一化 |
|
||||
| `src/assets/data/facilities.json` | `position` 字段有真实模型来源 | 设施名称、类型、描述仍是旧艺术馆语义;坐标字段只有 `{x,y}`,无法判断与 `f1-indoor-pois.json` 的 `{x,y,z}` 如何互转 |
|
||||
|
||||
Reference in New Issue
Block a user