From a8576d2c05334172664103c7a84649e077d3355f Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Tue, 27 Jan 2026 20:55:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(workflow):=20=E4=BF=AE=E5=A4=8D=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E4=BB=BB=E5=8A=A1=E6=97=B6=E6=8E=A5=E5=8F=A3=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E6=9C=AA=E5=8F=96=E6=B6=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在审批面板中切换任务时,之前的异步请求可能仍在进行,导致数据错乱。现在通过维护请求取消函数列表,在发起新请求前取消所有未完成的请求。 --- .../workflow/components/approval-panel.vue | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/web-antd/src/views/workflow/components/approval-panel.vue b/apps/web-antd/src/views/workflow/components/approval-panel.vue index 9c988e53..4a067fdb 100644 --- a/apps/web-antd/src/views/workflow/components/approval-panel.vue +++ b/apps/web-antd/src/views/workflow/components/approval-panel.vue @@ -87,18 +87,27 @@ const currentFlowInfo = ref(); */ const loading = ref(false); +// 存放所有请求取消函数 +const abortList: (() => void)[] = []; async function handleLoadInfo(task: TaskInfo | undefined) { if (!task) { return null; } try { loading.value = true; + // 取消之前的请求 & 清空数组 + abortList.forEach((abort) => abort()); + abortList.length = 0; /** * 不为审批不需要调用`getTaskByTaskId`接口 */ if (props.type !== 'approve') { - const flowResp = await flowInfo(task.businessId); + const flowRespApi = flowInfo(task.businessId); + // 请求取消 + abortList.push(flowRespApi.abort); + // 获取数据 + const flowResp = await flowRespApi; currentFlowInfo.value = flowResp; return; } @@ -107,10 +116,12 @@ async function handleLoadInfo(task: TaskInfo | undefined) { * getTaskByTaskId主要为了获取按钮权限 目前没有其他功能 * 行数据(即props.task)获取的是没有按钮权限的 */ - const [flowResp, taskResp] = await Promise.all([ - flowInfo(task.businessId), - getTaskByTaskId(task.id), - ]); + const flowInfoApi = flowInfo(task.businessId); + const taskRespApi = getTaskByTaskId(task.id); + // 请求取消 + abortList.push(flowInfoApi.abort, taskRespApi.abort); + + const [flowResp, taskResp] = await Promise.all([flowInfoApi, taskRespApi]); currentFlowInfo.value = flowResp; onlyForBtnPermissionTask.value = taskResp;