114 lines
2.8 KiB
TypeScript
114 lines
2.8 KiB
TypeScript
import router from '@renderer/router'
|
|
import axios from 'axios'
|
|
import type {
|
|
AxiosInstance,
|
|
AxiosRequestConfig,
|
|
AxiosResponse,
|
|
InternalAxiosRequestConfig
|
|
} from 'axios'
|
|
|
|
const pendingRequests = new Map<string, AbortController>()
|
|
let baseURL: any
|
|
if (window && window.process && window.process.type === 'renderer') {
|
|
// baseURL = localStorage.getItem('ip') ||'http://192.168.110.25:8848'|| 'http://127.0.0.1:8808'
|
|
baseURL = 'http://127.0.0.1:8848'
|
|
} else {
|
|
baseURL = 'http://192.168.110.25:8848'
|
|
}
|
|
|
|
// 创建自定义配置的axios实例
|
|
const service: AxiosInstance = axios.create({
|
|
baseURL: baseURL,
|
|
timeout: 10000,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Access-Control-Allow-Origin': '*'
|
|
}
|
|
})
|
|
|
|
// 生成请求唯一标识
|
|
function getRequestKey(config: AxiosRequestConfig): string {
|
|
return `${config.url}`
|
|
}
|
|
|
|
// 请求拦截器
|
|
service.interceptors.request.use(
|
|
(config: InternalAxiosRequestConfig) => {
|
|
const key = getRequestKey(config)
|
|
|
|
// 检查是否有相同请求正在进行
|
|
if (pendingRequests.has(key)) {
|
|
ElMessage({
|
|
message: '当前请求已存在,请稍后再试',
|
|
type: 'warning'
|
|
})
|
|
}
|
|
|
|
const controller = new AbortController()
|
|
config.signal = controller.signal
|
|
pendingRequests.set(key, controller)
|
|
|
|
// 在这里添加认证token
|
|
const token = localStorage.getItem('Authorization')
|
|
console.log("localStorage.getItem('Authorization')", token);
|
|
|
|
if (token && config.headers) {
|
|
// Bearer
|
|
config.headers.Authorization = `${token}`
|
|
}
|
|
return config
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error)
|
|
}
|
|
)
|
|
|
|
// 响应拦截器
|
|
service.interceptors.response.use(
|
|
(response: AxiosResponse) => {
|
|
const key = getRequestKey(response.config)
|
|
pendingRequests.delete(key)
|
|
console.log(response);
|
|
|
|
// 统一处理HTTP状态码
|
|
if (response.status === 200) {
|
|
if ([0, 200].includes(response.data.code)) {
|
|
return response
|
|
}
|
|
if (response.data.code == 401) {
|
|
router.push('/')
|
|
localStorage.removeItem('Authorization')
|
|
}
|
|
if (![0, 200].includes(response.data.code)) {
|
|
ElMessage({
|
|
message: response.data.msg || response.data.message,
|
|
type: 'error'
|
|
})
|
|
}
|
|
|
|
}
|
|
return Promise.reject(new Error('Error'))
|
|
},
|
|
(error) => {
|
|
console.log('error', error)
|
|
|
|
if (error.config) {
|
|
const key = getRequestKey(error.config)
|
|
pendingRequests.delete(key)
|
|
}
|
|
// 统一错误处理
|
|
const { response } = error
|
|
|
|
if (response) {
|
|
return Promise.reject(response)
|
|
}
|
|
ElMessage({
|
|
message: '网络连接异常,请稍后再试',
|
|
type: 'error'
|
|
})
|
|
return Promise.reject(new Error('网络连接异常,请稍后再试'))
|
|
}
|
|
)
|
|
|
|
export default service
|