Files
refinery-admin/src/utils/request.js

90 lines
2.3 KiB
JavaScript
Raw Normal View History

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