diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 744e3403..e5be9327 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -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`。 diff --git a/docs/任务规划/UI补齐.md b/docs/任务规划/UI补齐.md index 757abba6..8519940d 100644 --- a/docs/任务规划/UI补齐.md +++ b/docs/任务规划/UI补齐.md @@ -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. 执行清单