nav: 统一 NavNode schema + runtime/roadmap 分离 + 城市补父级

- navigation/nav-schema.js: 统一 NavNode schema 定义
- navigation/runtime-nav.js: MVP runtime(仅 6 城市 active)
- navigation/future-catalog.js: 路线图数据(不进 runtime)
- 旧索引文件标注 @deprecated,重定向到新路径
- 6 城市补 countryId/regionId
- game-design 明确 MVP vs V1.1+ 导航边界

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
manpengan
2026-03-28 23:31:52 +08:00
parent 18cd4d8409
commit 212b12ab6b
15 changed files with 470 additions and 439 deletions

View File

@@ -75,160 +75,124 @@
## 2. 地图结构
### 2.1 导航层级
### 2.1 MVP 导航(当前实现)
MVP 只开放亚洲 6 城市,直入城市选择页,不启用完整多级导航。
```
3x3 棋盘)
└── 国家3x3 棋盘,超过 9 国分页)
└── 城市3x3 棋盘,超过 9 城分页)
└── 关卡(单局游戏)
启动 → 亚洲城市页3x3 棋盘6 城市)→ 关卡
```
中国因城市数量多40 城),额外增加"地区"层级:
- 跳过洲选择页(只有 1 个洲,多余点击)
- 跳过国家/地区层级
- 6 城市平铺在一页 3x3 棋盘中
- 其他洲的入口不显示
**MVP 城市列表(固定 6 城):**
| 序号 | 城市 | 国家 | 解锁条件 |
|------|------|------|---------|
| 1 | 北京 | 中国 | 默认解锁 |
| 2 | 东京 | 日本 | 通关北京 |
| 3 | 曼谷 | 泰国 | 通关东京 |
| 4 | 首尔 | 韩国 | 通关曼谷 |
| 5 | 新加坡 | 新加坡 | 通关首尔 |
| 6 | 伊斯坦布尔 | 土耳其 | 通关新加坡 |
### 2.2 V1.1+ 完整导航(后续启用)
城市数量超过 9 时启用完整多级导航,每页 3×3 棋盘,超过 9 项翻页。
```
亚洲 → 中国 → 地区3x3→ 城市3x3→ 关卡
亚洲 → 日本 → 城市3x3→ 关卡
洲选择3x3
└── 国家选择3x3分页
└── 城市选择3x3分页
└── 关卡
```
### 2.2 洲选择页(第 1 级)
1 页3×3 棋盘:
中国因城市多41 城),额外增加地区层级:
```
┌────────┬────────┬────────┐
│ 亚洲 │ 欧洲 │ 北美洲 │
├────────┼────────┼────────┤
│ 南美洲 │ 非洲 │ 大洋洲 │
├────────┼────────┼────────┤
│ │ │ │
└────────┴────────┴────────┘
亚洲 → 中国 → 地区3x3→ 城市3x3
亚洲 → 日本 → 城市3x3
```
6 个洲3 个空位留给未来扩展。MVP 只开放亚洲,其余显示锁定 + "即将开放"。
#### 洲选择页
每个洲的封面:洲标志性图案 + 解锁进度(如"6/70 城市已解锁"
6 个洲1 页:亚洲、欧洲、北美洲、南美洲、非洲、大洋洲
### 2.3 国家选择页(第 2 级)
#### 亚洲国家页
#### 亚洲 — 2 页
18 国,分 2 页
- Page 1: 中国、日本、韩国、泰国、新加坡、越南、马来西亚、印度尼西亚、菲律宾
- Page 2: 印度、阿联酋、土耳其、以色列、尼泊尔、柬埔寨、斯里兰卡、缅甸、蒙古
Page 1:
```
┌────────┬────────┬────────┐
│ 中国 │ 日本 │ 韩国 │
├────────┼────────┼────────┤
│ 泰国 │ 新加坡 │ 越南 │
├────────┼────────┼────────┤
│马来西亚│印度尼西亚│ 菲律宾│
└────────┴────────┴────────┘
```
#### 中国地区页
Page 2:
```
┌────────┬────────┬────────┐
│ 印度 │ 阿联酋 │ 土耳其 │
├────────┼────────┼────────┤
│ 以色列 │ 尼泊尔 │ 柬埔寨 │
├────────┼────────┼────────┤
│斯里兰卡│ 缅甸 │ 蒙古 │
└────────┴────────┴────────┘
```
8 个地区1 页:
#### 欧洲 — 2 页
| 地区 | 城市 | 数量 |
|------|------|------|
| 华北 | 北京、天津、石家庄、太原、呼和浩特 | 5 |
| 东北 | 沈阳、长春、哈尔滨、大连 | 4 |
| 华东 | 上海、南京、杭州、合肥、福州、南昌、济南、苏州、厦门、青岛、宁波 | 112 页) |
| 华中 | 郑州、武汉、长沙 | 3 |
| 华南 | 广州、深圳、南宁、海口、三亚 | 5 |
| 西南 | 成都、重庆、贵阳、昆明、拉萨 | 5 |
| 西北 | 西安、兰州、西宁、银川、乌鲁木齐 | 5 |
| 港澳台 | 香港、澳门、台北 | 3 |
Page 1:
```
法国、英国、意大利、西班牙、德国、荷兰、瑞士、奥地利、捷克
```
> 港澳台统一为 3 城(香港、澳门、台北),文档和索引一致。
Page 2:
```
希腊、俄罗斯、葡萄牙、挪威、瑞典、丹麦、芬兰、冰岛、匈牙利
```
### 2.3 导航数据合同
#### 北美洲 — 1 页
```
美国、加拿大、墨西哥 + 6 空位
```
所有导航层级使用统一的 NavNode schema定义在 `js/content/navigation/nav-schema.js`
#### 南美洲 — 1 页
```
巴西、阿根廷、秘鲁、智利、哥伦比亚 + 4 空位
```
| 字段 | 类型 | 说明 |
|------|------|------|
| `type` | string | `continent` / `country` / `region` / `city-group` |
| `id` | string | 全局唯一标识 |
| `parentId` | string\|null | 父节点 id洲级为 null |
| `name` | string | 中文名 |
| `nameEn` | string | 英文名 |
| `sortOrder` | number | 同级排序 |
| `themeColor` | string | 主题色 HEX |
| `childType` | string\|null | 子节点类型:`country` / `region` / `city` / null |
| `childIds` | string[] | 当前可消费的子节点 id仅已启用的 |
| `pageSize` | number | 每页格子数,默认 9 |
| `isEnabled` | boolean | 当前版本是否启用 |
| `isUnlockedByDefault` | boolean | 是否默认解锁 |
#### 非洲 — 1 页
```
埃及、南非、摩洛哥、肯尼亚 + 5 空位
```
分页通过 `shared/pagination.js``paginate(childIds, pageSize)` 动态计算,不手写 page 常量。
#### 大洋洲 — 1 页
```
澳大利亚、新西兰 + 7 空位
```
**数据文件分层:**
### 2.4 中国地区选择页(第 3 级,仅中国)
| 文件 | 用途 | 是否进入 runtime |
|------|------|-----------------|
| `navigation/runtime-nav.js` | 当前版本可消费的导航节点 | ✅ 是 |
| `navigation/future-catalog.js` | 未来版本城市/国家/地区规划 | ❌ 否 |
| `navigation/nav-schema.js` | NavNode schema 定义 + 验证 | ✅ 是(类型定义) |
| `docs/city-roadmap.md` | 全量 127 城市路线图 | ❌ 否 |
中国 40 个城市按地区分组1 页 3×3
```
┌────────┬────────┬────────┐
│ 华北 │ 东北 │ 华东 │
├────────┼────────┼────────┤
│ 华中 │ 华南 │ 西南 │
├────────┼────────┼────────┤
│ 西北 │ 港澳台 │ │
└────────┴────────┴────────┘
```
各地区包含城市:
| 地区 | 城市 | 数量 | 页数 |
|------|------|------|------|
| 华北 | 北京、天津、石家庄、太原、呼和浩特 | 5 | 1 |
| 东北 | 沈阳、长春、哈尔滨、大连 | 4 | 1 |
| 华东 | 上海、南京、杭州、合肥、福州、南昌、济南、苏州、厦门、青岛、宁波 | 11 | 2 |
| 华中 | 郑州、武汉、长沙 | 3 | 1 |
| 华南 | 广州、深圳、南宁、海口、三亚 | 5 | 1 |
| 西南 | 成都、重庆、贵阳、昆明、拉萨 | 5 | 1 |
| 西北 | 西安、兰州、西宁、银川、乌鲁木齐 | 5 | 1 |
| 港澳台 | 香港、澳门、台北 | 3 | 1 |
### 2.5 城市选择页(第 3/4 级)
#### 其他国家(非中国)— 直接展示城市
| 国家 | 城市数 | 页数 |
|------|--------|------|
| 日本 | 4东京、大阪、京都、札幌 | 1 |
| 韩国 | 3首尔、釜山、济州 | 1 |
| 泰国 | 3曼谷、清迈、普吉 | 1 |
| 美国 | 7纽约、洛杉矶、旧金山、拉斯维加斯、华盛顿、芝加哥、迈阿密 | 1 |
| 意大利 | 4罗马、米兰、威尼斯、佛罗伦萨 | 1 |
| 其他国家 | 1-3 | 1 |
所有国家的城市数均 ≤ 9无需分页除华东 11 城需 2 页外)。
### 2.6 城市封面设计
### 2.4 城市封面设计
每个格子显示:
- 该城市/国家/洲的特色猫猫头像(已解锁:彩色,未解锁:灰色剪影)
- 猫猫头像(已解锁:彩色,未解锁:灰色剪影)
- 名称(中文)
- 进度信息(已解锁:"X/6 关",未解锁:"🔒"
- 进度(已解锁:"X/6 关",未解锁:"🔒"
### 2.7 分页交互
### 2.5 分页交互
- 左右滑动翻页,底部圆点指示器
- 首次进入默认第 1 页
- 翻页动画 0.3s 弹性过渡
- MVP 只有 1 页 6 城市,无需翻页
### 2.8 解锁规则
### 2.6 解锁规则
-一层级内顺序解锁(通关前一个解锁下一个)
-顺序解锁(通关前一个解锁下一个)
- 第一个项目默认解锁
- 跨层级:通关一个国家所有城市后,解锁下一个国家
- 中国地区内:通关华北所有城市后解锁东北,以此类推
- MVP 只开放亚洲洲,亚洲内只开放中国(北京)和已有 MVP 城市
- MVP北京默认解锁顺序通关解锁后续城市
- V1.1+:跨层级解锁(通关一个国家所有城市后解锁下一个国家)
---