|
@@ -9,6 +9,13 @@ import { ResultEnum } from "@/enums/api/result.enum";
|
|
|
import { Auth } from "@/utils/auth";
|
|
import { Auth } from "@/utils/auth";
|
|
|
import { redirectToLogin } from "@/utils/authRedirect";
|
|
import { redirectToLogin } from "@/utils/authRedirect";
|
|
|
|
|
|
|
|
|
|
+declare module "axios" {
|
|
|
|
|
+ export interface AxiosRequestConfig {
|
|
|
|
|
+ /** 静默请求:失败不弹 toast(后台自动刷新用)。401 / TOKEN_EXPIRED 的跳登录行为不变 */
|
|
|
|
|
+ silent?: boolean;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 创建 HTTP 请求实例
|
|
* 创建 HTTP 请求实例
|
|
|
*/
|
|
*/
|
|
@@ -61,12 +68,15 @@ httpRequest.interceptors.response.use(
|
|
|
|
|
|
|
|
// 检查请求是否失败
|
|
// 检查请求是否失败
|
|
|
if (data.code !== ResultEnum.SUCCESS) {
|
|
if (data.code !== ResultEnum.SUCCESS) {
|
|
|
- ElMessage.error(data.msg);
|
|
|
|
|
|
|
+ if (!response.config.silent) {
|
|
|
|
|
+ ElMessage.error(data.msg);
|
|
|
|
|
+ }
|
|
|
return Promise.reject(response);
|
|
return Promise.reject(response);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 如果请求不是 GET 请求,且不是登录或退出登录接口,请求成功时显示成功提示
|
|
// 如果请求不是 GET 请求,且不是登录或退出登录接口,请求成功时显示成功提示
|
|
|
if (
|
|
if (
|
|
|
|
|
+ !response.config.silent &&
|
|
|
response.config.method?.toUpperCase() !== "GET" &&
|
|
response.config.method?.toUpperCase() !== "GET" &&
|
|
|
!response.config.url?.includes("login") &&
|
|
!response.config.url?.includes("login") &&
|
|
|
!response.config.url?.includes("logout")
|
|
!response.config.url?.includes("logout")
|
|
@@ -77,6 +87,7 @@ httpRequest.interceptors.response.use(
|
|
|
return response;
|
|
return response;
|
|
|
},
|
|
},
|
|
|
async (error: AxiosError<ApiResponse>) => {
|
|
async (error: AxiosError<ApiResponse>) => {
|
|
|
|
|
+ const silent = error.config?.silent === true;
|
|
|
// 处理网络错误(连接拒绝、超时等)
|
|
// 处理网络错误(连接拒绝、超时等)
|
|
|
if (!error.response) {
|
|
if (!error.response) {
|
|
|
let errorMessage = "网络连接异常";
|
|
let errorMessage = "网络连接异常";
|
|
@@ -91,7 +102,9 @@ httpRequest.interceptors.response.use(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
console.error("网络请求失败:", error);
|
|
console.error("网络请求失败:", error);
|
|
|
- ElMessage.error(errorMessage);
|
|
|
|
|
|
|
+ if (!silent) {
|
|
|
|
|
+ ElMessage.error(errorMessage);
|
|
|
|
|
+ }
|
|
|
return Promise.reject(new Error(errorMessage));
|
|
return Promise.reject(new Error(errorMessage));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -139,16 +152,24 @@ httpRequest.interceptors.response.use(
|
|
|
await redirectToLogin("登录已过期,请重新登录");
|
|
await redirectToLogin("登录已过期,请重新登录");
|
|
|
return Promise.reject(new Error(data.msg));
|
|
return Promise.reject(new Error(data.msg));
|
|
|
} else if (data?.code === ResultEnum.ERROR) {
|
|
} else if (data?.code === ResultEnum.ERROR) {
|
|
|
- ElMessage.error(data.msg || "请求错误");
|
|
|
|
|
|
|
+ if (!silent) {
|
|
|
|
|
+ ElMessage.error(data.msg || "请求错误");
|
|
|
|
|
+ }
|
|
|
return Promise.reject(new Error(data.msg || "请求错误"));
|
|
return Promise.reject(new Error(data.msg || "请求错误"));
|
|
|
} else if (data?.code === ResultEnum.UNAUTHORIZED) {
|
|
} else if (data?.code === ResultEnum.UNAUTHORIZED) {
|
|
|
- ElMessage.error(data.msg || "暂无权限");
|
|
|
|
|
|
|
+ if (!silent) {
|
|
|
|
|
+ ElMessage.error(data.msg || "暂无权限");
|
|
|
|
|
+ }
|
|
|
return Promise.reject(new Error(data.msg || "请求错误"));
|
|
return Promise.reject(new Error(data.msg || "请求错误"));
|
|
|
} else if (data?.code === ResultEnum.EXCEPTION) {
|
|
} else if (data?.code === ResultEnum.EXCEPTION) {
|
|
|
- ElMessage.error(data.msg || "服务异常");
|
|
|
|
|
|
|
+ if (!silent) {
|
|
|
|
|
+ ElMessage.error(data.msg || "服务异常");
|
|
|
|
|
+ }
|
|
|
return Promise.reject(new Error(data.msg || "服务异常"));
|
|
return Promise.reject(new Error(data.msg || "服务异常"));
|
|
|
} else {
|
|
} else {
|
|
|
- ElMessage.error("请求处理失败,请稍后重试");
|
|
|
|
|
|
|
+ if (!silent) {
|
|
|
|
|
+ ElMessage.error("请求处理失败,请稍后重试");
|
|
|
|
|
+ }
|
|
|
return Promise.reject(new Error("请求处理失败"));
|
|
return Promise.reject(new Error("请求处理失败"));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|