From 6781d6179fb5e0e4f5bf86c6f91ea588078e3c71 Mon Sep 17 00:00:00 2001 From: yuntian001 Date: Sat, 8 Oct 2022 11:12:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=86=E8=AF=B7=E6=B1=82loading?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BD=BF=E7=94=A8=E5=85=A8=E5=B1=80loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/loading.ts | 22 ++++++++++++---------- src/utils/request.ts | 8 ++++---- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/utils/loading.ts b/src/utils/loading.ts index c663a045..77819b86 100644 --- a/src/utils/loading.ts +++ b/src/utils/loading.ts @@ -1,7 +1,8 @@ import { useGlobalStore } from '@/store'; import { LoadingOptions } from 'element-plus'; -import { throttle, transform } from 'lodash-es'; +import { throttle } from 'lodash-es'; let loadingInstance: ReturnType; +export type LoadingMode = 'auto'|'global'|'page' class Loading { constructor(private execLoading: (options?: LoadingOptions) => void, private execClose: () => void) { this.execLoading = execLoading; @@ -34,29 +35,30 @@ class Loading { this.throttleClose.cancel(); } } -const globalLoading = new Loading( +export const globalLoading = new Loading( (options?: LoadingOptions) => (loadingInstance = ElLoading.service(options)), () => loadingInstance.close(), ); -const layoutLoading = new Loading( +export const layoutLoading = new Loading( (options?: LoadingOptions) => (useGlobalStore().loadingOptions = options ? reactive(options) : {}), () => (useGlobalStore().loadingOptions = undefined), ); -function getLoading(forceGlobal = false) { - if (!forceGlobal && useGlobalStore().layoutLoaded) { +function getLoading(mode:LoadingMode) { + if (mode === 'page' || ( mode ==='auto' && useGlobalStore().layoutLoaded)) { return layoutLoading; } return globalLoading; } -export function loading(options?: LoadingOptions, number = 1, forceGlobal = false): void { - getLoading(forceGlobal).loading(options, number); +export function loading(options?: LoadingOptions, number = 1, mode:LoadingMode = 'auto'): void { + getLoading(mode).loading(options, number); } -export function closeLoading(force = false, number = 1, forceGlobal = false): void { + +export function closeLoading(force = false, number = 1, mode:LoadingMode = 'auto'): void { if (force) { - getLoading(forceGlobal).forceClose(); + getLoading(mode).forceClose(); return; } - getLoading(forceGlobal).close(number); + getLoading(mode).close(number); } diff --git a/src/utils/request.ts b/src/utils/request.ts index bee43f22..f04d314e 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -3,7 +3,7 @@ import axios, { AxiosRequestConfig } from 'axios'; import { ElMessage } from 'element-plus'; import log from './log'; import { useRequest, Options, setGlobalOptions } from 'vue-request'; -import { loading, closeLoading } from './loading'; +import { globalLoading } from './loading'; const service = axios.create({ baseURL: '/', // url = base url + request url @@ -78,7 +78,7 @@ function request( ) { const axiosService = async (...args: P): Promise => { try { - !options?.noLoading && loading(); + !options?.noLoading && globalLoading.loading(); const { data: res } = await service(await axiosConfig(...args)); if (!res || res.code === undefined) { throw Error('返回值解析失败'); @@ -94,10 +94,10 @@ function request( if (options?.success) { ElMessage.success({ message: res.msg }); } - !options?.noLoading && closeLoading(); + !options?.noLoading && globalLoading.close(); return options?.needAll ? res : res.data; } catch (e) { - !options?.noLoading && closeLoading(); + !options?.noLoading && globalLoading.close(); !options?.noError && ElMessage.error({ message: e instanceof Error ? e.message : String(e),