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.
104 lines
3.4 KiB
104 lines
3.4 KiB
import axios from 'axios'
|
|
import { Message, MessageBox } from 'element-ui'
|
|
import store from '../store/index'
|
|
import qs from 'qs'
|
|
import router from '@/router'
|
|
import { getToken } from '@/utils/auth'
|
|
// import { config } from 'vue/types/umd'
|
|
axios.defaults.withCredentials = true; //允许跨域设置
|
|
var isToken = true //token标记位,用来防止多个请求token超时弹出多个重新登录框
|
|
|
|
// 创建axios实例
|
|
const service = axios.create({
|
|
baseURL: config.API_URL, // api 的 base_url
|
|
//timeout: 5000 // 请求超时时间
|
|
// headers: {
|
|
// crossDomain: true,
|
|
// }
|
|
})
|
|
// request拦截器
|
|
service.interceptors.request.use((config) => {
|
|
let isKey = false
|
|
//统一在header中添加token
|
|
if (store.getters.token && !config.isLogin) {
|
|
config.headers['token'] = getToken()
|
|
}
|
|
if (config.method == 'post' || config.method == 'put') {
|
|
//----------------End---------------------------------
|
|
config.data = qs.stringify(config.data)
|
|
// qs.stringify(config.params, { indices: false })
|
|
} else if (config.method == 'get') {
|
|
config.paramsSerializer = params => {
|
|
return qs.stringify(params, { indices: false })
|
|
}
|
|
}
|
|
//包含敏感字眼,拦截请求并报错,反之发送请求
|
|
if (isKey) {
|
|
Message({
|
|
message: '输入内容包含敏感字符。',
|
|
type: 'error',
|
|
duration: 5 * 1000
|
|
})
|
|
Promise.reject('输入内容包含敏感字符。')
|
|
} else {
|
|
return config
|
|
}
|
|
|
|
}, (error) => {
|
|
// Do something with request error
|
|
console.log(error) // for debug
|
|
Promise.reject(error)
|
|
})
|
|
|
|
// respone拦截器
|
|
service.interceptors.response.use(
|
|
(response) => {
|
|
/**
|
|
* code为非200是抛错 可结合自己业务进行修改
|
|
*/
|
|
const res = response.data
|
|
// const res = JSON.parse(response.data)
|
|
if (res.code !== 200) {
|
|
|
|
// 511:失效的token;弹出弹框,返回登录页
|
|
if (res.code === 207) {
|
|
if (isToken) {
|
|
isToken = false //防止下个一个token失效的请求在弹出第二个框
|
|
MessageBox.alert('你已被登出,请重新登录', '确定登出', {
|
|
confirmButtonText: '重新登录',
|
|
type: 'warning',
|
|
callback: () => {
|
|
store.dispatch('FedLogOut').then(() => {
|
|
isToken = true
|
|
router.replace({ name: 'login' })
|
|
// location.reload();
|
|
});
|
|
},
|
|
});
|
|
}
|
|
} else {
|
|
//接口失败统一报错
|
|
Message({
|
|
message: res.message,
|
|
type: 'error',
|
|
duration: 5 * 1000
|
|
})
|
|
}
|
|
return Promise.reject(res)
|
|
} else {
|
|
return response.data
|
|
}
|
|
},
|
|
(error) => {
|
|
console.log('err' + error) // for debug
|
|
const res = error.response;
|
|
Message({
|
|
message: res.message,
|
|
type: 'error',
|
|
duration: 3 * 1000
|
|
})
|
|
return Promise.reject(error)
|
|
}
|
|
)
|
|
|
|
export default service
|