From b04cc6bae370993e822bfe69bb28baabf733f2e9 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Sat, 20 Dec 2025 13:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96FormItemsRenderer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/FormBuilder/FormItemsRenderer.d.ts | 18 +++++++++++++++++- components/FormBuilder/FormItemsRenderer.js | 8 ++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/components/FormBuilder/FormItemsRenderer.d.ts b/components/FormBuilder/FormItemsRenderer.d.ts index 5acb8fd..6c4745f 100644 --- a/components/FormBuilder/FormItemsRenderer.d.ts +++ b/components/FormBuilder/FormItemsRenderer.d.ts @@ -32,6 +32,22 @@ export interface itemsFieldConfig { */ export type FormValues = Record; +/** + * Form.List 操作项 + */ +export interface FormListOperations { + /** 当前表单项的数据字段信息 */ + field: FormListFieldData; + /** 当前项在列表中的索引位置 */ + index: number; + /** 新增方法 */ + add: (defaultValue?: FormValues, insertIndex?: number) => void; + /** 删除方法 */ + remove: (index: number | number[]) => void; + /** 移动方法 */ + move: (from: number, to: number) => void; +} + /** * Form.List 独有的属性 */ @@ -45,7 +61,7 @@ export interface FormListUniqueProps { /** 删除按钮的文本,默认 '删除' */ removeButtonText?: string; /** 表单配置项 */ - options: (field: FormListFieldData, index: number) => FormOption[]; + options: (operations: FormListOperations) => FormOption[]; /** 点击新增按钮时的默认值 */ addDefaultValue?: FormValues; /** 点击新增按钮时插入的索引位置 */ diff --git a/components/FormBuilder/FormItemsRenderer.js b/components/FormBuilder/FormItemsRenderer.js index 63015ac..24cb846 100644 --- a/components/FormBuilder/FormItemsRenderer.js +++ b/components/FormBuilder/FormItemsRenderer.js @@ -223,9 +223,9 @@ const FormItemsRenderer = ({ }; // 获取 listOptions - const getListOptions = (listOptions, field, fieldIndex) => { + const getListOptions = (listOptions, field, fieldIndex, add, remove, move) => { return typeof listOptions === "function" - ? listOptions(field, fieldIndex) + ? listOptions(field, fieldIndex, add, remove, move) : (listOptions ?? []); }; @@ -453,10 +453,10 @@ const FormItemsRenderer = ({ return ( - {(fields, { add, remove }) => ( + {(fields, { add, remove, move }) => ( <> {fields.map((field, fieldIndex) => { - const listOptions = getListOptions(option.formListUniqueProps.options, field, fieldIndex); + const listOptions = getListOptions(option.formListUniqueProps.options, field, fieldIndex, add, remove, move); return ( {listOptions.map((listOption, listIndex) => {