import axios from 'axios'
|
import Cookies from 'js-cookie'
|
import pkg from '../../../package'
|
import { trim } from '@/utils/util'
|
import cache from '@/plugins/cache'
|
import extendsMethods from './extends.methods'
|
import AES from '@/utils/aes'
|
|
// 默认配置
|
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
|
// axios.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'
|
const axiosInstance = axios.create({
|
baseURL: process.env.VUE_APP_API_PREFIX,
|
// 请求超时时间
|
timeout: 60000
|
})
|
|
// 新建请求拦截器
|
axiosInstance.interceptors.request.use(config => {
|
console.log('请求', config)
|
// 初始化加密标识值
|
config.encrypt = config.encrypt == null ? process.env.VUE_APP_ENCRYPT_REQUEST === 'on' : config.encrypt
|
if (config.headers['Content-Type'] != null && config.headers['Content-Type'].startsWith('multipart/form-data')) {
|
config.encrypt = false
|
}
|
// 参数去空格
|
if (config.trim === true) {
|
if (config.data != null) {
|
config.data = trim(config.data)
|
}
|
if (config.params != null) {
|
config.params = trim(config.params)
|
}
|
}
|
// 导出处理
|
if (config.download === true) {
|
config.responseType = 'blob'
|
}
|
// 设置操作平台
|
config.headers['eva-platform'] = `pc-${pkg.version}`
|
// 设置2fa密码
|
const cachePwd = cache.twoFA.__get('eva-2fa-password')
|
if (cachePwd != null) {
|
config.headers['eva-2fa-password'] = cachePwd.value
|
// 未记住密码时直接删除密码
|
if (cachePwd.expiredTime == null) {
|
// 延迟删除,防止promise.all同时发起多个2FA接口时无法读取到密码
|
setTimeout(() => {
|
cache.twoFA.removePassword()
|
}, 200)
|
}
|
}
|
// 参数加密
|
// if (config.encrypt) {
|
// let requestData = null
|
// if (config.data != null) {
|
// requestData = config.data
|
// }
|
// if (config.params != null) {
|
// requestData = config.params
|
// }
|
// if (process.env.VUE_APP_DEBUG === 'on') {
|
// console.log(`DEBUG: ${config.method} ${config.url}`, '请求参数', requestData)
|
// }
|
// // POST请求
|
// if (config.data != null) {
|
// // config.data = {
|
// // _p: AES.encrypt(JSON.stringify(config.data))
|
// // }
|
// }
|
// // GET请求
|
// if (config.params != null) {
|
// config.params = {
|
// _p: AES.encrypt(JSON.stringify(config.params))
|
// }
|
// }
|
// }
|
// 设置认证头
|
const authToken = Cookies.get('eva-auth-token')
|
if (authToken != null) {
|
config.headers['eva-auth-token'] = authToken
|
}
|
return config
|
}, function (error) {
|
return Promise.reject(error)
|
})
|
|
// 新建响应拦截器
|
axiosInstance.interceptors.response.use((response) => {
|
// console.log('响应', response)
|
// 请求失败
|
if (response.status !== 200) {
|
return Promise.reject(new Error('服务器繁忙,请稍后再试'))
|
}
|
// 下载接口处理
|
if (response.headers['eva-opera-type'] === 'download') {
|
return Promise.resolve(response)
|
}
|
// 解密响应结果
|
if (typeof response.data === 'string') {
|
response.data = JSON.parse(AES.decrypt(response.data))
|
if (process.env.VUE_APP_DEBUG === 'on') {
|
console.log(`DEBUG: ${response.config.method} ${response.config.url}`, '请求结果', JSON.parse(JSON.stringify(response)))
|
}
|
}
|
// 未登录
|
if (response.data.code === 401) {
|
// window.location.href = process.env.VUE_APP_ROUTER_MODE === 'history' ? '/login' : '/doumeeplant_web/#/login'
|
if (response.config.autoLogin !== false) {
|
window.location.href = process.env.VUE_APP_ROUTER_MODE !== 'hash' ? '/login' : process.env.VUE_APP_CONTEXT_PATH
|
}
|
return Promise.reject(response.data)
|
}
|
// 业务失败
|
if (!response.data.success) {
|
return Promise.reject(response.data)
|
}
|
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
|