From b467bb6c56944f4404a1ffc707f2456f2cce5545 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 27 Feb 2025 13:55:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=8A=A8=E6=80=81=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=8A=82=E7=82=B9=E7=B1=BB=E5=9E=8B=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E6=97=A7=E7=9A=84=E4=BE=A7=E8=BE=B9=E6=A0=8F=E5=92=8C?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/@core/utils/workflow.ts | 5 ++- .../dialog/WorkflowActionsDialog.vue | 33 +++++++++++++++++-- src/components/workflow/AddDownloadAction.vue | 22 +++++++++++++ .../workflow/AddSubscribeAction.vue | 22 +++++++++++++ .../workflow/FetchDownloadsAction.vue | 22 +++++++++++++ src/components/workflow/FetchMediasAction.vue | 22 +++++++++++++ src/components/workflow/FetchRssAction.vue | 22 +++++++++++++ .../workflow/FetchTorrentsAction.vue | 22 +++++++++++++ .../workflow/FilterMediasAction.vue | 22 +++++++++++++ .../workflow/FilterTorrentsAction.vue | 22 +++++++++++++ src/components/workflow/ScrapeFileAction.vue | 22 +++++++++++++ src/components/workflow/SendEventAction.vue | 22 +++++++++++++ src/components/workflow/SendMessageAction.vue | 22 +++++++++++++ .../workflow/TransferFileAction.vue | 22 +++++++++++++ .../components}/DropzoneBackground.vue | 0 .../components/WorkflowSidebar.vue} | 0 16 files changed, 296 insertions(+), 6 deletions(-) create mode 100644 src/components/workflow/AddDownloadAction.vue create mode 100644 src/components/workflow/AddSubscribeAction.vue create mode 100644 src/components/workflow/FetchDownloadsAction.vue create mode 100644 src/components/workflow/FetchMediasAction.vue create mode 100644 src/components/workflow/FetchRssAction.vue create mode 100644 src/components/workflow/FetchTorrentsAction.vue create mode 100644 src/components/workflow/FilterMediasAction.vue create mode 100644 src/components/workflow/FilterTorrentsAction.vue create mode 100644 src/components/workflow/ScrapeFileAction.vue create mode 100644 src/components/workflow/SendEventAction.vue create mode 100644 src/components/workflow/SendMessageAction.vue create mode 100644 src/components/workflow/TransferFileAction.vue rename src/{components/workflow => layouts/components}/DropzoneBackground.vue (100%) rename src/{components/workflow/Sidebar.vue => layouts/components/WorkflowSidebar.vue} (100%) 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