-
Data Governance Dev authored
后端: - step6_length_check.py: LENGTH_RULES 扁平列表 → 7 个 _BUILTIN_CATEGORIES (len_id_card / len_uscc / len_mobile / len_xzqh / len_postal / len_email / len_bank_card) 每个分类独立 rules + UI 元数据 + expected_length + standard - orchestrator.py: 单 length_check step → 7 个 len_* 独立 step (工厂函数 _run_length_check_category(cat_id));旧的 length_check 保留为 hidden - match_config.py: 新增 get_length_categories_rules(cat_id);旧 get_length_rules() 保留为兜底 - standards_match.yaml: step6_length.rules → step6_length.categories.<cat_id>.rules 每分类 1 个 name_pattern + 1 个 comment_keyword(区划留 2 个) - routes.py /api/analysis-tree: 加递归 3 层嵌套(group → subgroup → leaf) 新增 is_subgroup: True 显式标记(避免靠 step_id 缺失推断) /api/match-config: 给每个 len_* 单独返回 names/comments 默认值 前端: - analysis_tree.json: 「字段长度检查」从 leaf 改为 subgroup (key=length_check_group, 含 7 个 len_* 子 step) - index.html: flatCheckRows + flatResultRows 支持 3 层(_level 0/1/2) toggleGroupCheck / setAllChecks / setAllGroupsExpanded 改为递归处理子组叶子 flatResultRows fallback 分支抽出 _push_leaf_row(item, level) 助手 - style.css: 加 .tree-row--subgroup / .subgroup-title / .subgroup-count / .subgroup-description Bug fix: - step_id vs tab_key 混用导致 displayedTabs 过滤掉 7 个 length tab section_key='length_len_id_card' / tab_key='length_len_id_card' / step_id='len_id_card' 三者分离 _wrap() 加 step_id 参数(默认沿用 tab_key,向后兼容旧 length_check) WORKLOG 记录所有改动 + 5 个踩坑(subgroup 识别 / YAML 关键词精简 / fallback 分支复用 / CSS .tree-row--subgroup / LengthRule.__dict__ 转 dict 抛错 / step_id 与 tab_key 混用)53f6205d