A8000
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

80 lines
2.1 KiB

import axios, {
AxiosInstance,
AxiosResponse,
InternalAxiosRequestConfig,
AxiosHeaders,
} from 'axios'
import { getServerInfo } from './getServerInfo'
import { eventBus } from '../eventBus'
const serverInfo = getServerInfo()
// 创建 Axios 实例
const apiClient: AxiosInstance = axios.create({
baseURL: serverInfo.httpUrl, // 设置请求的根路径
timeout: 60000,
headers: {
'Content-Type': 'application/json',
},
})
// 请求拦截器
apiClient.interceptors.request.use(
(config: InternalAxiosRequestConfig<any>) => {
const token = sessionStorage.getItem('token')
// 使用 AxiosHeaders.from() 创建 headers,如果 headers 为空
if (!config.headers) {
config.headers = AxiosHeaders.from({}) // 确保 config.headers 是 AxiosHeaders 类型
}
if (token) {
config.headers.set(
'Authorization',
`Bearer ${encodeURIComponent(token)}`,
) // 使用 set 方法设置 Authorization
}
return config
},
(error) => {
return Promise.reject(error)
},
)
// 响应拦截器
apiClient.interceptors.response.use(
(response: AxiosResponse<any>) => {
if (response.data && response.data.dataType === 'ZAppPromopt') {
if (response.data.ecode === 'USR_NOT_EXIT') {
return Promise.resolve(response.data)
} else if (response.data.ecode === 'USR_PASSWORD_ERROR') {
return Promise.resolve(response.data)
} else {
console.log('接口出错', response.data)
eventBus.emit('show-error-modal', {
type: response.data.data.type,
info: response.data.data.info,
detailInfos: response.data.data.detailInfos,
ecode: response.data.data.ecode,
stackInfo: response.data.data.stackInfo,
})
return Promise.reject(response.data)
}
}
return response
},
(error) => {
eventBus.emit('show-error-modal', {
type: 'Error',
info: '网络请求失败',
detailInfos: [
{
name: '错误详情',
description: error.message,
},
],
})
return Promise.reject(error)
},
)
export default apiClient