From 52dd41ec4f20d2d4a1bbd538b3970abdf9cd9a78 Mon Sep 17 00:00:00 2001 From: panxinying Date: Wed, 2 Sep 2026 15:32:57 +0800 Subject: [PATCH] feat: form node --- ui/src/components/conversation/index.ts | 1 + .../items/KnowledgeConstructor.vue | 88 ++++- ui/src/components/mk-dynamics-form/index.vue | 3 +- ui/src/components/mk-dynamics-form/type.ts | 1 + ui/src/workflow-canvas/component/NodeMenu.vue | 1 + .../workflow-canvas/icons/form-node-icon.vue | 6 + ui/src/workflow-canvas/index.vue | 3 + .../workflow-canvas/nodes/form-node/index.ts | 11 + .../workflow-canvas/nodes/form-node/index.vue | 309 ++++++++++++++++++ 9 files changed, 415 insertions(+), 8 deletions(-) create mode 100644 ui/src/workflow-canvas/icons/form-node-icon.vue create mode 100644 ui/src/workflow-canvas/nodes/form-node/index.ts create mode 100644 ui/src/workflow-canvas/nodes/form-node/index.vue diff --git a/ui/src/components/conversation/index.ts b/ui/src/components/conversation/index.ts index 9191217692e..40a23fac959 100644 --- a/ui/src/components/conversation/index.ts +++ b/ui/src/components/conversation/index.ts @@ -94,6 +94,7 @@ const FORM = (prev: any, chunk: any) => { id: chunk.id ?? prev.id, content: (prev.content || '') + (chunk.content || ''), form_field_list: chunk.form_field_list ?? prev.form_field_list, + form_content_format: chunk.form_content_format ?? prev.form_content_format, form_data: chunk.form_data ?? prev.form_data, is_submit: chunk.is_submit ?? prev.is_submit, position: chunk.position ?? prev.position, diff --git a/ui/src/components/mk-dynamics-form/constructor/items/KnowledgeConstructor.vue b/ui/src/components/mk-dynamics-form/constructor/items/KnowledgeConstructor.vue index 09cc2497563..19a880f3436 100644 --- a/ui/src/components/mk-dynamics-form/constructor/items/KnowledgeConstructor.vue +++ b/ui/src/components/mk-dynamics-form/constructor/items/KnowledgeConstructor.vue @@ -1,8 +1,12 @@ diff --git a/ui/src/workflow-canvas/index.vue b/ui/src/workflow-canvas/index.vue index 0711bac0801..9b822083552 100644 --- a/ui/src/workflow-canvas/index.vue +++ b/ui/src/workflow-canvas/index.vue @@ -10,6 +10,7 @@ import { initDefaultShortcut } from '@/workflow-canvas/core/shortcut' import { disconnectAll, getTeleport } from '@/workflow-canvas/core/teleport' import type { WorkflowNodeModel } from '@/workflow-canvas/core/workflow-node' import Dagre from '@/workflow-canvas/plugins/dagre' +import modelAPI from '@/api/admin/workspace/model/model' import { WorkflowMode, WorkflowNodeType } from '@/workflow-canvas/types' import { type ShapeItem } from '@/workflow-canvas/types' defineOptions({ name: 'MkWorkflow' }) @@ -64,6 +65,8 @@ function renderGraphData(data: LogicFlow.GraphConfigData = props.data ?? {}) { workflowMode: workflow_mode, loopWorkflowMode: loop_workflow_mode, apiType: 'workspace', + getSelectModelList: (params: { model_type: string }) => modelAPI.getModelList(params), + getModelParamsForm: (modelId: string) => modelAPI.getModelParamsForm(modelId), }) lf.value.graphModel.eventCenter.on('delete_edge', (edgeIds: string[]) => { edgeIds.forEach((edgeId) => lf.value?.deleteEdge(edgeId)) diff --git a/ui/src/workflow-canvas/nodes/form-node/index.ts b/ui/src/workflow-canvas/nodes/form-node/index.ts new file mode 100644 index 00000000000..2f948d84ba7 --- /dev/null +++ b/ui/src/workflow-canvas/nodes/form-node/index.ts @@ -0,0 +1,11 @@ +import FormNodeVue from './index.vue' +import { WorkflowNodeModel, WorkflowNodeView } from '@/workflow-canvas/core/workflow-node' +import { WorkflowNodeType } from '@/workflow-canvas/types' + +class FormNodeView extends WorkflowNodeView { + constructor(props: ConstructorParameters[0]) { + super(props, FormNodeVue) + } +} + +export default { type: WorkflowNodeType.FormNode, model: WorkflowNodeModel, view: FormNodeView } diff --git a/ui/src/workflow-canvas/nodes/form-node/index.vue b/ui/src/workflow-canvas/nodes/form-node/index.vue new file mode 100644 index 00000000000..18410b13a84 --- /dev/null +++ b/ui/src/workflow-canvas/nodes/form-node/index.vue @@ -0,0 +1,309 @@ + +