diff --git a/src/components/common/log-drawer.vue b/src/components/common/log-drawer.vue index da353e4..dd1e67f 100644 --- a/src/components/common/log-drawer.vue +++ b/src/components/common/log-drawer.vue @@ -33,30 +33,43 @@ const syncTime = ref(1); const logList = ref([]); const interval = ref(); const controller = new AbortController(); -const finished = ref(false); +const finished = ref(true); let startId = '0'; let fromIndex: number = 0; +let axiosController = new AbortController(); -const stopLog = () => { +const pauseLog = () => { finished.value = true; controller.abort(); clearTimeout(interval.value); interval.value = undefined; }; +const stopLog = () => { + if (!finished.value) axiosController.abort(); + pauseLog(); + startId = '0'; + fromIndex = 0; + logList.value = []; +}; + async function getLogList() { let logData = null; let logError; + if (props.type === 'job') { const taskData = props.taskData! as Api.Job.JobTask; - const { data, error } = await fetchJobLogList({ - taskBatchId: taskData.taskBatchId, - jobId: taskData.jobId, - taskId: taskData.id, - startId, - fromIndex, - size: 50 - }); + const { data, error } = await fetchJobLogList( + { + taskBatchId: taskData.taskBatchId, + jobId: taskData.jobId, + taskId: taskData.id, + startId, + fromIndex, + size: 50 + }, + axiosController + ); logData = data; logError = error; } @@ -86,7 +99,7 @@ async function getLogList() { clearTimeout(interval.value); interval.value = setTimeout(getLogList, syncTime.value * 1000); } - } else { + } else if (logError?.code !== 'ERR_CANCELED') { stopLog(); } } @@ -100,18 +113,18 @@ watch( async val => { if (val) { if (props.modelValue) { - logList.value = props.modelValue; + logList.value = [...props.modelValue]; } } if ((val || !props.drawer) && props.type && props.taskData) { finished.value = false; + axiosController = new AbortController(); await getLogList(); } if (!val && props.drawer) { stopLog(); - logList.value = []; } }, { immediate: true } @@ -163,7 +176,7 @@ const handleSyncSelect = async (time: number) => { } if (time === 0) { - stopLog(); + pauseLog(); return; } diff --git a/src/service/api/log.ts b/src/service/api/log.ts index 9f4f43c..841bceb 100644 --- a/src/service/api/log.ts +++ b/src/service/api/log.ts @@ -1,11 +1,12 @@ import { request } from '../request'; /** get Job Log List */ -export function fetchJobLogList(params?: Api.JobLog.JobLogSearchParams) { +export function fetchJobLogList(params?: Api.JobLog.JobLogSearchParams, controller?: AbortController) { return request({ url: '/job/log/list', method: 'get', - params + params, + signal: controller?.signal }); } diff --git a/src/service/request/index.ts b/src/service/request/index.ts index 3127ff4..1ca5bfb 100644 --- a/src/service/request/index.ts +++ b/src/service/request/index.ts @@ -135,6 +135,10 @@ export const request = createFlatRequest