5.6 KiB
5.6 KiB
feat(table): 重构行内编辑——无缝编辑器、全表校验态、列宽拖拽、行高亮
概述
重做 G3Table 行内编辑的视觉与交互模型:编辑器「无缝嵌入单元格」(无外间距、 无常驻边框),校验态全表可见(不再依赖点击行),列宽拖拽与行高亮的行为与 fms-vue 的 FmsTable 对齐,并补上缺失的 row-click 事件与 warning 级校验。
组件库(g3soft-libs)
G3Table.vue
- 新增
editorSeamlessprop(默认 true):编辑格无外间距、编辑器无常驻边框, 焦点提示由 td 的:focus-withininset 环承担,hover 用 outline、校验用文字色- 内描边;编辑格底色用
--td-bgc(不透明、主题自适应),仅在未选中时铺在 td 上,避免盖住库的边框渐变与选区底色。
- 内描边;编辑格底色用
- 新增
row-click事件透传(配合受控active-row-key实现「点击行高亮」, 与 fms 的@row-click="(_, row) => activeKey = ..."用法一致)。 active-row-key判定修复:vnode.props里存的是父级模板的原始写法, 需同时匹配 camelCase 与 kebab-case(activeRowKey/active-row-key), 此前只认驼峰导致官方推荐的 kebab 写法完全失效。activeRowKeywatcher 改为同步(去掉await nextTick()),修复编辑态下 点击行时「高亮设上又被清掉」的竞态;仅在未受控时才由内部设置当前行。- 校验态(error / warning)抽取为参数化 mixin,两种等级共用;选择器覆盖 编辑器与展示态 span 两种形态(校验全表可见的关键)。
- 列宽拖拽:恢复
columnsBound门控(未绑v-model:columns时关闭,与 fms 一致);移除实测无效的「内部自存列宽」方案(库会把拖拽结果写进自己的列 对象后直接丢弃,不绑 v-model 根本无法回写)。 - 只读列灰底判据修正:从
tr:has(编辑器)改为「该行有 input/select 编辑器」, 并排除序号列(.seq-column)。此前 checkbox/select 始终挂载导致「除了启用列 全灰」的误判。
utils/column.ts
resolveCustomCell门控新增:配了validate/validateWarning的列, 无论编辑态与否都注入 customCell(走 displayValue)。这是「校验态全表可见」 的根因修复——此前 text/number 列在非编辑态走库原生 td,校验态根本不渲染。
utils/editable.ts
displayValue在非编辑态也求校验态并打状态类(error/warning 全表可见)。- 新增
validateWarning支持:与validate同约定(falsy 通过 / string 有问题), error 优先于 warning;抽editorStatusClass统一 input/select/checkbox 三条路径。 - 修复
resolveEditorStatus的布尔语义:此前if (!result) return ''是 「truthy 报错」,与文档「falsy 通过」正好相反,导致validate: v => v > 0这类最自然写法判定翻转。
select/Select.vue + types.ts
- 新增
seamlessprop:去掉触发器自身描边/圆角/底色,min-height: 0释放 32px 下限;根节点改display:flex; align-items:stretch让触发器撑满、文字 垂直居中(与 input 行为一致)。 - 网格间距从内层 input 上移到触发器(flex 容器),让清除/箭头图标一起内缩, 不再贴到格右边界。
types.ts
TableEditor新增validate、validateWarning、errorStyle字段。TableEmits新增row-click事件。
测试
utils/editable.test.ts:新增 validate / validateWarning 语义、error 优先、 抛错降级、三种编辑器类型共用状态类等 6 组用例(合计 47 个)。e2e/table.spec.ts:新增「校验态全表可见」「校验态落在正确列」「列宽拖拽 需绑 v-model」「点击行进入编辑时高亮跟随」4 条真浏览器断言(合计 26 个)。playground/main.ts:金额列加 error 校验、备注列加 warning 校验,提供三级 状态的真实样例数据。
文档
README.md:补「构建组件库前必须停 ERP dev server」的约定(含真实报错日志)。docs/content/ui/data/table.md、docs/table-design.md、docs/examples/table/editable.vue: 同步 editorSeamless、validate/validateWarning、row-click、只读列灰底的说明。
ERP(g3soft-erp)
web/src/views/ocean/Booking.vue
- 重写订舱单范例:覆盖 text/number/select/checkbox 四种编辑器、error/warning 校验、按行禁用、只读列灰底、当前行高亮、保存时整表校验并定位首个错误格。
- 删除「编辑明细/取消编辑」按钮与 snapshot 回滚机制,页面始终可编辑, 且不默认激活任何一行(编辑目标由用户点击产生)。
- 给 G3Table 绑定
v-model:columns(列宽拖拽的必要条件,与 fms 用法一致)。
README.md
- 补「本地联调组件库:构建时必须先停 dev server」的约定。
验证
pnpm --filter @g3soft/ui typecheck通过pnpm --filter @g3soft/ui exec vitest run src/table→ 124 passedpnpm --filter @g3soft/ui exec playwright test e2e/table.spec.ts→ 26 passed
备注
- 本次改动仅涉及前端。
git diff中出现的 ERP server 端 Java 文件 (GlobalExceptionHandler.java、JwtAuthFilter.java、RequestLoggingFilter.java、 logback-spring.xml 等)及log-viewer.html、_gen.demologs.js等,属于仓库 其它工作流的改动,不在本次提交范围,请勿一并提交。 - 校验态底色比例(error 12% / warning 8%,暗色 8% / 6%)为观感推定的档位, 非实测调优值,可按实际观感调整。