From cc92b6e59caf7de325cb75b1d91e370b48821694 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Fri, 24 Apr 2026 16:20:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(form):=20formList=E6=94=AF=E6=8C=81formLis?= =?UTF-8?q?t=E6=97=A0=E9=99=90=E5=B5=8C=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormBuilder/FormItemsRenderer.js | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/components/FormBuilder/FormItemsRenderer.js b/src/components/FormBuilder/FormItemsRenderer.js index 62c9a5c..c7b0f64 100644 --- a/src/components/FormBuilder/FormItemsRenderer.js +++ b/src/components/FormBuilder/FormItemsRenderer.js @@ -257,8 +257,8 @@ const FormItemsRenderer = ({ const componentProps = getComponentProps(option); const itemsFieldKey = getItemsFieldKey(option); /** @type {string | Function} */ - const render = option.render || FORM_ITEM_RENDER_ENUM.INPUT; - const placeholder = option.placeholder || `请${[FORM_ITEM_RENDER_ENUM.INPUT, FORM_ITEM_RENDER_ENUM.TEXTAREA, FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, FORM_ITEM_RENDER_ENUM.NUMBER, FORM_ITEM_RENDER_ENUM.INTEGER].includes(render) ? "输入" : "选择"}${option.label}`; + const render = option.render ?? FORM_ITEM_RENDER_ENUM.INPUT; + const placeholder = option.placeholder ?? `请${[FORM_ITEM_RENDER_ENUM.INPUT, FORM_ITEM_RENDER_ENUM.TEXTAREA, FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, FORM_ITEM_RENDER_ENUM.NUMBER, FORM_ITEM_RENDER_ENUM.INTEGER].includes(render) ? "输入" : "选择"}${option.label}`; switch (render) { case FORM_ITEM_RENDER_ENUM.INPUT: @@ -442,6 +442,8 @@ const FormItemsRenderer = ({ labelCol={col.labelCol} wrapperCol={col.wrapperCol} preserve={false} + required={renderLabel(option) === " " ? false : getRequired(option.required)} + colon={renderLabel(option) !== " "} {...formItemProps} > {renderFormControl(option)} @@ -490,7 +492,7 @@ const FormItemsRenderer = ({ }; // 渲染 Form.List - const renderFormList = (option, index, col, style) => { + const renderFormList = ({ option, index, col, style }) => { const formListUniqueProps = getFormListUniqueProps(option); const componentProps = getComponentProps(option); @@ -519,9 +521,15 @@ const FormItemsRenderer = ({ if (otherTypeItem) return otherTypeItem; - // 如果是最后一个表单项,则在其后添加操作按钮 - // 这样可以确保每个表单项组都有添加/删除按钮 - if (listIndex === listOptions.length - 1) { + if (listOption.render === FORM_ITEM_RENDER_ENUM.FORM_LIST) + return renderFormList(params); + + // 判断下一个是否是嵌套的 FormList,如果是则在当前项后添加按钮 + const nextOption = listOptions[listIndex + 1]; + const isNextNestedFormList = nextOption && nextOption.render === FORM_ITEM_RENDER_ENUM.FORM_LIST; + + // 如果是最后一个表单项,或者下一个是嵌套的 FormList,则在其后添加操作按钮 + if (listIndex === listOptions.length - 1 || isNextNestedFormList) { return (
@@ -558,7 +567,7 @@ const FormItemsRenderer = ({ ) ) : ( - // 第一行显示添加按钮 + // 第一行显示添加按钮 formListUniqueProps.showAddButton && (