From 7d7ee36ef0a746c0366a04f6fcc4bd16003e4fff Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sun, 1 Jun 2025 20:39:42 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]?= =?UTF-8?q?=20Simple=20=E6=A8=A1=E5=9E=8B=20-=20=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/nodes/parallel-node.vue | 201 ++++++++++++++++++ .../components/process-node-tree.vue | 7 +- 2 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue new file mode 100644 index 000000000..f2424ca92 --- /dev/null +++ b/apps/web-antd/src/components/simple-process-design/components/nodes/parallel-node.vue @@ -0,0 +1,201 @@ + + diff --git a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue index fadf8b3ad..bb6286f63 100644 --- a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue +++ b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue @@ -7,6 +7,7 @@ import CopyTaskNode from './nodes/copy-task-node.vue'; import EndEventNode from './nodes/end-event-node.vue'; import ExclusiveNode from './nodes/exclusive-node.vue'; import InclusiveNode from './nodes/inclusive-node.vue'; +import ParallelNode from './nodes/parallel-node.vue'; import StartUserNode from './nodes/start-user-node.vue'; import TriggerNode from './nodes/trigger-node.vue'; import UserTaskNode from './nodes/user-task-node.vue'; @@ -94,12 +95,12 @@ const recursiveFindParentNode = ( @find-parent-node="findParentNode" /> - + @find-parent-node="findParentNode" + /> Date: Sun, 1 Jun 2025 22:19:18 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]?= =?UTF-8?q?=20Simple=20=E6=A8=A1=E5=9E=8B=20-=20=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E5=99=A8=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nodes-config/delay-timer-node-config.vue | 256 ++++++++++++++++++ .../components/nodes/delay-timer-node.vue | 115 ++++++++ .../components/process-node-tree.vue | 5 +- 3 files changed, 374 insertions(+), 2 deletions(-) create mode 100644 apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue create mode 100644 apps/web-antd/src/components/simple-process-design/components/nodes/delay-timer-node.vue diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue new file mode 100644 index 000000000..fdb8e3a6c --- /dev/null +++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/delay-timer-node-config.vue @@ -0,0 +1,256 @@ + + + diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes/delay-timer-node.vue b/apps/web-antd/src/components/simple-process-design/components/nodes/delay-timer-node.vue new file mode 100644 index 000000000..59b887a4b --- /dev/null +++ b/apps/web-antd/src/components/simple-process-design/components/nodes/delay-timer-node.vue @@ -0,0 +1,115 @@ + + + diff --git a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue index bb6286f63..b139aa3b1 100644 --- a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue +++ b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue @@ -4,6 +4,7 @@ import type { SimpleFlowNode } from '../consts'; import { NodeType } from '../consts'; import { useWatchNode } from '../helpers'; import CopyTaskNode from './nodes/copy-task-node.vue'; +import DelayTimerNode from './nodes/delay-timer-node.vue'; import EndEventNode from './nodes/end-event-node.vue'; import ExclusiveNode from './nodes/exclusive-node.vue'; import InclusiveNode from './nodes/inclusive-node.vue'; @@ -109,11 +110,11 @@ const recursiveFindParentNode = ( @find-parent-node="findParentNode" /> - + /> + + + + + + diff --git a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue index b139aa3b1..25516b7f7 100644 --- a/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue +++ b/apps/web-antd/src/components/simple-process-design/components/process-node-tree.vue @@ -9,6 +9,7 @@ import EndEventNode from './nodes/end-event-node.vue'; import ExclusiveNode from './nodes/exclusive-node.vue'; import InclusiveNode from './nodes/inclusive-node.vue'; import ParallelNode from './nodes/parallel-node.vue'; +import RouterNode from './nodes/router-node.vue'; import StartUserNode from './nodes/start-user-node.vue'; import TriggerNode from './nodes/trigger-node.vue'; import UserTaskNode from './nodes/user-task-node.vue'; @@ -116,11 +117,11 @@ const recursiveFindParentNode = ( @update:flow-node="handleModelValueUpdate" /> - + /> Date: Mon, 2 Jun 2025 23:02:19 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E8=8A=82=E7=82=B9=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=8A=BD=E5=B1=89=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nodes-config/condition-node-config.vue | 16 +------ .../nodes-config/copy-task-node-config.vue | 13 +---- .../nodes-config/delay-timer-node-config.vue | 11 ----- .../nodes-config/router-node-config.vue | 48 ++++++++++--------- .../nodes-config/start-user-node-config.vue | 4 +- .../nodes-config/trigger-node-config.vue | 9 ---- .../nodes-config/user-task-node-config.vue | 46 ++++++++++-------- 7 files changed, 55 insertions(+), 92 deletions(-) diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/condition-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/condition-node-config.vue index 19aba8a8c..add81c941 100644 --- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/condition-node-config.vue +++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/condition-node-config.vue @@ -7,7 +7,7 @@ import { useVbenDrawer } from '@vben/common-ui'; import { IconifyIcon } from '@vben/icons'; import { cloneDeep } from '@vben/utils'; -import { Button, Input } from 'ant-design-vue'; +import { Input } from 'ant-design-vue'; import { ConditionType } from '../../consts'; import { @@ -91,13 +91,8 @@ const saveConfig = async () => { return true; }; -// 使用 useVbenDrawer 替代传统 Drawer const [Drawer, drawerApi] = useVbenDrawer({ title: currentNode.value.name, - class: 'w-[588px]', - onCancel: () => { - drawerApi.close(); - }, onConfirm: saveConfig, }); @@ -152,7 +147,7 @@ const blurEvent = () => { defineExpose({ open }); // 提供 open 方法,用于打开弹窗 diff --git a/apps/web-antd/src/components/simple-process-design/components/nodes-config/router-node-config.vue b/apps/web-antd/src/components/simple-process-design/components/nodes-config/router-node-config.vue index e40dda66a..a1a553487 100644 --- a/apps/web-antd/src/components/simple-process-design/components/nodes-config/router-node-config.vue +++ b/apps/web-antd/src/components/simple-process-design/components/nodes-config/router-node-config.vue @@ -25,9 +25,7 @@ import { ConditionType, NodeType } from '../../consts'; import { useNodeName, useWatchNode } from '../../helpers'; import Condition from './modules/condition.vue'; -defineOptions({ - name: 'RouterNodeConfig', -}); +defineOptions({ name: 'RouterNodeConfig' }); const props = defineProps({ flowNode: { type: Object as () => SimpleFlowNode, @@ -36,9 +34,9 @@ const props = defineProps({ }); const processNodeTree = inject>('processNodeTree'); -// 当前节点 +/** 当前节点 */ const currentNode = useWatchNode(props); -// 节点名称 +/** 节点名称 */ const { nodeName, showInput, clickIcon, blurEvent } = useNodeName( NodeType.ROUTER_BRANCH_NODE, ); @@ -47,8 +45,8 @@ const nodeOptions = ref([]); const conditionRef = ref([]); const formRef = ref(); -/** 保存配置 */ -const saveConfig = async () => { +/** 校验节点配置 */ +const validateConfig = async () => { // 校验路由分支选择 const routeIdValid = await formRef.value.validate().catch(() => false); if (!routeIdValid) { @@ -64,26 +62,34 @@ const saveConfig = async () => { } } if (!valid) return false; + + // 获取节点显示文本,如果为空,校验不通过 const showText = getShowText(); if (!showText) return false; + + return true; +}; + +/** 保存配置 */ +const saveConfig = async () => { + // 校验配置 + if (!(await validateConfig())) { + return false; + } + // 保存配置 currentNode.value.name = nodeName.value!; - currentNode.value.showText = showText; + currentNode.value.showText = getShowText(); currentNode.value.routerGroups = routerGroups.value; drawerApi.close(); return true; }; -// 使用 useVbenDrawer const [Drawer, drawerApi] = useVbenDrawer({ title: nodeName.value, - class: 'w-[630px]', - onCancel: () => { - drawerApi.close(); - }, onConfirm: saveConfig, }); -// 显示路由分支节点配置, 由父组件调用 +/** 打开路由节点配置抽屉,由父组件调用 */ const openDrawer = (node: SimpleFlowNode) => { nodeOptions.value = []; getRouterNode(processNodeTree?.value); @@ -95,6 +101,7 @@ const openDrawer = (node: SimpleFlowNode) => { drawerApi.open(); }; +/** 获取显示文本 */ const getShowText = () => { if ( !routerGroups.value || @@ -130,6 +137,7 @@ const getShowText = () => { return `${routerGroups.value.length}条路由分支`; }; +/** 添加路由分支 */ const addRouterGroup = () => { routerGroups.value.push({ nodeId: undefined, @@ -153,11 +161,12 @@ const addRouterGroup = () => { }); }; +/** 删除路由分支 */ const deleteRouterGroup = (index: number) => { routerGroups.value.splice(index, 1); }; -// 递归获取所有节点 +/** 递归获取所有节点 */ const getRouterNode = (node: any) => { // TODO 最好还需要满足以下要求 // 并行分支、包容分支内部节点不能跳转到外部节点 @@ -188,7 +197,7 @@ const getRouterNode = (node: any) => { defineExpose({ openDrawer }); // 暴露方法给父组件