docs(任务规划): 复核菜单树叶数(42 节点 / 33 叶 / 已绑 21 / 未绑 12)并写清判定方法
按 ui_menu_tree.txt 用生成器自己的解析器(tools/menu_gen/gen_menu.py 的 parse_tree)重算:节点行 42、叶 33、已绑 #page 21、未绑 12;与生成物 UI_MENU_TAB_COUNT=42、UI_PAGE_MAP_COUNT=21 逐项对上。两份规划文档现有的 33/42/21/12 表述全部成立,故只补判定方法与复核命令,不改数字。 原 §1 写「重算方法见本节末」是悬空引用——§1 末尾并没有这一段。本次补 「叶数判定与复核」子节:节点行定义(非空、非注释行)、叶的缩进判据 (等价 ui_menu_tab_has_children==false)、#page 绑定判据、可重跑的复核 命令与预期输出,并记下三个错算法:把 42 个节点行当叶(多算 9 个菜单)、 grep -c 取 #page= 得 22(文件头注释里的示例字样也被算入)、按叶子名去重 得 29(参数/定值/控制字/软压板 在「整定」「查看」下各一份)。 README §1 同批加方法指针。只改这两份文档,未动代码与生成物,未推送。
This commit is contained in:
+2
-1
@@ -32,7 +32,8 @@
|
||||
|
||||
## 1. 当前执行:UI 补齐
|
||||
|
||||
菜单树共 33 叶(节点行合计 42):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**。未绑里 **7 叶纳入当前执行**
|
||||
菜单树共 33 叶(节点行合计 42):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**(2026-10-27 复核,
|
||||
判定规则与重跑命令见 `docs/任务规划/UI补齐.md` §1「叶数判定与复核」)。未绑里 **7 叶纳入当前执行**
|
||||
(通讯设置 1 + 记录 5 + 运行报告 1),另外 5 叶因缺少开入硬件、录波模块或 SNTP 产品定义而不做。
|
||||
装置维护 3 页与遥测死区/系数 2 页已于 2026-10-27 落地入库。唯一执行清单见 `UI补齐.md`。
|
||||
|
||||
|
||||
+21
-1
@@ -9,7 +9,7 @@
|
||||
页面映射表 `UI_PAGE_MAP_COUNT` = 21(与已绑叶数一致)。未绑 12 叶 = 下方第 1~3 项的 **7 叶**
|
||||
+ §5 明确不做的 **5 叶**(遥信 3 / 手动录波 1 / SNTP 1),与分类表逐项对得上。
|
||||
⚠ 本节曾两次写错口径:16/17 是装置维护与遥测两页落地前的陈旧数,而「未绑 21」是把 42 个**节点行**
|
||||
当成叶子数——重算方法见本节末,按缩进判定叶子(有更深缩进后继者即非叶子)。
|
||||
当成叶子数——判定规则与重跑命令见本节末「叶数判定与复核」(2026-10-27 再次独立复算,33/42/21/12 全部成立,数字未改)。
|
||||
|
||||
| 分类 | 数量 | 当前怎么处理 |
|
||||
|---|---:|---|
|
||||
@@ -25,6 +25,26 @@
|
||||
逐页形态见 `docs/UI设计/页面补齐规划.md`;数据契约见
|
||||
`docs/UI设计/UI_数据供给设计说明.md`。本文件只维护执行顺序和完成判据。
|
||||
|
||||
### 叶数判定与复核(2026-10-27 实测)
|
||||
|
||||
1. **节点行** = `ui_menu_tree.txt` 里非空、非 `#` 开头的行(当前 **42** 行,含根「主界面」)。
|
||||
2. **缩进即层级**(每级 2 空格;Tab 会被 `gen_menu.py` 直接拒绝):某节点行之后再没有更深缩进的行 = **叶**
|
||||
(当前 **33** 叶);有更深缩进后继者 = 菜单节点(当前 **9** 个)。等价于生成物口径 `ui_menu_tab_has_children(node) == false`。
|
||||
3. **绑定**:叶行行尾带 ` #page=` = 已绑(当前 **21** 叶);不带的 = 未绑(当前 **12** 叶)。
|
||||
|
||||
复核命令(复用生成器自己的解析器 `tools/menu_gen/gen_menu.py` 的 `parse_tree`,不另写一套计数逻辑,免得与生成物脱钩):
|
||||
|
||||
```bash
|
||||
& '.venv\Scripts\python.exe' -c "import io,sys; sys.path.insert(0,'tools/menu_gen'); import gen_menu as g; n,_=g.parse_tree(io.open('ui_menu_tree.txt',encoding='utf-8').read()); leaf=[i for i,x in enumerate(n) if all(y[0]!=i for y in n)]; b=sum(1 for i in leaf if n[i][4]); print('nodes=%d leaves=%d bound=%d unbound=%d' % (len(n),len(leaf),b,len(leaf)-b))"
|
||||
```
|
||||
|
||||
输出 `nodes=42 leaves=33 bound=21 unbound=12`;交叉核对生成物:`ui_menu_tab.h` 的 `UI_MENU_TAB_COUNT` = 42(节点行数)、
|
||||
`ui_page_registry.h` 的 `UI_PAGE_MAP_COUNT` = 21(已绑叶数)——一对 42、一对 21,与上面逐项对得上。
|
||||
|
||||
三个已踩过的错算法:**把 42 个节点行当叶子**(多算 9 个菜单节点,得出「未绑 21」);**`grep -c '#page='` 得 22**
|
||||
(文件头注释第 5 行有 `#page=<模块名>` 示例字样,必须先剔注释行);**按叶子名去重得 29**(`参数`/`定值`/
|
||||
`控制字`/`软压板` 在「整定」「查看」下各一份,4 对同名不能合并)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 执行清单
|
||||
|
||||
Reference in New Issue
Block a user