From dc84312542435f5e7283a99bf50367ea2c0efebf Mon Sep 17 00:00:00 2001 From: Lemon <1599456917@qq.com> Date: Tue, 25 Feb 2025 15:06:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=A1=E6=A0=B8=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=B5=81=E7=A8=8B=E8=8A=82=E7=82=B9=E5=A4=9A=20?= =?UTF-8?q?=E6=89=93=E5=BC=80=E5=AE=A1=E6=A0=B8=E8=8A=82=E7=82=B9=E5=8D=A1?= =?UTF-8?q?=E9=A1=BF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/ProcessNodeTree.vue | 55 ++++++++++++++---- .../src/nodes/UserTaskNode.vue | 57 ++++++++++++------- 2 files changed, 79 insertions(+), 33 deletions(-) diff --git a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue index 31473c5c2..942ab11f7 100644 --- a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue +++ b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue @@ -54,8 +54,8 @@ :flow-node="currentNode" @update:flow-node="handleModelValueUpdate" /> - - + diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue index 24d05f2a0..d24cfb1ae 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue @@ -41,7 +41,7 @@
@@ -147,12 +147,16 @@ const nodeSetting = ref() const nodeClick = () => { if (readonly) { + console.log('[UserTaskNode] 开始处理只读模式点击, tasks长度:', tasks.value?.length) if (tasks && tasks.value) { dialogTitle.value = currentNode.value.name + console.time('过滤任务耗时') // 只读模式,弹窗显示任务信息 selectTasks.value = tasks.value.filter( (item: any) => item?.taskDefinitionKey === currentNode.value.id ) + console.timeEnd('过滤任务耗时') + console.log('[UserTaskNode] 过滤后的任务数:', selectTasks.value.length) dialogVisible.value = true } } else { @@ -165,55 +169,66 @@ const nodeClick = () => { const deleteNode = () => { emits('update:flowNode', currentNode.value.childNode) } -// 优化后的查找可驳回用户节点函数 +// 优化查找可驳回用户节点函数 const findReturnTaskNodes = (matchNodeList: SimpleFlowNode[]) => { - // 创建 Set 用于去重,提前初始化以避免重复操作 + console.time('findReturnTaskNodes总耗时') + + // 使用Set进行去重 const uniqueNodes = new Set() const currentNodeId = currentNode.value.id + const processedNodes = new Set() // 用于记录已处理的节点 // 从父节点查找用户任务节点 + console.time('父节点查找耗时') emits('find:parentNode', matchNodeList, NodeType.USER_TASK_NODE) - - // 先将父节点中的有效节点添加到 Set + console.timeEnd('父节点查找耗时') + + // 过滤并去重 matchNodeList.forEach(node => { - if (node.id !== currentNodeId) { + if (!processedNodes.has(node.id) && node.id !== currentNodeId) { uniqueNodes.add(node) + processedNodes.add(node.id) } }) - // 查找子节点并直接添加到 Set - findChildUserTaskNodes(currentNode.value, uniqueNodes, currentNodeId) + // 查找子节点 + findChildUserTaskNodes(currentNode.value, uniqueNodes, currentNodeId, processedNodes) - // 直接用 Set 的值更新数组 + // 更新结果数组 matchNodeList.length = 0 - matchNodeList.push(...uniqueNodes) + matchNodeList.push(...Array.from(uniqueNodes)) + + console.log('[findReturnTaskNodes] 最终找到的节点数:', matchNodeList.length) + console.timeEnd('findReturnTaskNodes总耗时') } -// 优化后的子节点查找函数 +// 优化子节点查找函数 const findChildUserTaskNodes = ( - node: SimpleFlowNode, + node: SimpleFlowNode, uniqueNodes: Set, - currentNodeId: string + currentNodeId: string, + processedNodes: Set ) => { - if (!node) return + if (!node || processedNodes.has(node.id)) return + + processedNodes.add(node.id) // 处理直接子节点 if (node.childNode) { - if (node.childNode.type === NodeType.USER_TASK_NODE && node.childNode.id !== currentNodeId) { + if (node.childNode.type === NodeType.USER_TASK_NODE && + node.childNode.id !== currentNodeId && + !processedNodes.has(node.childNode.id)) { uniqueNodes.add(node.childNode) + processedNodes.add(node.childNode.id) } - findChildUserTaskNodes(node.childNode, uniqueNodes, currentNodeId) + findChildUserTaskNodes(node.childNode, uniqueNodes, currentNodeId, processedNodes) } // 处理条件分支节点 if (node.type === NodeType.CONDITION_BRANCH_NODE && node.conditionNodes) { for (const conditionNode of node.conditionNodes) { if (conditionNode.childNode) { - if (conditionNode.childNode.type === NodeType.USER_TASK_NODE && - conditionNode.childNode.id !== currentNodeId) { - uniqueNodes.add(conditionNode.childNode) - } - findChildUserTaskNodes(conditionNode.childNode, uniqueNodes, currentNodeId) + findChildUserTaskNodes(conditionNode.childNode, uniqueNodes, currentNodeId, processedNodes) } } }