80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
|
import axios from 'axios'
|
|||
|
import { trim } from './util'
|
|||
|
|
|||
|
// 默认配置
|
|||
|
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
|
|||
|
const axiosInstance = axios.create({
|
|||
|
baseURL: '/api',
|
|||
|
// 请求超时时间
|
|||
|
timeout: 60000
|
|||
|
})
|
|||
|
|
|||
|
// 添加请求拦截器
|
|||
|
axiosInstance.interceptors.request.use(function (config) {
|
|||
|
// 服务端调用,使用全路径
|
|||
|
if (window === undefined) {
|
|||
|
config.baseURL = import.meta.env.VITE_API_URL
|
|||
|
}
|
|||
|
// 导出处理
|
|||
|
if (config.download === true) {
|
|||
|
config.responseType = 'blob'
|
|||
|
}
|
|||
|
// 参数去空格
|
|||
|
if (config.trim === true) {
|
|||
|
if (config.data != null) {
|
|||
|
config.data = trim(config.data)
|
|||
|
}
|
|||
|
if (config.params != null) {
|
|||
|
config.params = trim(config.params)
|
|||
|
}
|
|||
|
}
|
|||
|
return config
|
|||
|
}, function (error) {
|
|||
|
// 对请求错误做些什么
|
|||
|
return Promise.reject(error);
|
|||
|
});
|
|||
|
|
|||
|
// 添加响应拦截器
|
|||
|
axiosInstance.interceptors.response.use(function (response) {
|
|||
|
// 下载接口处理
|
|||
|
if (response.headers['x-opera-type'] === 'download') {
|
|||
|
if (response.config.responseType !== 'blob') {
|
|||
|
return Promise.reject(new Error('下载接口返回类型错误,请检查接口定义是否缺少download标识!'))
|
|||
|
}
|
|||
|
// Blob类型数据,导出下载文件时,如果接口未正确执行,返回类型为Blob
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
if (response.data.type !== 'application/json') {
|
|||
|
resolve(response)
|
|||
|
return
|
|||
|
}
|
|||
|
const blob = new Blob([response.data])
|
|||
|
const fileReader = new FileReader()
|
|||
|
// 读取Blob内容
|
|||
|
fileReader.readAsText(blob, 'utf-8')
|
|||
|
fileReader.onload = function () {
|
|||
|
const result = JSON.parse(fileReader.result)
|
|||
|
// 业务失败
|
|||
|
if (!result.success) {
|
|||
|
reject(result)
|
|||
|
return
|
|||
|
}
|
|||
|
resolve(result)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
// 对响应数据做点什么
|
|||
|
if (response.data.success) {
|
|||
|
return response.data.data
|
|||
|
}
|
|||
|
console.error('接口错误', response.data.message)
|
|||
|
return Promise.reject(response.data)
|
|||
|
}, function (error) {
|
|||
|
if (error.response.status === 500) {
|
|||
|
return Promise.reject(new Error('网络繁忙,请稍后再试!'))
|
|||
|
}
|
|||
|
// 对响应错误做点什么
|
|||
|
return Promise.reject(error)
|
|||
|
})
|
|||
|
|
|||
|
export default axiosInstance
|