Commit a0b10c06 authored by Data Governance Dev's avatar Data Governance Dev

feat(web): 数据字典浏览器动态分页(滚动加载 + 筛选重读 + 隐藏全选)

状态机重构:
- 删 tableSummary / dataDict 全量 ref + 4 个前端过滤 computed
- 新增 tableList/fieldList + page/hasMore/total/loading 共 10 个 ref
- 新增 fetchTablesPage/fetchFieldsPage(防 stale 响应 + nextTick 后重挂 scroll)
- 新增 onTablesScroll/onFieldsScroll:EP 2.14.3 + height 时 scroll 不冒泡到 el-table 根,
  改在 .el-scrollbar__wrap 上挂原生 addEventListener('scroll', { passive: true })
- 新增 rebindDictScroll:每次 fetch + nextTick 后重挂兜底(el-table 重建 wrap 时失效)
- 筛选 commit 时从后端重读第 1 页(applyTableSearch/applyFieldSearch)
- watch(form.tables) 触发 fetchFieldsPage(1, true)(勾选表变化自动更新字段表)

跨页勾选同步:
- onTableSelectionChange 改为 set 合并(visible 名 + 新选中 → add;visible - 未选中 → delete;
  不在 visible 的保留)—— 旧实现会丢跨页勾选
- 新增 restoreTableSelection:数据刷新后把 el-table 可见勾选与 form.tables 对齐
  (reserve-selection 在 :data 整体替换时失效,必须手动同步)

按钮重写:
- 全选 / 反选:调 /api/dict/all-table-names 拿全量匹配名字 → 设 form.tables
  → fetchTablesPage(1, true) 把所有匹配表拉回首屏
- 清空:form.tables = [] + clearSelection()

CSS:web/static/style.css
- .dict-tables-table thead .el-checkbox, .dict-fields-table thead .el-checkbox
  { visibility: hidden; pointer-events: none; }
  (display:none 会算错表头高度)

addCustomRule:去除 tableSummary 兜底(后端 /api/dict/fields 每行附 table_comment)

踩坑:
- EP 2.14.3 + height → <el-scrollbar> 包裹 body → @scroll 不触发,必须原生监听
- selection-change 只返 visible 选中行,直接赋值丢跨页勾选 → set 合并
- reserve-selection 在 :data 整体替换时失效 → 自写 restoreTableSelection
parent 6cb0ffa7
This diff is collapsed.
...@@ -3,6 +3,14 @@ ...@@ -3,6 +3,14 @@
display: flex; display: flex;
gap: 16px; gap: 16px;
} }
/* 2026-08-13:隐藏两侧表格的全选 checkbox(保留每行 checkbox)。
Element Plus 2.x 的 selection header 渲染在 .el-table__header 内 .el-checkbox
上;body 行每行也是 .el-checkbox → 只藏 thead 下的。 */
.dict-tables-table thead .el-checkbox,
.dict-fields-table thead .el-checkbox {
visibility: hidden;
pointer-events: none;
}
.dict-pane-left { .dict-pane-left {
flex: 0 0 560px; /* 4 列(表名 + 表注释 + 字段数 + selection)最小宽度约 520px,留出余量 */ flex: 0 0 560px; /* 4 列(表名 + 表注释 + 字段数 + selection)最小宽度约 520px,留出余量 */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment