blob: 57a21040518df53c1f9443fb2221612161877b4a [file] [log] [blame]
huibing.xie1f1606f2018-08-20 15:46:55 +08001import axios from 'axios'
2import { Message, MessageBox } from 'element-ui'
3import store from '../store'
4import { getToken } from '@/utils/auth'
5
6// 网络请求约定属性名,不可在业务中使用
7const whitelist = ['X-Token', 'token', 'pageIndex', 'pageSize']
8// 创建axios实例
9const service = axios.create({
10 baseURL: process.env.BASE_API, // api的base_url
11 timeout: 10000 // 请求超时时间
12})
13
14// request拦截器
15service.interceptors.request.use(config => {
huibing.xie1718f362018-08-24 14:50:58 +080016 const configcopy = Object.assign({}, config)
huibing.xie1f1606f2018-08-20 15:46:55 +080017 if (store.getters.token) {
huibing.xie1718f362018-08-24 14:50:58 +080018 configcopy.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
huibing.xie1f1606f2018-08-20 15:46:55 +080019 }
huibing.xie1718f362018-08-24 14:50:58 +080020 if (configcopy.params) {
21 for (const attr in configcopy.params) {
huibing.xie1f1606f2018-08-20 15:46:55 +080022 if (whitelist.indexOf(attr) > -1) {
23 // 约定的属性不用转换
24 continue
25 }
huibing.xie1718f362018-08-24 14:50:58 +080026 configcopy.params[encodeURIComponent('mapBean[' + attr + ']')] = configcopy.params[attr]
27 delete configcopy.params[attr]
huibing.xie1f1606f2018-08-20 15:46:55 +080028 }
29 }
huibing.xie1718f362018-08-24 14:50:58 +080030 // console.log(configcopy)
31 // console.log(cc)
32 return configcopy
huibing.xie1f1606f2018-08-20 15:46:55 +080033}, error => {
34 // Do something with request error
35 console.log(error) // for debug
36 Promise.reject(error)
37})
38
39// respone拦截器
40service.interceptors.response.use(
41 response => {
42 /**
43 * code为非20000是抛错 可结合自己业务进行修改
44 */
45 const res = response.data
46 if (response.status !== 200) {
47 Message({
48 message: res.message || '请求失败,状态码:' + res.code,
49 type: 'error',
50 duration: 5 * 1000
51 })
52
53 // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;
54 if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
55 MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
56 confirmButtonText: '重新登录',
57 cancelButtonText: '取消',
58 type: 'warning'
59 }).then(() => {
60 store.dispatch('FedLogOut').then(() => {
61 location.reload()// 为了重新实例化vue-router对象 避免bug
62 })
63 })
64 }
65 return Promise.reject('error')
66 } else {
67 return response.data
68 }
69 },
70 error => {
71 console.log('err' + error)// for debug
72 Message({
73 message: error.message,
74 type: 'error',
75 duration: 5 * 1000
76 })
77 return Promise.reject(error)
78 }
79)
80
81export default service