mirror of
https://gitee.com/JavaLionLi/plus-ui.git
synced 2026-09-13 07:43:43 +08:00
fix 修复 登录页后端403会出现多个弹窗问题
This commit is contained in:
parent
382c37e896
commit
3b876bdbc1
@ -6,7 +6,7 @@ import { usePermissionStore } from '@/store/modules/permission';
|
||||
import { useSettingsStore } from '@/store/modules/settings';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { isRelogin } from '@/utils/request';
|
||||
import { isHandledRequestError, isRelogin } from '@/utils/request';
|
||||
import { isHttp, isPathMatch } from '@/utils/validate';
|
||||
import router from './router';
|
||||
|
||||
@ -36,7 +36,9 @@ router.beforeEach(async (to, from) => {
|
||||
const [err] = await tos(useUserStore().getInfo());
|
||||
if (err) {
|
||||
await useUserStore().logout();
|
||||
ElMessage.error(err);
|
||||
if (!isHandledRequestError(err)) {
|
||||
ElMessage.error(err instanceof Error ? err.message : String(err));
|
||||
}
|
||||
return { path: '/' };
|
||||
} else {
|
||||
isRelogin.show = false;
|
||||
|
||||
@ -20,6 +20,16 @@ let downloadLoadingInstance: LoadingInstance | undefined;
|
||||
// 是否显示重新登录
|
||||
export const isRelogin = { show: false };
|
||||
|
||||
function createHandledError(message: string) {
|
||||
const error = new Error(message) as Error & { isHandled?: boolean };
|
||||
error.isHandled = true;
|
||||
return error;
|
||||
}
|
||||
|
||||
export function isHandledRequestError(error: unknown) {
|
||||
return Boolean((error as { isHandled?: boolean } | undefined)?.isHandled);
|
||||
}
|
||||
|
||||
function normalizeErrorMessage(message?: string) {
|
||||
if (!message) {
|
||||
return undefined;
|
||||
@ -63,7 +73,7 @@ async function parseResponseErrorData(data: unknown): Promise<string | undefined
|
||||
|
||||
if (typeof data === 'object') {
|
||||
const payload = data as Record<string, any>;
|
||||
return errorCode[payload.code] || payload.msg || payload.message || errorCode['default'];
|
||||
return payload.msg || payload.message || errorCode[payload.code] || errorCode['default'];
|
||||
}
|
||||
|
||||
return undefined;
|
||||
@ -187,7 +197,7 @@ service.interceptors.response.use(
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || HttpStatus.SUCCESS;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode['default'];
|
||||
const msg = res.data.msg || errorCode[code] || errorCode['default'];
|
||||
// 二进制数据则直接返回
|
||||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||||
return res.data;
|
||||
@ -227,13 +237,13 @@ service.interceptors.response.use(
|
||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。');
|
||||
} else if (code === HttpStatus.SERVER_ERROR) {
|
||||
ElMessage({ message: msg, type: 'error' });
|
||||
return Promise.reject(new Error(msg));
|
||||
return Promise.reject(createHandledError(msg));
|
||||
} else if (code === HttpStatus.WARN) {
|
||||
ElMessage({ message: msg, type: 'warning' });
|
||||
return Promise.reject(new Error(msg));
|
||||
return Promise.reject(createHandledError(msg));
|
||||
} else if (code !== HttpStatus.SUCCESS) {
|
||||
ElNotification.error({ title: msg });
|
||||
return Promise.reject('error');
|
||||
return Promise.reject(createHandledError(msg));
|
||||
} else {
|
||||
return Promise.resolve(res.data);
|
||||
}
|
||||
@ -241,6 +251,7 @@ service.interceptors.response.use(
|
||||
async (error: any) => {
|
||||
const message = (await extractErrorMessage(error)) || errorCode['default'];
|
||||
ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
|
||||
error.isHandled = true;
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user