这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
4.0 KiB

import type { ErrorMessageMode } from '/#/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
// import router from '/@/router';
// import { PageEnum } from '/@/enums/pageEnum';
import { useUserStoreWithOut } from '/@/store/modules/user';
import projectSetting from '/@/settings/projectSetting';
import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum';
const { createMessage, createErrorModal } = useMessage();
const error = createMessage.error!;
const stp = projectSetting.sessionTimeoutProcessing;
export function checkStatus(
response: any,
msg: string,
errorMessageMode: ErrorMessageMode = 'message',
): void {
const { t } = useI18n();
const userStore = useUserStoreWithOut();
let errMessage = '';
switch (response.status) {
case 400:
errMessage = `${msg}`;
break;
// 401: Not logged in
// Jump to the login page if not logged in, and carry the path of the current page
// Return to the current page after successful login. This step needs to be operated on the login page.
case 401:
userStore.setToken(undefined);
errMessage = msg || t('sys.api.errMsg401');
if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
userStore.setSessionTimeout(true);
} else {
userStore.logout(true);
}
break;
case 403:
errMessage = t('sys.api.errMsg403');
break;
// 404请求不存在
case 404:
errMessage = t('sys.api.errMsg404');
break;
case 405:
errMessage = t('sys.api.errMsg405');
break;
case 408:
errMessage = t('sys.api.errMsg408');
break;
case 500:
errMessage = t('sys.api.errMsg500');
break;
case 501:
errMessage = t('sys.api.errMsg501');
break;
case 502:
errMessage = t('sys.api.errMsg502');
break;
case 503:
errMessage = t('sys.api.errMsg503');
break;
case 504:
errMessage = t('sys.api.errMsg504');
break;
case 505:
errMessage = t('sys.api.errMsg505');
break;
default:
errMessage = t('sys.api.apiRequestFailed');
break;
}
if (errMessage) {
if (errorMessageMode === 'modal') {
createErrorModal({ title: t('sys.api.errorTip'), content: errMessage });
} else if (errorMessageMode === 'message') {
error({ content: errMessage, key: `global_error_message_status_${status}` });
}
}
}
export function checkResponse(response: any): string | undefined {
// 会话超时
if (response?.status === 401) {
const userStore = useUserStoreWithOut();
userStore.setToken(undefined);
userStore.setSessionTimeout(true);
const { t } = useI18n();
return t('sys.api.errMsg401');
}
if (!response?.data) {
// 都没捕获到则提示默认错误信息
checkStatus(response, '');
return undefined;
}
if (response?.data.Enterprises) {
return response.data.Enterprises;
}
let errorJson = response?.data.error;
// abp框架抛出异常信息
if (response.headers['_abperrorformat'] === 'true') {
if (errorJson === undefined && response.data.type === 'application/json') {
const reader = new FileReader();
reader.onload = function (e) {
errorJson = JSON.parse(e.target?.result as string);
console.log(errorJson);
error(errorJson.error.message);
};
reader.readAsText(response.data);
} else {
let errorMessage = errorJson.message;
if (errorJson.validationErrors) {
errorMessage += errorJson.validationErrors.map((v) => v.message).join('\n');
}
error(errorMessage);
return errorMessage;
}
}
// oauth错误信息
if (response?.data.error_description) {
error(response.data.error_description);
return response.data;
}
// 其他错误
if (response?.data.error.details) {
error(response.data.error.details);
return response.data.error.details;
}
if (response?.data.error.message) {
error(response.data.error.message);
return response.data.error.message;
}
return undefined;
}