From c121eb977392b0bcafde7aeafa7afff2a5007b96 Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Tue, 27 Oct 2026 07:45:11 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E4=BB=BB=E5=8A=A1=E8=A7=84=E5=88=92):=20?= =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E8=8F=9C=E5=8D=95=E6=A0=91=E5=8F=B6=E6=95=B0?= =?UTF-8?q?=EF=BC=8842=20=E8=8A=82=E7=82=B9=20/=2033=20=E5=8F=B6=20/=20?= =?UTF-8?q?=E5=B7=B2=E7=BB=91=2021=20/=20=E6=9C=AA=E7=BB=91=2012=EF=BC=89?= =?UTF-8?q?=E5=B9=B6=E5=86=99=E6=B8=85=E5=88=A4=E5=AE=9A=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 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 同批加方法指针。只改这两份文档,未动代码与生成物,未推送。 --- docs/任务规划/README.md | 3 ++- docs/任务规划/UI补齐.md | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) 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. 执行清单