• Data Governance Dev's avatar
    fix(web): selection 列移到最后 — Element Plus 兼容 bug · a07db7bb
    Data Governance Dev authored
    # 问题
    左侧「数据字典浏览器」表格渲染了表名 / 字段数,但每行没有勾选框,无法单选 / 多选。
    
    # 根因
    Element Plus 的列渲染 bug:当 <el-table-column type="selection"> 写在「最前」,
    且后面紧跟带 <template #default> slot 的列时:
    - header 的 selection <th> 被算成 colspan="2" scope="colgroup"
      (正常应该是 colspan="1" scope="col")
    - body 行的 selection <td> 完全不渲染 → 整个表只剩 header 的 1 个全选框
    
    # 验证(jsdom 跑了 4 个最小 case)
    | selection 位置 | 后续列类型                | 结果                       |
    | 1              | 第 1 | 全部 prop                | ✅ 3 cell + 3 checkbox |
    | 2              | 第 1 | 全部 default slot       | ❌ 2 cell + 1 checkbox(bug)|
    | 3              | 末尾 | 全部 default slot       | ✅ 3 cell + 3 checkbox |
    | 4              | 末尾 | 全部 prop                | ✅ 3 cell + 3 checkbox |
    
    只有 case 2 复现 bug —— 确认是 selection 列在前 + 后列带 slot 的组合触发。
    
    # 修复
    web/static/index.html:142-165 — 把 <el-table-column type="selection">
    从第 1 列移到末尾(第 3 列),并加注释说明这个约束。
    
    # 验证
    jsdom 模拟完整页面渲染后:
    - header 第 3 列:<th class="... el-table-column--selection"
      colspan="1" scope="col">含全选 checkbox
    - body 第 3 列:<td class="... el-table-column--selection">
      含 <label class="el-checkbox"> 行复选框
    - 3 行 × 1 checkbox = 3 个勾选框(全部渲染)
    
    # 兼容性
    - 行复选框从视觉上从最左 → 最右;功能(toggleRowSelection / clearSelection /
      selection-change)不变,依赖的是 row 对象不是列顺序
    - 全选 / 清空 / 反选 三个按钮逻辑不依赖列顺序
    
    # 文件清单
    - docs/WORKLOG.md       | +50 工作记录(排查过程 + 4 个 case 验证表)
    - web/static/index.html | +4 / -1 selection 列移位 + 约束注释
    a07db7bb
WORKLOG.md 9.17 KB