import axios from 'axios'
|
import Cookies from 'js-cookie'
|
import pkg from '../../../package'
|
import { trim } from '@/utils/util'
|
import extendsMethods from './extends.methods'
|
import { decryptedData } from './decryption.js'
|
|
// 默认配置
|
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
|
const axiosInstance = axios.create({
|
baseURL: process.env.VUE_APP_API_PREFIX,
|
// 请求超时时间
|
timeout: 600000
|
})
|
|
// 新建请求拦截器
|
axiosInstance.interceptors.request.use(config => {
|
// 参数去空格
|
if (config.trim === true) {
|
if (config.data != null) {
|
config.data = trim(config.data)
|
}
|
if (config.params != null) {
|
config.params = trim(config.params)
|
}
|
}
|
if (config.ivKey) {
|
config.headers.secretKey = config.ivKey
|
}
|
// config.headers['Content-Type'] = config.contentType || 'application/json;charset=UTF-8'
|
// 导出处理
|
if (config.download === true) {
|
config.responseType = 'blob'
|
}
|
// 设置操作平台
|
config.headers['doumee-platform'] = `pc-${pkg.version}`
|
// 设置认证头
|
const authToken = Cookies.get('doumee-auth-token')
|
if (authToken != null) {
|
config.headers['doumee-auth-token'] = authToken
|
}
|
return config
|
}, function (error) {
|
return Promise.reject(error)
|
})
|
|
// 新建响应拦截器
|
axiosInstance.interceptors.response.use((response) => {
|
// 请求失败
|
if (response.status !== 200) {
|
return Promise.reject(new Error('服务器繁忙,请稍后再试'))
|
}
|
// 下载接口处理
|
if (response.headers['doumee-opera-type'] === 'download') {
|
return Promise.resolve(response)
|
}
|
// 未登录
|
if (response.data.code === 401) {
|
if (response.config.autoLogin !== false) {
|
window.location.href = process.env.VUE_APP_ROUTER_MODE === 'hash' ? (process.env.VUE_APP_CONTEXT_PATH + '/#/login') : (process.env.VUE_APP_CONTEXT_PATH + '/login')
|
}
|
return Promise.reject(response.data)
|
}
|
// 业务失败
|
if (!response.data.success) {
|
return Promise.reject(response.data)
|
}
|
if (response.data.message) {
|
const tm = response.data.message
|
const list = tm.split(' ')
|
let msg = list[0]
|
if (list.length > 1 && response.data.data) {
|
msg = decryptedData(list[1], list[0])
|
response.data.data = decryptedData(list[1], response.data.data)
|
response.data.message = msg
|
}
|
}
|
return response.data.data
|
}, function (error) {
|
console.log('error', error)
|
if (error.code == null) {
|
return Promise.reject(new Error('服务器繁忙,请稍后再试'))
|
}
|
if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
|
return Promise.reject(new Error('服务器响应超时,请稍后再试'))
|
}
|
return Promise.reject(error)
|
})
|
|
// 添加扩展方法
|
for (const key in extendsMethods) {
|
axiosInstance[key] = extendsMethods[key]
|
}
|
|
export default axiosInstance
|