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.
|
|
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 if (response.data.ecode === 'APPE_A8K_ID_CARD_NOT_MOUNTED') { return Promise.reject(response.data) } else { console.log('接口出错', response.data) eventBus.emit('show-error-modal', response.data.data) return Promise.reject(response.data) } } return response }, (error) => { eventBus.emit('show-error-modal', { messageLevel: 'Error', title: '网络请求失败', info: error.message }) return Promise.reject(error) }, )
export default apiClient
|