背景 / Problem
grid/list 批量操作弹窗(BulkActionDialog)的参数控件(BulkActionParam)是个 MVP,ParamField 的 switch 只实现了 6 种控件,导致下面这些字段类型在批量编辑场景下不可用或退化:
代码位置:packages/plugin-grid/src/components/BulkActionDialog.tsx(ParamField,约 429–502 行)。
param.type | 现状 | 问题 |
|---|
lookup / select | 单选 <Select> | 不支持多选。多选人员字段(如"执行责任人 executors",数组)只能选 1 个,且写回会把数组覆盖成单值。 |
date / datetime | 类型注释里声明了,但 switch 无分支 → 落到 default 纯文本框 | 没有日期选择器,只能手打字符串,易错。 |
| 数组/多值确认展示 | formatValue 就是 String(v)(第 405 行) | 数组显示成 a,b,对象显示成 [object Object]。 |
| 必填校验 | paramsValid 只判 undefined/null/''(第 139 行) | 空数组 [] 被当成"已填",多选必填拦不住。 |
| lookup 选项加载 | find(object, { $top: 200 })(第 121 行),label 写死 name/full_name/email/id | 硬上限 200 静默截断、无远程搜索/分页、显示字段不可配。 |
数据链路层没问题:useBulkExecutor 的 buildPatch 直接 spread params(第 136 行),数组值 { executors: [id1,id2] } 本就能正确写进 patch。缺口纯在 UI 控件层。
方案 / Solution
本次 PR 范围(自包含、无需服务端改动)
BulkActionParam 增加 multiple?: boolean,以及 labelField?: string(lookup 显示字段可配)。lookup / select 支持多选:multiple 时渲染多选控件(Popover + Command + Checkbox,带本地搜索),值为字符串数组;buildPatch 无需改。- 补
date / datetime 控件(原生日期选择器),替代退化文本框。 - 修
formatValue:数组/多值在确认页正确显示(用选项 label,而非 String(v))。 - 修
paramsValid:空数组视为未填,多选必填能拦住。 - 补测试:多选 lookup 产出数组、date 渲染、空数组必填拦截、formatValue 数组。
后续单独处理(改动大,依赖服务端 search API)
- lookup 的 200 条硬上限 + 远程搜索 + 分页:需要服务端搜索接口、防抖、分页,单独立项。本 PR 仅在多选控件内提供已加载集合内的本地搜索,不改 200 上限。
影响面
- 仅
packages/plugin-grid(BulkActionDialog.tsx)+ packages/types(BulkActionParam)。 - 向后兼容:不设
multiple 时行为不变。
背景 / Problem
grid/list 批量操作弹窗(
BulkActionDialog)的参数控件(BulkActionParam)是个 MVP,ParamField的 switch 只实现了 6 种控件,导致下面这些字段类型在批量编辑场景下不可用或退化:代码位置:
packages/plugin-grid/src/components/BulkActionDialog.tsx(ParamField,约 429–502 行)。param.typelookup/select<Select>date/datetimedefault纯文本框formatValue就是String(v)(第 405 行)a,b,对象显示成[object Object]。paramsValid只判undefined/null/''(第 139 行)[]被当成"已填",多选必填拦不住。find(object, { $top: 200 })(第 121 行),label 写死name/full_name/email/id数据链路层没问题:
useBulkExecutor的buildPatch直接 spread params(第 136 行),数组值{ executors: [id1,id2] }本就能正确写进 patch。缺口纯在 UI 控件层。方案 / Solution
本次 PR 范围(自包含、无需服务端改动)
BulkActionParam增加multiple?: boolean,以及labelField?: string(lookup 显示字段可配)。lookup/select支持多选:multiple时渲染多选控件(Popover + Command + Checkbox,带本地搜索),值为字符串数组;buildPatch无需改。date/datetime控件(原生日期选择器),替代退化文本框。formatValue:数组/多值在确认页正确显示(用选项 label,而非String(v))。paramsValid:空数组视为未填,多选必填能拦住。后续单独处理(改动大,依赖服务端 search API)
影响面
packages/plugin-grid(BulkActionDialog.tsx)+packages/types(BulkActionParam)。multiple时行为不变。