Skip to content

fix(grid): 批量编辑弹窗字段控件补齐(多选 lookup/select + date/datetime + 确认展示/校验) #2185

Description

@baozhoutao

背景 / 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 静默截断、无远程搜索/分页、显示字段不可配。

数据链路层没问题:useBulkExecutorbuildPatch 直接 spread params(第 136 行),数组值 { executors: [id1,id2] } 本就能正确写进 patch。缺口纯在 UI 控件层。

方案 / Solution

本次 PR 范围(自包含、无需服务端改动)

  1. BulkActionParam 增加 multiple?: boolean,以及 labelField?: string(lookup 显示字段可配)。
  2. lookup / select 支持多选:multiple 时渲染多选控件(Popover + Command + Checkbox,带本地搜索),值为字符串数组;buildPatch 无需改。
  3. date / datetime 控件(原生日期选择器),替代退化文本框。
  4. formatValue:数组/多值在确认页正确显示(用选项 label,而非 String(v))。
  5. paramsValid:空数组视为未填,多选必填能拦住。
  6. 补测试:多选 lookup 产出数组、date 渲染、空数组必填拦截、formatValue 数组。

后续单独处理(改动大,依赖服务端 search API)

  • lookup 的 200 条硬上限 + 远程搜索 + 分页:需要服务端搜索接口、防抖、分页,单独立项。本 PR 仅在多选控件内提供已加载集合内的本地搜索,不改 200 上限。

影响面

  • packages/plugin-grid(BulkActionDialog.tsx)+ packages/types(BulkActionParam)。
  • 向后兼容:不设 multiple 时行为不变。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions