From abcd875731ef41aae0b11a5655c4495279990cbe Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 5 Nov 2026 15:17:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(form):=20=E4=BF=AE=E5=A4=8D=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=90=8C=E7=B1=BB=E5=9E=8B=E8=8A=82=E7=82=B9=E6=97=B6?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=AD=97=E6=AE=B5=E9=85=8D=E7=BD=AE=E4=B8=B2?= =?UTF-8?q?=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MForm 新增 formKey,数据实体切换时只重挂叶子字段,保留 tab 等容器状态;异步 initValue 仅采用最后一次结果 - 代码块 / 数据源方法参数配置改为按 model 派生,避免 setup 期快照残留旧节点配置 - 补充相关单测与 form-props 文档 --- docs/api/form/form-props.md | 12 + packages/editor/src/fields/CodeSelectCol.vue | 26 +- .../src/fields/DataSourceMethodSelect.vue | 23 +- .../src/layouts/props-panel/FormPanel.vue | 3 + .../src/layouts/props-panel/PropsPanel.vue | 7 + .../tests/unit/fields/CodeSelectCol.spec.ts | 16 +- .../fields/DataSourceMethodSelect.spec.ts | 47 ++++ .../layouts/props-panel/PropsPanel.spec.ts | 38 ++- packages/form/src/Form.vue | 31 ++- packages/form/src/containers/Container.vue | 27 ++- packages/form/tests/unit/Form.extra.spec.ts | 224 ++++++++++++++++++ 11 files changed, 422 insertions(+), 32 deletions(-) diff --git a/docs/api/form/form-props.md b/docs/api/form/form-props.md index 858aa400..60c0ffd2 100644 --- a/docs/api/form/form-props.md +++ b/docs/api/form/form-props.md @@ -69,6 +69,18 @@ ``` +## formKey + +- **详情:** 当前表单绑定的数据实体标识(编辑器属性面板里是节点 id)。 + + 配置结构相同但换了数据实体时(例如两个同类型组件之间切换选中),表单树会被复用, + 字段组件在 setup 期从 `model` 派生的本地配置(如事件动作的参数字段)仍属于上一个实体, + 会出现「值来自新节点、配置来自旧节点」的串台。传入 `formKey` 后,值变化时只重挂叶子字段组件; + tab、group-list 等容器保持复用,激活 tab、滚动位置和展开态不会丢失。 + 同一实体的 `initValues` 更新(例如编辑后重新下发节点数据)不会触发重挂。 + +- **类型:** `string | number` + ## lastValues - **详情:** 需对比的值(开启对比模式时传入) diff --git a/packages/editor/src/fields/CodeSelectCol.vue b/packages/editor/src/fields/CodeSelectCol.vue index 9540f070..aa0e8b52 100644 --- a/packages/editor/src/fields/CodeSelectCol.vue +++ b/packages/editor/src/fields/CodeSelectCol.vue @@ -53,7 +53,7 @@