-
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