From 420637352d7f90a47d10a132a5221debbd1925ef Mon Sep 17 00:00:00 2001 From: yangsy Date: Sun, 28 Dec 2025 14:34:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9F=A5=E8=AF=A2=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E6=97=B6=E5=8F=96=E6=B6=88=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/alarm-page.vue | 62 +++++++++++++++++++++++++++---------- src/pages/call-log-page.vue | 31 +++++++++++++++++-- src/pages/vimp-log-page.vue | 31 +++++++++++++++++-- 3 files changed, 101 insertions(+), 23 deletions(-) diff --git a/src/pages/alarm-page.vue b/src/pages/alarm-page.vue index 4f8482a..c71a9e1 100644 --- a/src/pages/alarm-page.vue +++ b/src/pages/alarm-page.vue @@ -7,6 +7,7 @@ import { useAlarmStore, useDeviceStore, useStationStore } from '@/stores'; import { downloadByData, parseErrorFeedback } from '@/utils'; import { useMutation } from '@tanstack/vue-query'; import { watchDebounced } from '@vueuse/core'; +import { isCancel } from 'axios'; import dayjs from 'dayjs'; import { NButton, @@ -26,7 +27,7 @@ import { type SelectOption, } from 'naive-ui'; import { storeToRefs } from 'pinia'; -import { computed, h, onBeforeMount, reactive, ref, watch, type CSSProperties } from 'vue'; +import { computed, h, onBeforeMount, onBeforeUnmount, reactive, ref, watch, type CSSProperties } from 'vue'; import { useRoute, useRouter } from 'vue-router'; interface SearchFields extends PageQueryExtra { @@ -211,16 +212,28 @@ const pagination = reactive({ }, }); +const abortController = ref(new AbortController()); + const { mutate: getTableData, isPending: tableLoading } = useMutation({ mutationFn: async () => { - const res = await pageDeviceAlarmLogApi({ - model: {}, - extra: getExtraFields(), - current: pagination.page ?? 1, - size: pagination.pageSize ?? DEFAULT_PAGE_SIZE, - sort: 'id', - order: 'descending', - }); + abortController.value.abort(); + abortController.value = new AbortController(); + + const signal = abortController.value.signal; + + const res = await pageDeviceAlarmLogApi( + { + model: {}, + extra: getExtraFields(), + current: pagination.page ?? 1, + size: pagination.pageSize ?? DEFAULT_PAGE_SIZE, + sort: 'id', + order: 'descending', + }, + { + signal, + }, + ); return res; }, onSuccess: (res) => { @@ -230,6 +243,7 @@ const { mutate: getTableData, isPending: tableLoading } = useMutation({ tableData.value = records; }, onError: (error) => { + if (isCancel(error)) return; console.error(error); const errorFeedback = parseErrorFeedback(error); window.$message.error(errorFeedback); @@ -256,14 +270,24 @@ const onClickQuery = () => { const { mutate: exportTableData, isPending: exporting } = useMutation({ mutationFn: async () => { - const data = await exportDeviceAlarmLogApi({ - model: {}, - extra: getExtraFields(), - current: pagination.page ?? 1, - size: pagination.pageSize ?? 10, - order: 'descending', - sort: 'id', - }); + abortController.value.abort(); + abortController.value = new AbortController(); + + const signal = abortController.value.signal; + + const data = await exportDeviceAlarmLogApi( + { + model: {}, + extra: getExtraFields(), + current: pagination.page ?? 1, + size: pagination.pageSize ?? 10, + order: 'descending', + sort: 'id', + }, + { + signal, + }, + ); return data; }, onSuccess: (data) => { @@ -271,6 +295,7 @@ const { mutate: exportTableData, isPending: exporting } = useMutation({ downloadByData(data, `设备告警记录_${time}.xlsx`); }, onError: (error) => { + if (isCancel(error)) return; console.error(error); const errorFeedback = parseErrorFeedback(error); window.$message.error(errorFeedback); @@ -280,6 +305,9 @@ const { mutate: exportTableData, isPending: exporting } = useMutation({ onBeforeMount(() => { getTableData(); }); +onBeforeUnmount(() => { + abortController.value.abort(); +});