|
|
|
import Vue from 'vue'
|
|
|
|
import axios from 'axios'
|
|
|
|
import utils from '@/utils/encode'
|
|
|
|
//加密白名单
|
|
|
|
const encryptWhite = []
|
|
|
|
const env = process.env.VUE_APP_ENV
|
|
|
|
|
|
|
|
const service = axios.create({
|
|
|
|
baseURL: process.env.VUE_APP_BASE_API,
|
|
|
|
timeout: 20000
|
|
|
|
})
|
|
|
|
// 请求拦截
|
|
|
|
service.interceptors.request.use(
|
|
|
|
config => {
|
|
|
|
let token = localStorage.getItem('businessToken')
|
|
|
|
|
|
|
|
if (token) {
|
|
|
|
config.headers['Authorization'] = token
|
|
|
|
} else delete config.headers['Authorization']
|
|
|
|
|
|
|
|
const JSESSIONID = utils.uuid()
|
|
|
|
config.headers['JSESSIONID'] = JSESSIONID
|
|
|
|
config.headers['token'] = utils.bcrypt(JSESSIONID)
|
|
|
|
config.headers['dataSources'] = 'WEB'
|
|
|
|
if (env === 'development') {
|
|
|
|
return config
|
|
|
|
}
|
|
|
|
if (env === 'production' || env === 'test') {
|
|
|
|
//加密
|
|
|
|
config.data = {
|
|
|
|
params: utils.encrypt(JSON.stringify(config.data))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// if (config.responseType === 'blob' && !encryptWhite.includes(config.url)) {
|
|
|
|
// const data = {
|
|
|
|
// params: utils.encrypt(JSON.stringify(config.data))
|
|
|
|
// }
|
|
|
|
// config.data = data
|
|
|
|
// }
|
|
|
|
return config
|
|
|
|
},
|
|
|
|
error => {
|
|
|
|
console.log('axios request error:', error)
|
|
|
|
return Promise.reject()
|
|
|
|
}
|
|
|
|
)
|
|
|
|
// 响应拦截
|
|
|
|
service.interceptors.response.use(
|
|
|
|
response => {
|
|
|
|
const res = response.data
|
|
|
|
const contentType = response.headers['content-type']
|
|
|
|
//流文件
|
|
|
|
if (!contentType.includes('application/json')) return res
|
|
|
|
|
|
|
|
if (env === 'production' || env === 'test') {
|
|
|
|
if (res.encrypt === 1) {
|
|
|
|
const dataParam = JSON.parse(utils.decrypt(res.data))
|
|
|
|
res.data = JSON.stringify(dataParam) === '{}' ? null : dataParam
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (res && res.code) {
|
|
|
|
if (res.code === 42011) {
|
|
|
|
Vue.prototype.$message.error(res.msg || '您的登录已失效,请重新登录')
|
|
|
|
localStorage.removeItem('businessToken')
|
|
|
|
setTimeout(() => {
|
|
|
|
window.location.reload()
|
|
|
|
}, 1000)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
// 白名单
|
|
|
|
if (![20000, 42014, 46001].includes(res.code)) {
|
|
|
|
console.log('code码:' + res.code)
|
|
|
|
Vue.prototype.$message.error(res.msg)
|
|
|
|
return Promise.reject()
|
|
|
|
} else {
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
error => {
|
|
|
|
Vue.prototype.$message.error('请求失败')
|
|
|
|
console.log('axios response error:', error)
|
|
|
|
return Promise.reject(error)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
export default service
|