|
@@ -1,15 +1,25 @@
|
|
|
import { v4 } from 'uuid'
|
|
|
import {
|
|
|
- ConditionMode,
|
|
|
NodeDataStruct,
|
|
|
NodePortStruct,
|
|
|
NodeStruct,
|
|
|
NodeType,
|
|
|
+ NodeTypeObj,
|
|
|
} from '@/views/workflow/types'
|
|
|
import startNodeDefault from '@/views/workflow/instance/start/default'
|
|
|
import answerNodeDefault from '@/views/workflow/instance/answer/default'
|
|
|
+// @ts-ignore
|
|
|
+import answerImg from '@/assets/images/workflow/answer.png'
|
|
|
import ifElseNodeDefault from '@/views/workflow/instance/if-else/default'
|
|
|
+// @ts-ignore
|
|
|
+import ifElseImg from '@/assets/images/workflow/if-else.png'
|
|
|
+import llmNodeDefault from '@/views/workflow/instance/llm/default'
|
|
|
+// @ts-ignore
|
|
|
+import llmImg from '@/assets/images/workflow/llm.svg'
|
|
|
import testNodeDefault from '@/views/workflow/instance/test/default'
|
|
|
+// @ts-ignore
|
|
|
+import testImg from '@/assets/images/workflow/test.png'
|
|
|
+import { defineAsyncComponent } from 'vue'
|
|
|
|
|
|
export const lineStyle = {
|
|
|
stroke: '#bcbcbc',
|
|
@@ -22,64 +32,124 @@ export const lineActiveStyle = {
|
|
|
targetMarker: null,
|
|
|
}
|
|
|
|
|
|
-export const nodeDefault = {
|
|
|
- [NodeType.Test]: () =>
|
|
|
- <NodeStruct>{
|
|
|
- x: 0,
|
|
|
- y: 0,
|
|
|
- data: <NodeDataStruct>{
|
|
|
- id: v4(),
|
|
|
- title: '测试节点',
|
|
|
- desc: '',
|
|
|
- ...testNodeDefault.defaultValue(),
|
|
|
+export const nodeSources = {
|
|
|
+ [NodeType.Start]: {
|
|
|
+ defaultValue: () =>
|
|
|
+ <NodeStruct>{
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ data: <NodeDataStruct>{
|
|
|
+ id: v4(),
|
|
|
+ title: NodeTypeObj[NodeType.Start].title,
|
|
|
+ desc: '',
|
|
|
+ ...startNodeDefault.defaultValue(),
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- [NodeType.Start]: () =>
|
|
|
- <NodeStruct>{
|
|
|
- x: 0,
|
|
|
- y: 0,
|
|
|
- data: <NodeDataStruct>{
|
|
|
- id: v4(),
|
|
|
- title: '开始',
|
|
|
- desc: '',
|
|
|
- ...startNodeDefault.defaultValue(),
|
|
|
+ isAdd: false,
|
|
|
+ nodeCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/start/node/index.vue'),
|
|
|
+ ),
|
|
|
+ panelCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/start/panel/index.vue'),
|
|
|
+ ),
|
|
|
+ },
|
|
|
+ [NodeType.Answer]: {
|
|
|
+ defaultValue: () =>
|
|
|
+ <NodeStruct>{
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ data: <NodeDataStruct>{
|
|
|
+ id: v4(),
|
|
|
+ title: NodeTypeObj[NodeType.Answer].title,
|
|
|
+ desc: '',
|
|
|
+ ...answerNodeDefault.defaultValue(),
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- [NodeType.Answer]: () =>
|
|
|
- <NodeStruct>{
|
|
|
- x: 0,
|
|
|
- y: 0,
|
|
|
- data: <NodeDataStruct>{
|
|
|
- id: v4(),
|
|
|
- title: '直接回复',
|
|
|
- desc: '',
|
|
|
- ...answerNodeDefault.defaultValue(),
|
|
|
+ isAdd: true,
|
|
|
+ icon: answerImg,
|
|
|
+ nodeCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/answer/node/index.vue'),
|
|
|
+ ),
|
|
|
+ panelCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/answer/panel/index.vue'),
|
|
|
+ ),
|
|
|
+ },
|
|
|
+ [NodeType.LLM]: {
|
|
|
+ defaultValue: () =>
|
|
|
+ <NodeStruct>{
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ data: <NodeDataStruct>{
|
|
|
+ id: v4(),
|
|
|
+ title: NodeTypeObj[NodeType.LLM].title,
|
|
|
+ desc: '',
|
|
|
+ ...llmNodeDefault.defaultValue(),
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- [NodeType.IfElse]: () =>
|
|
|
- <NodeStruct>{
|
|
|
- x: 0,
|
|
|
- y: 0,
|
|
|
- data: <NodeDataStruct>{
|
|
|
- id: v4(),
|
|
|
- title: '条件分支',
|
|
|
- desc: '',
|
|
|
- ...ifElseNodeDefault.defaultValue(),
|
|
|
- ports: <NodePortStruct[]>[
|
|
|
- {
|
|
|
- id: v4(),
|
|
|
- ...ifElseNodeDefault.caseValue(),
|
|
|
- },
|
|
|
- {
|
|
|
- id: v4(),
|
|
|
- isElse: true,
|
|
|
- },
|
|
|
- ],
|
|
|
+ isAdd: true,
|
|
|
+ icon: llmImg,
|
|
|
+ nodeCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/llm/node/index.vue'),
|
|
|
+ ),
|
|
|
+ panelCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/llm/panel/index.vue'),
|
|
|
+ ),
|
|
|
+ },
|
|
|
+ [NodeType.IfElse]: {
|
|
|
+ defaultValue: () =>
|
|
|
+ <NodeStruct>{
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ data: <NodeDataStruct>{
|
|
|
+ id: v4(),
|
|
|
+ title: NodeTypeObj[NodeType.IfElse].title,
|
|
|
+ desc: '',
|
|
|
+ ...ifElseNodeDefault.defaultValue(),
|
|
|
+ ports: <NodePortStruct[]>[
|
|
|
+ {
|
|
|
+ id: v4(),
|
|
|
+ ...ifElseNodeDefault.caseValue(),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: v4(),
|
|
|
+ isElse: true,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
+ isAdd: true,
|
|
|
+ icon: ifElseImg,
|
|
|
+ nodeCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/if-else/node/index.vue'),
|
|
|
+ ),
|
|
|
+ panelCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/if-else/panel/index.vue'),
|
|
|
+ ),
|
|
|
+ },
|
|
|
+ [NodeType.Test]: {
|
|
|
+ defaultValue: () =>
|
|
|
+ <NodeStruct>{
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ data: <NodeDataStruct>{
|
|
|
+ id: v4(),
|
|
|
+ title: NodeTypeObj[NodeType.Test].title,
|
|
|
+ desc: '',
|
|
|
+ ...testNodeDefault.defaultValue(),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ isAdd: true,
|
|
|
+ icon: testImg,
|
|
|
+ nodeCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/test/node/index.vue'),
|
|
|
+ ),
|
|
|
+ panelCom: defineAsyncComponent(
|
|
|
+ () => import('@/views/workflow/instance/test/panel/index.vue'),
|
|
|
+ ),
|
|
|
+ },
|
|
|
}
|
|
|
export const getNodeDefault = (type: NodeType) => {
|
|
|
- const node = nodeDefault[type]()
|
|
|
+ const node = nodeSources[type].defaultValue()
|
|
|
node.id = node.data.id
|
|
|
node.data.type = type
|
|
|
return node
|