wx-chant-admin/src/utils/request.ts
@zuopngfei 279c2074db ssss
2025-10-19 18:11:11 +08:00

67 lines
1.6 KiB
TypeScript

import axios from 'axios'
import { ElNotification } from 'element-plus'
import { GET_TOKEN, REMOVE_TOKEN } from '@/utils/token'
import useUserStore from '@/store/modules/user'
import pinia from '@/store'
//创建axios实例
const request = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 600000,
})
// 存储需要取消的请求
const requestsToCancel = {};
//请求拦截器
request.interceptors.request.use((config: any) => {
if (GET_TOKEN()) {
config.headers.Authorization = GET_TOKEN()
}
// 为每个请求生成一个唯一的cancel token
config.cancelToken = new axios.CancelToken(cancel => {
requestsToCancel[config.url] = cancel;
});
return config
})
//响应拦截器
request.interceptors.response.use(
(response: any) => {
return response.data
},
(error: any) => {
//处理网络错误
if (error.response?.data.code == 20107) {
return
}
// if (error.response?.data.code == 10101) {
// Object.values(requestsToCancel).forEach(cancel => cancel());
// }
if (error.response?.data.code == 10103) {
Object.values(requestsToCancel).forEach(cancel => cancel());
const useUser = useUserStore(pinia)
useUser.userInfo = {}
useUser.token = ''
REMOVE_TOKEN()
ElNotification({
type: 'error',
message: error.response.data.message,
duration: 2000,
onClose: () => {
location.href = '/index'
}
})
return
}
ElNotification({
type: 'error',
message: error.response.data.message,
duration: 2000,
})
return Promise.reject(error)
},
)
export default request