spec.md 4.1 KB

AiTable 选中态与数字字段类型回归修复

status: complete created: 2026-07-18 complexity: 🟡中等

1. 背景与目标

本变更修复两个共享前端基础能力缺陷:

  1. AiTable 在排序列、固定选择列或固定操作列存在时,勾选行的背景被不同单元格背景规则覆盖,导致同一选中行出现断层或颜色不一致。
  2. AiFormItem 只识别 numberinputNumber,页面 editSchema 中的 input-number 会回退为普通 n-input,数字约束和 min/max/step 等属性失效。

完成后应达到:

  • AiTable 选中行在普通列、排序列、固定选择列、固定操作列中使用连续一致的主题色背景,悬停时仍保持选中语义。
  • 页面传入的自定义 row-class-name 不被选中态实现覆盖。
  • AiForm 共享链路兼容 numberinputNumberinput-number 三种历史写法。
  • src/viewseditSchema 统一使用规范写法 number,不再出现 type: 'input-number'

2. 研究结论

2.1 AiTable

  • AiTable.vue 对固定左列、固定操作列、排序列和悬停状态分别设置背景,其中多处使用 !important
  • checked-row-keys 只传给 Naive UI 选择框,表格没有为选中数据行增加统一状态类。
  • 修复应从行状态统一建模,不针对某一列增加局部补丁。

2.2 数字字段

  • AiFormItem.vue 的数字分支仅判断 numberinputNumber
  • AiForm.vue 的必填校验、AiCrudPage.vue 的回填转换、AiCustomQuery.vue 的查询控件识别也分别硬编码数字类型。
  • 当前工作区静态扫描实际发现 20type: 'input-number',分布在 16src/views 文件;用户报告的 37 处、25 个文件应来自更早代码基线,本轮以当前工作区为准全部清理。
  • 项目文档已将 number 作为 AiForm 数字字段标准类型,因此页面统一改为 number;共享组件保留历史别名兼容。

3. 功能要求

  • AiTable 根据当前 checked-row-keys 为行追加 ai-table-row--checked
  • 自定义字符串或函数形式的 row-class-name 与选中态类名合并。
  • 选中态背景覆盖普通、排序、固定左/右列,并支持明暗主题与用户主色。
  • 新增统一数字字段类型判断工具,避免共享组件继续散落硬编码。
  • AiFormItem、AiForm、AiCrudPage、AiCustomQuery 全链路识别 input-number
  • src/views 当前 20 处错误类型统一改为 number
  • 增加纯函数回归测试和静态零残留检查。

4. 影响范围

  • forge-admin-ui/src/components/ai-form/ 共享表格、表单、CRUD 与高级查询组件。
  • forge-admin-ui/src/views/{system,ai,data,message,flow} 中使用数字编辑字段的页面。
  • 不修改后端接口、数据库结构、权限或业务数据。

5. 技术决策

  • 页面配置标准类型固定为 number
  • inputNumberinput-number 作为输入兼容别名,不作为新增页面的推荐写法。
  • AiTable 选中态只由受控的 checked-row-keys 决定,不改变行点击行为,不擅自将任意单元格点击转换为勾选。
  • 背景色使用 color-mix 混合当前主题主色和表格背景,避免固定浅色值破坏暗色主题。

6. 验收标准

  • 先点击可排序列,再勾选任意行,该行所有可见单元格背景连续一致。
  • 横向滚动时,固定选择列和固定操作列保持同一选中背景。
  • 取消勾选后恢复排序、斑马纹和悬停的既有背景行为。
  • type: 'input-number' 能渲染 n-input-number 并接受 min/max/step
  • 当前 src/viewsrg -n "type:\\s*['\"]input-number['\"]" 无输出。
  • 定向 Vitest、目标 ESLint、前端生产构建与差异空白检查通过。

7. 执行结论

  • 共享组件和页面配置修复完成,当前工作区 20 处错误类型已全部归一。
  • 浏览器在 /system/config 完成“排序后勾选行”与数字字段 min: 0 实测,控制台和页面错误均为 0。
  • 详细命令、构建警告与跳过项见 execution-log.md