#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 从 SQLite 生成"带复选框的交互式功能树" HTML (阶段3 交付物)。 管理员可勾选保留/删除, 支持展开折叠、搜索、查看截图、导出勾选结果 JSON。 输出: docs/功能树-勾选.html 及 docs/selection-template.json """ import os, json, sqlite3 BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DB = os.path.join(BASE, "db", "research.db") OUT = os.path.join(BASE, "docs", "功能树-勾选.html") def build_tree(): conn = sqlite3.connect(DB); conn.row_factory = sqlite3.Row rows = [dict(r) for r in conn.execute( "SELECT node_key,parent_key,level,name,full_path,url,description,understanding,screenshot_path,sort_order,keep " "FROM features ORDER BY level,sort_order,id").fetchall()] conn.close() by_parent = {} for r in rows: by_parent.setdefault(r["parent_key"] or "", []).append(r) def build(pk): out = [] for r in by_parent.get(pk, []): n = dict(r) # 截图相对 docs/ 的路径 sp = r.get("screenshot_path") n["shot"] = ("../" + sp) if sp else "" n["children"] = build(r["node_key"]) out.append(n) return out return build("") HTML = r""" 2号人事部 · 功能调研树(第一阶段·管理员勾选)

2号人事部 · 功能调研树 第一阶段 · 管理员勾选(勾选=保留,取消=删除)

共 __MODN__ 个模块 / __LEAFN__ 个功能页。勾选后点【导出勾选结果】保存 JSON,用于生成第二阶段开发需求文档。
(选择自动保存到浏览器本地) 保留 0 / 0 项
×
""" def main(): tree = build_tree() modn = len(tree) leafn = sum(1 for _ in _iter_leaves(tree)) html = (HTML.replace("__DATA__", json.dumps(tree, ensure_ascii=False)) .replace("__MODN__", str(modn)).replace("__LEAFN__", str(leafn))) os.makedirs(os.path.dirname(OUT), exist_ok=True) open(OUT, "w").write(html) print("written:", OUT, "modules:", modn, "leaves:", leafn) def _iter_leaves(nodes): for n in nodes: if not n["children"]: yield n else: yield from _iter_leaves(n["children"]) if __name__ == "__main__": main()