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) => { 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) => { 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