forked from gzt/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
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
|