121 lines
3.0 KiB
TypeScript
121 lines
3.0 KiB
TypeScript
//@ts-nocheck
|
|
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://127.0.0.1:8848'
|
|
// baseURL = 'http://127.0.0.1:8848'
|
|
} else {
|
|
localStorage.setItem('ip', 'http://192.168.110.71:8848')
|
|
baseURL = 'http://192.168.110.71:8848'
|
|
}
|
|
// localStorage.setItem('service', baseURL)
|
|
|
|
// 创建自定义配置的axios实例
|
|
const service: AxiosInstance = axios.create({
|
|
// baseURL: baseURL,
|
|
timeout: 300000,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Access-Control-Allow-Origin': '*'
|
|
}
|
|
})
|
|
|
|
// 生成请求唯一标识
|
|
function getRequestKey(config: AxiosRequestConfig): string {
|
|
return `${config.url}`
|
|
}
|
|
|
|
// 请求拦截器
|
|
service.interceptors.request.use(
|
|
(config: InternalAxiosRequestConfig) => {
|
|
if (!config.url.startsWith("http://"))
|
|
config.url = new URL(config.url,
|
|
localStorage.getItem('ip')
|
|
).href;
|
|
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
|