diff --git a/src/@core/utils/workflow.ts b/src/@core/utils/workflow.ts index 7fabee6d..4f9acd27 100644 --- a/src/@core/utils/workflow.ts +++ b/src/@core/utils/workflow.ts @@ -1,13 +1,12 @@ import { useVueFlow } from '@vue-flow/core' import { ref, watch } from 'vue' -let id = 0 - /** * @returns {string} - A unique id. */ function getId() { - return `act_${id++}` + // 生成以act_开头的唯一id + return 'act_' + Math.random().toString(36).substr(2, 9) } /** diff --git a/src/components/dialog/WorkflowActionsDialog.vue b/src/components/dialog/WorkflowActionsDialog.vue index 09345e87..17e47ac0 100644 --- a/src/components/dialog/WorkflowActionsDialog.vue +++ b/src/components/dialog/WorkflowActionsDialog.vue @@ -6,8 +6,8 @@ import useDragAndDrop from '@core/utils/workflow' import { Workflow } from '@/api/types' import { useToast } from 'vue-toast-notification' import api from '@/api' -import Sidebar from '../workflow/Sidebar.vue' -import DropzoneBackground from '../workflow/DropzoneBackground.vue' +import WorkflowSidebar from '@/layouts/components/WorkflowSidebar.vue' +import DropzoneBackground from '@/layouts/components/DropzoneBackground.vue' const { onConnect, addEdges, nodes, edges } = useVueFlow() @@ -15,6 +15,32 @@ const { onDragOver, onDrop, onDragLeave, isDragOver } = useDragAndDrop() onConnect(addEdges) +// 自定义节点类型 +const nodeTypes: Record = ref({}) + +// 自动扫描目录下所有的 .vue 文件 +const components = import.meta.glob('../workflow/*Action.vue') + +// 动态加载某个组件 +const loadComponent = async (componentName: string) => { + const component = components[`../workflow/${componentName}.vue`] + if (component) { + return ((await component()) as any).default + } + throw new Error(`组件 ${componentName} 未找到`) +} + +// 将所有components中的组件加载到nodeTypes中 +for (const path in components) { + const componentName = path.match(/\.\/workflow\/(.*).vue$/)?.[1] + if (!componentName) { + continue + } + loadComponent(componentName).then(component => { + nodeTypes.value[componentName] = markRaw(component) + }) +} + // 定义输入参数 const props = defineProps({ workflow: Object as PropType, @@ -80,6 +106,7 @@ onMounted(() => { { > - + diff --git a/src/components/workflow/AddDownloadAction.vue b/src/components/workflow/AddDownloadAction.vue new file mode 100644 index 00000000..a764b71c --- /dev/null +++ b/src/components/workflow/AddDownloadAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/AddSubscribeAction.vue b/src/components/workflow/AddSubscribeAction.vue new file mode 100644 index 00000000..f660602e --- /dev/null +++ b/src/components/workflow/AddSubscribeAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FetchDownloadsAction.vue b/src/components/workflow/FetchDownloadsAction.vue new file mode 100644 index 00000000..7f65b007 --- /dev/null +++ b/src/components/workflow/FetchDownloadsAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FetchMediasAction.vue b/src/components/workflow/FetchMediasAction.vue new file mode 100644 index 00000000..77cea884 --- /dev/null +++ b/src/components/workflow/FetchMediasAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FetchRssAction.vue b/src/components/workflow/FetchRssAction.vue new file mode 100644 index 00000000..733c7993 --- /dev/null +++ b/src/components/workflow/FetchRssAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FetchTorrentsAction.vue b/src/components/workflow/FetchTorrentsAction.vue new file mode 100644 index 00000000..ca2ed15b --- /dev/null +++ b/src/components/workflow/FetchTorrentsAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FilterMediasAction.vue b/src/components/workflow/FilterMediasAction.vue new file mode 100644 index 00000000..362a6771 --- /dev/null +++ b/src/components/workflow/FilterMediasAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/FilterTorrentsAction.vue b/src/components/workflow/FilterTorrentsAction.vue new file mode 100644 index 00000000..1f255334 --- /dev/null +++ b/src/components/workflow/FilterTorrentsAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/ScrapeFileAction.vue b/src/components/workflow/ScrapeFileAction.vue new file mode 100644 index 00000000..a6354824 --- /dev/null +++ b/src/components/workflow/ScrapeFileAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/SendEventAction.vue b/src/components/workflow/SendEventAction.vue new file mode 100644 index 00000000..b187898c --- /dev/null +++ b/src/components/workflow/SendEventAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/SendMessageAction.vue b/src/components/workflow/SendMessageAction.vue new file mode 100644 index 00000000..7c79eaf7 --- /dev/null +++ b/src/components/workflow/SendMessageAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/TransferFileAction.vue b/src/components/workflow/TransferFileAction.vue new file mode 100644 index 00000000..a54cbac2 --- /dev/null +++ b/src/components/workflow/TransferFileAction.vue @@ -0,0 +1,22 @@ + + diff --git a/src/components/workflow/DropzoneBackground.vue b/src/layouts/components/DropzoneBackground.vue similarity index 100% rename from src/components/workflow/DropzoneBackground.vue rename to src/layouts/components/DropzoneBackground.vue diff --git a/src/components/workflow/Sidebar.vue b/src/layouts/components/WorkflowSidebar.vue similarity index 100% rename from src/components/workflow/Sidebar.vue rename to src/layouts/components/WorkflowSidebar.vue