From 486704c6d23e274fdbc87065222175b09a17181c Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 24 Aug 2026 17:27:52 +0800 Subject: [PATCH] fix(workflow): recover shared list requests (#709) --- src/views/workflow/WorkflowShareView.vue | 58 +++- .../__tests__/WorkflowShareView.spec.ts | 304 ++++++++++++++++++ vite.config.ts | 7 + 3 files changed, 362 insertions(+), 7 deletions(-) create mode 100644 src/views/workflow/__tests__/WorkflowShareView.spec.ts diff --git a/src/views/workflow/WorkflowShareView.vue b/src/views/workflow/WorkflowShareView.vue index b18f723e..d66aaff1 100644 --- a/src/views/workflow/WorkflowShareView.vue +++ b/src/views/workflow/WorkflowShareView.vue @@ -33,12 +33,18 @@ const page = ref(1) const keyword = ref(props.keyword) const currentKey = ref(0) +// 关键字切换后,旧请求不得再提交分页数据或加载状态。 +let requestGeneration = 0 + // 是否加载中 const loading = ref(false) // 是否加载完成 const isRefreshed = ref(false) +// 当前列表请求是否失败;合法空数组仍使用空数据状态。 +const loadError = ref(false) + // 数据列表 const dataList = ref([]) const currData = ref([]) @@ -58,10 +64,13 @@ async function loadEventTypes() { watch( () => props.keyword, newKeyword => { + requestGeneration++ keyword.value = newKeyword || '' page.value = 1 dataList.value = [] + loading.value = false isRefreshed.value = false + loadError.value = false currentKey.value++ }, ) @@ -78,6 +87,7 @@ function getParams() { // 获取列表数据 async function fetchData({ done }: { done: any }) { + const generation = requestGeneration try { // 如果正在加载中,直接返回 if (loading.value) { @@ -92,11 +102,15 @@ async function fetchData({ done }: { done: any }) { // 设置加载中 loading.value = true // 请求API - currData.value = await api.get(apipath, { + const pageData: WorkflowShare[] = await api.get(apipath, { params: getParams(), }) - // 取消加载中 - loading.value = false + if (generation !== requestGeneration) { + done('ok') + return + } + loadError.value = false + currData.value = pageData // 标计为已请求完成 isRefreshed.value = true if (currData.value.length === 0) { @@ -116,10 +130,15 @@ async function fetchData({ done }: { done: any }) { // 设置加载中 loading.value = true // 请求API - currData.value = await api.get(apipath, { + const pageData: WorkflowShare[] = await api.get(apipath, { params: getParams(), }) - loading.value = false + if (generation !== requestGeneration) { + done('ok') + return + } + loadError.value = false + currData.value = pageData // 标计为已请求完成 isRefreshed.value = true if (currData.value.length === 0) { @@ -135,9 +154,19 @@ async function fetchData({ done }: { done: any }) { } } } catch (error) { + if (generation !== requestGeneration) { + done('ok') + return + } console.error(error) + isRefreshed.value = true + loadError.value = true // 返回加载失败 done('error') + } finally { + if (generation === requestGeneration) { + loading.value = false + } } } @@ -154,9 +183,24 @@ onMounted(() => {