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.
89 lines
2.3 KiB
89 lines
2.3 KiB
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
|
|
|