|
|
|
@ -9,6 +9,8 @@ const request = axios.create({
|
|
|
|
|
timeout:60 * 60 * 1000
|
|
|
|
|
});
|
|
|
|
|
let loading
|
|
|
|
|
let isRefreshing = false;
|
|
|
|
|
let refreshSubscribers = [];
|
|
|
|
|
request.interceptors.request.use((config)=>{
|
|
|
|
|
if (config.loading!==false){
|
|
|
|
|
loading=ElLoading.service({
|
|
|
|
@ -23,12 +25,63 @@ request.interceptors.request.use((config)=>{
|
|
|
|
|
request.interceptors.response.use(async (res)=>{
|
|
|
|
|
// 如果返回401,说明token过期,需要重新登录
|
|
|
|
|
if (res && res.data.code === 401) {
|
|
|
|
|
// 重新登录
|
|
|
|
|
await router.push('/login')
|
|
|
|
|
return getRefreshToken(res);
|
|
|
|
|
}
|
|
|
|
|
loading?.close()
|
|
|
|
|
return res.data;
|
|
|
|
|
},()=>{
|
|
|
|
|
loading?.close()
|
|
|
|
|
});
|
|
|
|
|
// 获取刷新token,刷新token成功后重新请求
|
|
|
|
|
const getRefreshToken = async (response) => {
|
|
|
|
|
if (!isRefreshing) {
|
|
|
|
|
isRefreshing = true;
|
|
|
|
|
const refreshToken = Local.get("RefreshToken");
|
|
|
|
|
if (refreshToken) {
|
|
|
|
|
try {
|
|
|
|
|
const data = { refreshToken };
|
|
|
|
|
const res = await fetch(
|
|
|
|
|
import.meta.env.VITE_APP_API_BASE_URL+"/user/refresh/token",
|
|
|
|
|
{
|
|
|
|
|
method: "POST",
|
|
|
|
|
headers: {
|
|
|
|
|
"Content-Type": "application/json"
|
|
|
|
|
},
|
|
|
|
|
body: JSON.stringify(data),
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
const responseData = await res.json(); // Parse the response body as JSON
|
|
|
|
|
if (responseData.code === 200) {
|
|
|
|
|
console.log("刷新token成功");
|
|
|
|
|
Local.set("token", responseData.data.Token);
|
|
|
|
|
Local.set("userInfo", responseData.data.AccountInfo);
|
|
|
|
|
Local.set("RefreshToken", responseData.data.RefreshToken);
|
|
|
|
|
|
|
|
|
|
return Promise.resolve(request(response.config));
|
|
|
|
|
} else {
|
|
|
|
|
// 重新登录
|
|
|
|
|
await router.push('/login');
|
|
|
|
|
responseData.message = responseData.message || responseData.msg;
|
|
|
|
|
return Promise.reject(responseData);
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
return Promise.reject(error);
|
|
|
|
|
} finally {
|
|
|
|
|
isRefreshing = false;
|
|
|
|
|
refreshSubscribers.forEach((callback) => callback());
|
|
|
|
|
refreshSubscribers = [];
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 重新登录
|
|
|
|
|
await router.push('/login')
|
|
|
|
|
return Promise.reject(response);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
refreshSubscribers.push(() => {
|
|
|
|
|
resolve(request(response.config));
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
export default request;
|
|
|
|
|