1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import axios from 'axios'
import {Notification, MessageBox, Message, Loading} from 'element-ui'
import store from '@/store'
import {getToken} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
let loadingRequestCount = 0
let loadingInstance
const showLoading = () => {
if (loadingRequestCount === 0) {
loadingInstance = Loading.service({ target: '.loadingtext'})
}
loadingRequestCount++
}
const hideLoading = () => {
if (loadingRequestCount <= 0) return
loadingRequestCount--
if (loadingRequestCount === 0) {
loadingInstance.close()
}
}
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 100000
})
// request拦截器
service.interceptors.request.use(config => {
showLoading()
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log("25reject");
Promise.reject(error);
})
// 响应拦截器
service.interceptors.response.use(res => {
setTimeout(() => {
hideLoading()
}, 200)
// debugger
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 返回所有数据的统一处理
const data = res.data;
// 获取错误信息
const message = errorCode[code] || res.data.message || errorCode['default'];
// 200,1意味着成功返回数据
if(code === 200 || code === 1) {
if( res.data ) {
return res.data
} else {
if( message ) {
Message({message: message, type: 'error'});
}else {
Message({message: '后台数据出错啦!', type: 'error'});
}
return Promise.reject('error');
}
}
else if( code === 500) {
Message({
message: message,
type: 'error'
})
return Promise.reject(new Error(message));
}
else if(code === 401 || code == 99999) {
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
})
})
}
else if (code !== 200 && code !== 1) {
Notification.error({
title: message
})
return Promise.reject('error')
store.dispatch('LogOut').then(() => {
//debugger
var ssa = window.location.host;
if (ssa == 'localhost:1024') {
window.location.href = 'http://sso.jxhh.com/logout?redirect=http://' + ssa
} else {
window.location.href = 'http://sso.jxhh.com/logout?redirect=http://' + ssa
}
// location.reload() // 为了重新实例化vue-router对象 避免bug
})
}
}, error => {
setTimeout(() => {
hideLoading()
}, 200)
// --- start ---- 开发时候用这段,把错误彻底抛出来 --- start ---
let {message} = error;
if (message == 'Network Error') {
message = "后端接口连接异常";
} else if (message.includes('timeout')) {
message = '系统接口请求超时';
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: "error"
});
// console.log(message);
// --- end ---- 开发时候用这段,把错误彻底抛出来 --- end ---
// --- start --- 正式上线,隐藏报错信息 ----- start ----
// let ssa = window.location.host;
// setTimeout(function () {
// if (ssa == 'localhost:1024') {
// window.location.href = 'http://sso.jxhh.com/logout?redirect=http://' + ssa
// } else {
// window.location.href = 'http://sso.jxhh.com/logout?redirect=http://' + ssa
// }
// }, 1000);
// --- end --- 正式上线,隐藏报错信息 ----- end ----
return Promise.reject(error)
}
)
export default service