显示条件
隐藏条件
-
-
满足
+
+ 符合以下
-
-
+
+
- 条件
+ 条件
-
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/ui/src/workflow-canvas/WORKFLOW_README.md b/ui/src/workflow-canvas/WORKFLOW_README.md
index d711bf94631..2d18744843a 100644
--- a/ui/src/workflow-canvas/WORKFLOW_README.md
+++ b/ui/src/workflow-canvas/WORKFLOW_README.md
@@ -128,6 +128,14 @@ Vue Teleport 节点继承页面上下文;画布核心不负责模型参数接
保留失效引用检查;节点级 `validate()` 统一调用表单校验。所有非登录表单仅使用 `@submit.prevent`,
保存或添加由按钮触发。
+表单收集节点的 `component/form-setting/FormSettingTable` 通过 `v-model` 编辑动态表单的
+`FormField[]`,负责增删改、排序和重名检查;`FormFieldDialog` 复用 `MkDynamicsFormConstructor`,
+通过 `submit(data, index?)` 提交,由表格写回后调用 `close()`,关闭动画结束时重置编辑状态。
+节点入口负责旧数据默认值补齐、输出字段同步、下游引用清理和显隐条件引用校验;上游字段选项与
+节点 ID、名称通过 Props 传入,弹窗只补充当前编辑字段之前的表单字段,不直接读取节点模型。
+当前表单的显隐引用使用真实节点 ID,与 v2 的引用路径一致;保留 `self` 标记供动态表单从本地值取数。
+节点初始化时将旧 `self-form` 引用转换为当前节点 ID,并为 v2 的当前节点引用补齐 `self`,不改动上游引用。
+
AI 对话节点的提示词、历史记录、视觉理解和输出思考表单直接在节点入口维护,统一使用全局
`MdEditorMagnify` 和节点表单样式;AI 提示词生成与思考过程配置仍使用独立弹窗。
问题优化、图片理解和视频理解节点的系统提示词与用户提示词,以及图片、文生视频和图生视频
diff --git a/ui/src/workflow-canvas/config/node-data.ts b/ui/src/workflow-canvas/config/node-data.ts
index ace1b8a5fbb..24040239bd0 100644
--- a/ui/src/workflow-canvas/config/node-data.ts
+++ b/ui/src/workflow-canvas/config/node-data.ts
@@ -231,9 +231,7 @@ export const formNode = {
type: WorkflowNodeType.FormNode,
text: '在问答过程中用于收集用户信息,可以根据收集到表单数据执行后续流程',
label: '表单收集',
- height: 252,
properties: {
- width: 600,
stepName: '表单收集',
node_data: {
is_result: true,
@@ -251,7 +249,7 @@ export const variableAssignNode = {
type: WorkflowNodeType.VariableAssignNode,
text: '更新全局变量的值',
label: '变量赋值',
- properties: { stepName: '变量赋值', width: 455, config: {} },
+ properties: { stepName: '变量赋值', config: {} },
}
/* 变量聚合 */
@@ -267,7 +265,7 @@ export const variableSplittingNode = {
type: WorkflowNodeType.VariableSplittingNode,
text: '通过配置JSON Path 表达式,对输入的 JSON 格式变量进行解析和拆分',
label: '变量拆分',
- properties: { stepName: '变量拆分', width: 455, config: { fields: [{ label: '结果', value: 'result' }] } },
+ properties: { stepName: '变量拆分', config: { fields: [{ label: '结果', value: 'result' }] } },
}
/* 参数提取 */
@@ -275,7 +273,7 @@ export const parameterExtractionNode = {
type: WorkflowNodeType.ParameterExtractionNode,
text: '利用 AI 模型提取结构化参数',
label: '参数提取',
- properties: { stepName: '参数提取', width: 455, config: { fields: [{ label: '结果', value: 'result' }] } },
+ properties: { stepName: '参数提取', config: { fields: [{ label: '结果', value: 'result' }] } },
}
/* 多路召回 */
diff --git a/ui/src/workflow-canvas/icons/form-node-icon.vue b/ui/src/workflow-canvas/icons/form-node-icon.vue
index 7a220814144..c78df116a92 100644
--- a/ui/src/workflow-canvas/icons/form-node-icon.vue
+++ b/ui/src/workflow-canvas/icons/form-node-icon.vue
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/ui/src/workflow-canvas/nodes/base-node/component/user-input/index.vue b/ui/src/workflow-canvas/nodes/base-node/component/user-input/index.vue
index a7e7ebd2c4e..705c837d44a 100644
--- a/ui/src/workflow-canvas/nodes/base-node/component/user-input/index.vue
+++ b/ui/src/workflow-canvas/nodes/base-node/component/user-input/index.vue
@@ -146,14 +146,7 @@ function submitSetting() {
-
+
取消
{{ editingIndex === undefined ? '添加' : '保存' }}
diff --git a/ui/src/workflow-canvas/nodes/base-node/index.vue b/ui/src/workflow-canvas/nodes/base-node/index.vue
index 5a0bcd41d40..edc0aad584c 100644
--- a/ui/src/workflow-canvas/nodes/base-node/index.vue
+++ b/ui/src/workflow-canvas/nodes/base-node/index.vue
@@ -250,41 +250,39 @@ onMounted(() => {
-
+
语音输入
自动发送
-
-
-
- 默认模型
- 自定义
-
-
-
-
+
+
+ 默认模型
+ 自定义
+
+
+
-
+
语音播放
自动播放
@@ -292,31 +290,29 @@ onMounted(() => {
-
-
-
- 浏览器播放(免费)
- 默认模型
- 自定义
-
-
-
-
+
+
+ 浏览器播放(免费)
+ 默认模型
+ 自定义
+
+
+
diff --git a/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormFieldDialog.vue b/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormFieldDialog.vue
new file mode 100644
index 00000000000..ac09085de59
--- /dev/null
+++ b/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormFieldDialog.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ 取消
+ {{ currentIndex === undefined ? '添加' : '保存' }}
+
+
+
diff --git a/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormSettingTable.vue b/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormSettingTable.vue
new file mode 100644
index 00000000000..46dcd00d7ec
--- /dev/null
+++ b/ui/src/workflow-canvas/nodes/form-node/component/form-setting/FormSettingTable.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+ 表单配置
+
+
+
+
+
+
+
+
+ {{ row.field }}
+
+
+
+
+ {{
+ row.label.label
+ }}
+ {{ row.label }}
+
+
+
+
+ {{ getTypeLabel(row.input_type) }}
+
+
+
+
+ {{ getDefaultValue(row) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/workflow-canvas/nodes/form-node/index.ts b/ui/src/workflow-canvas/nodes/form-node/index.ts
index 2f948d84ba7..90a63bf82bf 100644
--- a/ui/src/workflow-canvas/nodes/form-node/index.ts
+++ b/ui/src/workflow-canvas/nodes/form-node/index.ts
@@ -8,4 +8,12 @@ class FormNodeView extends WorkflowNodeView {
}
}
-export default { type: WorkflowNodeType.FormNode, model: WorkflowNodeModel, view: FormNodeView }
+class FormNodeModel extends WorkflowNodeModel {
+ override setAttributes() {
+ super.setAttributes()
+ this.width = 680
+ this.properties.width = 680
+ }
+}
+
+export default { type: WorkflowNodeType.FormNode, model: FormNodeModel, view: FormNodeView }
diff --git a/ui/src/workflow-canvas/nodes/form-node/index.vue b/ui/src/workflow-canvas/nodes/form-node/index.vue
index 3bdb94904d6..1b8626e5b3d 100644
--- a/ui/src/workflow-canvas/nodes/form-node/index.vue
+++ b/ui/src/workflow-canvas/nodes/form-node/index.vue
@@ -1,288 +1,129 @@
-
-
- 节点设置
-
-
-
-
-
- 表单内容*
-
- 表单内容中可使用 { form } 占位符来动态插入表单
-
-
-
-
-
-
-
-
-
-
-
表单设置
-
-
- 添加
-
-
-
-
-
-
-
- {{ row.field }}
-
-
-
-
- {{ getFieldLabel(row) }}
-
-
-
-
- {{ getTypeLabel(row.input_type) }}
-
-
-
-
- {{ getDefaultValue(row) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
+
+
+
+ 节点设置
+
+
+
+
+
+ 表单输出内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/workflow-canvas/nodes/variable-aggregation-node/index.ts b/ui/src/workflow-canvas/nodes/variable-aggregation-node/index.ts
index 42bc4ae86df..0dba856be7d 100644
--- a/ui/src/workflow-canvas/nodes/variable-aggregation-node/index.ts
+++ b/ui/src/workflow-canvas/nodes/variable-aggregation-node/index.ts
@@ -10,8 +10,9 @@ class VariableAggregationNodeView extends WorkflowNodeView {
class VariableAggregationNodeModel extends WorkflowNodeModel {
setAttributes() {
- this.width = Number(this.properties.width ?? 450)
- this.height = Number(this.properties.height ?? 300)
+ super.setAttributes()
+ this.width = 455
+ this.properties.width = 455
this.text.editable = false
}
}