专业词汇字典 · 导航状态机设计方案
版本 v1.4.0(候选) · 2026-08-06 · 小八弟制作 · 待春哥拍板(本页为一次性分享,阅后自动关闭)
一、背景:当前导航逻辑的问题
前一轮上线了「分类标签 chips + 双下拉 + 阅读器(左右滑切条)」。但春哥一眼看出分类条目选择框和标签内项目操作逻辑有断层。我把真实代码(《gen_vocab.py》的 FILTER_JS / 阅读器 RD 对象)的状态机画出来,确认有 4 个毛病:
- P1(最致命,正是你点破的):阅读器的分类锚点用「打开词自身分类」
TERM_CAT[id],不是网格的 activeCat。All 模式下点开任意词,阅读器被钉死在该词分类,左右滑只能在那一类里打转,永远滑不到其他 5 类——和你说的"全选=左右滑切标签页"正好相反。
- P2:阅读器列表无视搜索
q 与显示数 limit,顶部计数取全量,与屏幕所见对不上。
- P3("选框和标签内项目逻辑有问题"的核心):下拉框是单向的——
applyFilter 每次清空 termSel,RD.render 从不回填。选框和阅读器各玩各的,没有双向同步。
- P4:由 P1 推出,All 模式物理上无法跨分类滑动。
图1 · 现状导航状态机(存在问题 P1–P4)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
二、修正总思路:activeCat 是唯一真相源 → 双轴派生
把 activeCat 立为唯一真相源,由它决定阅读器走哪根轴:
- activeCat === 'all'(全选) → 走「分类轴」:
navList = 6 个分类的序列表,左滑/→ = 切到下一个分类(就是你说的"相当于切换标签页")。
- activeCat === 某具体分类 → 走「条目轴」:
navList = 该分类下的词条,左滑/→ = 下一条。
同时修掉 P2/P3:RD.open(id) 看当前 activeCat 定起点;RD.render 末尾把当前词回写 termSel.value,下拉框与阅读器双向同步。
图2 · 修正模型:双轴决策(activeCat 派生阅读器走哪根轴)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
三、两个待定子项 → 4 个组合方案
双轴模型定了,但有两处细节要你拍板(见下方对比表):
① All 模式左右滑切分类时,网格「全部」标签要不要跟着跳?
· A(我倾向):阅读器内部切分类,网格保持"全部"不动——最不打断你正在看的完整列表。
· B:滑动时连网格 chip 高亮也跳到具体分类(相当于退出"全部"视图)。
② All 模式每一"页"显示什么?
· A(我倾向):显示该分类的首条词(按频次排第一),和条目模式视觉一致。
· B:显示「分类标题 + 该类全部词条」一整页。
方案①A②A
图3 · 方案①A②A(网格不动 · 每页首条)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
方案①A②B
图4 · 方案①A②B(网格不动 · 每页整类词条)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
方案①B②A
图5 · 方案①B②A(网格跟随翻类 · 每页首条)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
方案①B②B
图6 · 方案①B②B(网格跟随翻类 · 每页整类词条)
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规
四、四方案对比
| 方案 | ① 网格是否跟随翻类 | ② 每页内容 | 优点 | 代价 |
| ①A②A | 否(保持全部) | 该分类首条 | 不打断完整列表;翻类即看头牌,最轻量 | 看不到整类全貌 |
| ①A②B | 否(保持全部) | 整类词条 | 不打断列表;单页能看到整类 | 单页信息量大 |
| ①B②A | 是(离开全部) | 该分类首条 | 最贴近"全选=切标签页",网格同步 | 滑动即打断"全部"视图 |
| ①B②B | 是(离开全部) | 整类词条 | 翻类最彻底、信息最全 | 单页最长;打断"全部"视图 |
五、我的推荐与待拍板
小八弟推荐:①A②A。理由——你前面强调"全选=左右滑切标签页",①A 用阅读器内部切分类来兑现这个语义,同时网格"全部"视图保持不动,不破坏你正在看的完整列表;②A 每页首条和条目模式视觉一致、滑动最轻量。
但如果你要的是"真的把网格也一起翻"(滑动时顶部 chips 高亮也跟着跳到具体分类),那就选 ①B。两者只是"网格跟不跟随"的差异,阅读器的切分类语义完全一致。
请你拍板两点:①选 A 还是 B?②选 A 还是 B? 我据此改 gen_vocab.py + 同步 test_vocab.py/test_reader.mjs(补"All 模式切分类""双向同步"断言)+ 重建部署(URL 不变)+ 说明书升正式 v1.4.0。依旧先测后上。