• Data Governance Dev's avatar
    refactor(web): 分析结果 Tab 通用协议 + 文档 · 714f714a
    Data Governance Dev authored
    把 6 个 tab (merge / redundancy / empty / missing / length / standards)
    的展示抽出成通用协议,让每个 step 在 data 里嵌入 _protocol 自描述渲染,
    前端一个通用 renderer 按协议渲染;新增 step 只需写 data + 嵌 _protocol,
    零前端改动。
    
    后端
    - 新建 web/core/tab_protocol.py:dataclass (TabProtocol / KpiSpec /
      SummarySpec / TableSpec / ColumnSpec / RenderSpec / LinkageSpec) +
      _eval_path() 路径表达式求值 + make_protocol() 一站式 helper
    - 5 个 step 文件在 return 里嵌入 _protocol
      - step2_merge_redundancy.py:2 tab(merge_candidates + redundancy_fields)
      - step4_empty_fields.py:1 tab + 2 子表 + linkage;summary 加 flat 副本
      - step5_missing_comments.py:1 tab
      - step6_length_check.py:1 tab
      - step7_standards.py:1 tab + 2 子表 + linkage
    - orchestrator.py 删 _build_overview 里 KPI 聚合逻辑
    - models.py OverviewStats 缩为 5 字段(database / host / db_type /
      total_tables / total_fields / executed_at)
    
    前端 web/static/index.html 大改
    - 8 个硬编码 KPI 卡 → v-for='k in displayedKpis'
    - 6 个硬编码 <el-tab-pane>(~450 行)→ v-for='t in displayedTabs'
    - 删 TAB_STEP_MAP / perTableStats / flatEmptyFields / perTableRows /
      filteredViolations
    - 新增 displayedTabs / displayedKpis / tabStatus computed
    - 新增 evalPathExpr / resolvePath / resolveRows / renderSummary /
      resolveRenderPath 工具函数
    - 10 种 render.kind 在 template 里以 v-else-if 分发(text / code / tag /
      tag_list / two_line / three_line / progress / percent / ratio / number)
    - 3 个嵌套展开行(merge / standards / empty_fields)保留硬编码 —
      展开行内容太特定,WORKLOG 记为后续协议扩展方向
    
    文档与验证
    - 新建 docs/TAB_PROTOCOL.md:完整协议规范 + 新增 step 模板 + 真实走读
    - 新建 scripts/verify_protocol.cjs(12 case)+ verify_e2e.cjs(9 case)
      + verify_render.cjs(12 case)+ verify_template.cjs(2 case)——
      共 35 个 case 全过
    - verify_template.cjs 用 jsdom + 真实 vue.global.prod.js + Function 劫持
      截获编译产物,专门兜底「页面变白 / 编译出坏 JS」回归
    - WORKLOG 追加 v-else fallback 编译 bug 修复(Vue 3.5.x 在长 v-else-if
      链末尾输出 : () 无条件空 call expression)—— 把 v-else 改为
      v-else-if="!cond" 显式条件
    
    构建
    - package.json + package-lock.json:jsdom + @vue/compiler-dom(verify
      脚本的 dev 依赖)
    - .gitignore 加 scripts/compiled_*.js(verify_template 失败时的 debug
      产物)
    714f714a
tab_protocol.py 10 KB