5. 这棵树怎么维护
树的 URL 会与 router/index.ts 的 SPA 路由、main.py 的 PAGE_ROUTES、prerender.py 的 STATIC_PAGES、以及 web-src/public/*.html 做双向比对:树里写了不存在的地址会红;线上新增了页面却没进树,CI 也会红。确实不该进树的(重定向、跳转壳、验证文件等)要在 route_policy.exempt 里逐条写明理由。
咏庆德云数据栈 · 站点地图 / 结构索引
从一级栏目一路下钻到页面里的最小控件;先看一屏地图,再按层展开
看不懂全站时先看这一屏:每个格子是一级栏目,数字由树现算。点卡片直接跳到树里对应分支。
上面每个数字都从树现算,不是手填的。点任意卡片,会跳到下方树里对应的分支并展开到页面层。
这一栏由生成器直接读 router/index.ts、main.py 的 PAGE_ROUTES、prerender.py 的 STATIC_PAGES 与 public/*.html 得出。网站新增或删除页面,重新生成就会自动跟着变,不需要有人记得往树里补节点。
共 32 个真实页面(自动清单)· 32 个在人工树里能匹配到 URL · 0 个匹配不到。匹配只说明树里记过这个地址,不等于逐项核对过当前页面;参数页(含 :)按路由模式列出,不造示例链接。
/art/:catSPA 路由树中有 URL/person/:codeSPA 路由树中有 URL/person/:code/partner/:otherSPA 路由树中有 URL/program/:nameSPA 路由树中有 URL/quzhong/:nameSPA 路由树中有 URL/session/:idSPA 路由树中有 URL/team/:nameSPA 路由树中有 URL/venue/:venueSPA 路由树中有 URLL4 就是页面里那种「块」,L5 是块里能单独改动的最小单元。全树所有叶子都落在 L5,没有停在半路的浅层叶子。
全站统一 6 层:L0 站点 → L1 一级栏目 → L2 页面 → L3 区块 → L4 模块(块 / 卡片)→ L5 最小控件与字段。这棵树是导航树 / 文档树,不是数据库外键:同一个页面若从两个分支都能抵达,树里照列,但指向同一个 URL。
下面第 3 节的逐层细节来自 2026-11 对站点的一次人工浏览记录,不是自动抓取的当前 DOM:层级与控件位置是实测的,但节点文本里的具体数值、日期、人名和节目单条目是那次页面显示的内容快照,会过期,看当前数字请回站内对应页面。
哪些页面真实存在,以上方「当前真实页面清单」为准 —— 它由生成器直接读路由与页面单一源得出,网站加页面重新生成就自动出现,不依赖这份人工观测。清单里「树中有 URL」只表示人工树记过这个地址,不等于逐项核对过当前页面;匹配不到的会标「树中无 URL」。
content/site-tree.json 后重新生成。
全树的 L5 控件基本由下面这些类型组合而成。代号只用于归纳,树里逐项写的是实际控件名与字段。
| 代号 | 最小控件 | 包含的最小字段 |
|---|---|---|
| M1 | 标题 / 编号 | 章节号、模块名、副标题 |
| M2 | 口径徽章 ⓘ | 口径 code、悬浮说明文案 |
| M3 | 总量数字 | 数值、千分位、单位、括注 |
| M4 | 搜索框 | placeholder、共 N 条、aria-label、触发条件 |
| M5 | 列表行 | 名次 / 名称 / 计数 / 单位 / 跳转 URL |
| M6 | 展开按钮 | 展开全部 N 条 ▼ / 收起 ▲ |
| M7 | 空态 | 没有匹配的 X / 暂无数据 / 加载失败 + 重试 |
| M8 | 切换器 | 时段 / 粒度 / 维度 / 排序 / 视图,含选中态 |
| M9 | 图表 | 标题、数据系列、轴、峰值 / 均值标注、ⓘ、导出 CSV |
| M10 | 链接 | 「X →」文字、目标 URL、面包屑回指 |
| M11 | 角标 / 标签 | 角色(演·伴·逗·捧)、曲种、状态徽章 |
| M12 | 导航控件 | 上一周 / 下一周 / 回本周 / 上一场 / 下一场 / 分页 |
| M13 | tab 条 | 页内视角切换,如人物页、节目页、队伍页 |
| M14 | 动作卡 | 生成海报 / 在全站的位置 / 演出报告 / 看详情 → |
| M15 | 口径提示 | 📏 数据口径 · ⚠ 记录边界警告 · ⓘ 悬浮说明 |
| M16 | 摘要条 | 📌 一句话结论,含多个数值与定性判断 |
| M17 | 章节头 ch-head | 编号 ch-no、h2 标题、副标题、ⓘ 口径按钮 |
| M18 | 榜单行(细) | 第 N 名 · 名称 · 年份区间 · 数值 · 环比 · P 码 |
| M19 | 指纹格 / 日历格 | pos-grid、ch-month、ch-week、色块、少→多色阶 |
| M20 | 口径长文 | 压轴 / 倒二 / 攒底 / 末段怎么分,返场不计入站位 |
| M21 | 登录表单 | 用户名 / 密码 / 登录 / HttpOnly 会话 Cookie 说明 |
| M22 | 报告块 | 年度 KPI、ⓘ 口径、同比、看点海报、章节导航 |
树的 URL 会与 router/index.ts 的 SPA 路由、main.py 的 PAGE_ROUTES、prerender.py 的 STATIC_PAGES、以及 web-src/public/*.html 做双向比对:树里写了不存在的地址会红;线上新增了页面却没进树,CI 也会红。确实不该进树的(重定向、跳转壳、验证文件等)要在 route_policy.exempt 里逐条写明理由。