From 4023d7aeb219d9214bd354495c6fdcb6e4528256 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Mon, 3 Aug 2026 14:22:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor(form-builder):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE=E6=98=BE=E7=A4=BA=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改查找最后一个可显示按钮项的方法,排除特殊项和嵌套 FormList - 简化判断逻辑,移除对下一个项的复杂条件判断 - 删除多余的 isShow 函数及其相关调用 - 在最后一个普通可见表单项后添加操作按钮 - 清理部分依赖相关属性,减少不必要的更新机制 --- .../FormBuilder/FormItemsRenderer.js | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/components/FormBuilder/FormItemsRenderer.js b/src/components/FormBuilder/FormItemsRenderer.js index e352830..c7de69e 100644 --- a/src/components/FormBuilder/FormItemsRenderer.js +++ b/src/components/FormBuilder/FormItemsRenderer.js @@ -578,31 +578,19 @@ const FormItemsRenderer = ({ if (getIsDynamicFormItem(listOption, formItemProps)) return renderDynamicFormItem(params); - // 判断一个项是否需要显示按钮(不是 onlyForLabel 且不是隐藏的) - const isShow = (opt) => { - return !getHidden(opt.hidden) && !opt.onlyForLabel; - }; - - // 从后往前找,找到第一个需要显示按钮的项的索引 - const findLastShowIndex = () => { + // 从后往前查找最后一个普通可见表单项,特殊项不允许承载操作按钮。 + const findLastButtonIndex = () => { for (let i = listOptions.length - 1; i >= 0; i--) { const opt = listOptions[i]; - if (opt.render === FORM_ITEM_RENDER_ENUM.FORM_LIST) - return i; - if (isShow(opt)) + if (!getHidden(opt.hidden) && !opt.onlyForLabel && opt.render !== FORM_ITEM_RENDER_ENUM.FORM_LIST) { return i; + } } return -1; }; - // 判断下一个是否是嵌套的 FormList,或者是 onlyForLabel/hidden 项 - const nextOption = listOptions[listIndex + 1]; - const isNextNestedFormList = nextOption && nextOption.render === FORM_ITEM_RENDER_ENUM.FORM_LIST; - const isNextNoShow = nextOption && !isShow(nextOption); - - // 如果是最后一个需要显示按钮的项,或者下一个是嵌套的 FormList,或者下一个不需要按钮,则在其后添加操作按钮 - const lastShowIndex = findLastShowIndex(); - if (listIndex === lastShowIndex || isNextNestedFormList || isNextNoShow) { + const lastButtonIndex = findLastButtonIndex(); + if (listIndex === lastButtonIndex) { delete formItemProps.dependencies; delete formItemProps.shouldUpdate;