From 209cf6803d758d4543913472d2ceed95cf9cb732 Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Tue, 1 Sep 2026 19:03:30 +0800 Subject: [PATCH] feat: workflow --- .../admin/system/settings/theme-setting.ts | 1 - .../business/model-select/index.vue | 14 +- .../admin/workspace/modules/application.ts | 2 +- ui/src/styles/element-plus.scss | 6 +- ui/src/styles/tailwind.css | 1 + ui/src/views/application/ApplicationView.vue | 5 +- .../application-card/ApplicationCard.vue | 3 + .../SettingApplicationAction.vue | 25 +- .../workflow/ApplicationWorkflowView.vue | 2 +- ui/src/workflow-canvas/WORKFLOW_README.md | 6 + .../component/NodeConditionDropdown.vue | 65 ++++ .../component/NodeOperateDropdown.vue | 162 ++++++++++ ui/src/workflow-canvas/config/node-data.ts | 69 ++--- ui/src/workflow-canvas/core/NodeContainer.vue | 278 +++++------------- ui/src/workflow-canvas/core/loop-edge.ts | 1 - ui/src/workflow-canvas/core/utils.ts | 33 ++- ui/src/workflow-canvas/core/workflow-node.ts | 49 ++- .../workflow-canvas/icons/base-node-icon.vue | 4 +- ui/src/workflow-canvas/index.vue | 14 +- .../workflow-canvas/nodes/base-node/index.ts | 2 +- ui/src/workflow-canvas/style.scss | 9 + 21 files changed, 466 insertions(+), 285 deletions(-) create mode 100644 ui/src/workflow-canvas/component/NodeConditionDropdown.vue create mode 100644 ui/src/workflow-canvas/component/NodeOperateDropdown.vue create mode 100644 ui/src/workflow-canvas/style.scss diff --git a/ui/src/api/admin/system/settings/theme-setting.ts b/ui/src/api/admin/system/settings/theme-setting.ts index 5a9b3a9f3b3..b29ce6ef268 100644 --- a/ui/src/api/admin/system/settings/theme-setting.ts +++ b/ui/src/api/admin/system/settings/theme-setting.ts @@ -1,5 +1,4 @@ import { get, put } from '../../core/request' -import type { ThemeInfo } from '../../auth/types' /** 保存系统外观主题设置。 */ const putThemeSetting = (payload: FormData) => { diff --git a/ui/src/components/business/model-select/index.vue b/ui/src/components/business/model-select/index.vue index 1b7e2aabd5a..1f6d8c1ac62 100644 --- a/ui/src/components/business/model-select/index.vue +++ b/ui/src/components/business/model-select/index.vue @@ -47,13 +47,21 @@ const modelOptionGroups = computed(() => { }) }) -const selectedProviderIcon = computed(() => modelOptionGroups.value.find(({ models }) => models.some(({ id }) => id === selectedModelId.value))?.icon ?? '') +const selectedProviderIcon = computed( + () => modelOptionGroups.value.find(({ models }) => models.some(({ id }) => id === selectedModelId.value))?.icon ?? '', +) + + + diff --git a/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue index 542295e47af..d5c449c0905 100644 --- a/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue +++ b/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue @@ -12,7 +12,18 @@ const route = useRoute() function handleSettingApplication(event: MouseEvent) { event.stopPropagation() - if (!isWorkFlow(props.application.type)) { + if (isWorkFlow(props.application.type)) { + const workflowRoute = { + name: 'workflow-application', + params: { workspaceId: route.params.workspaceId, applicationId: props.application.id }, + } as const + + if (event.ctrlKey || event.metaKey) { + window.open(router.resolve(workflowRoute).href) + return + } + router.push(workflowRoute) + } else { void router.push({ name: 'workspace-application-simple-setting', params: { @@ -21,19 +32,7 @@ function handleSettingApplication(event: MouseEvent) { workspaceId: route.params.workspaceId, }, }) - return - } - - const workflowRoute = { - name: 'workflow-application', - params: { workspaceId: route.params.workspaceId, applicationId: props.application.id }, - } as const - - if (event.ctrlKey || event.metaKey) { - window.open(router.resolve(workflowRoute).href) - return } - router.push(workflowRoute) } diff --git a/ui/src/views/workflow/ApplicationWorkflowView.vue b/ui/src/views/workflow/ApplicationWorkflowView.vue index b3d9656f063..c2c9c26d1ad 100644 --- a/ui/src/views/workflow/ApplicationWorkflowView.vue +++ b/ui/src/views/workflow/ApplicationWorkflowView.vue @@ -268,7 +268,7 @@ onMounted(() => {
- 保存 + 保存 调试
+ + diff --git a/ui/src/workflow-canvas/nodes/base-node/index.ts b/ui/src/workflow-canvas/nodes/base-node/index.ts index 7793fe7bcad..aada180d049 100644 --- a/ui/src/workflow-canvas/nodes/base-node/index.ts +++ b/ui/src/workflow-canvas/nodes/base-node/index.ts @@ -11,7 +11,7 @@ class BaseNodeView extends WorkflowNodeView { class BaseNodeModel extends WorkflowNodeModel { setAttributes() { super.setAttributes() - this.width = 600 + this.width = 340 } } diff --git a/ui/src/workflow-canvas/style.scss b/ui/src/workflow-canvas/style.scss new file mode 100644 index 00000000000..29d847741f9 --- /dev/null +++ b/ui/src/workflow-canvas/style.scss @@ -0,0 +1,9 @@ +.lf-node { + foreignObject { + overflow: visible; + } +} + +.lf-drag-able { + cursor: pointer; +}