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
//免登录接口
import util from '@/utils/util.js'
// let noLoginUrl = [
// '/v1/h5/settled/get-settled-info',
// '/v1/h5/settled/area',
// '/v1/h5/settled/save-info',
// ];
// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
const globalUrl = process.uniEnv || {}
const install = (Vue, vm) => {
let systemApiUrl = globalUrl.systemUrl.apiUrl
let ucenterApiUrl = globalUrl.ucenterUrl.apiUrl
let xueApiUrl = globalUrl.ucenterUrl.xueUrl
function toLoginPage(){
const app = getApp()
let curpath = vm.$Route.path
if(curpath == '/pages/login/index') {
// 如果已经在登录页,无需再次跳转
return false
}
vm.$u.route('/pages/login/index');
}
Vue.prototype.$u.http.setConfig({
baseUrl: systemApiUrl,
header: {
'content-type': 'application/json; charset=utf-8'
},
originalData: true
});
// 请求拦截,配置Token等参数
Vue.prototype.$u.http.interceptor.request = (config) => {
const reg = /\?\w+/;
let token = vm.vuex_token
// if(!token && noLoginUrl.indexOf(config.url)<0){
// toLoginPage()
// return false
// }
if(config.url.indexOf('access-token=')>=0 && config.params['access-token']){
// 给默认参数增加access-token (Java端)
if(reg.test(config.url)){
config.url += '&access-token=' + token
}else{
config.url += '?access-token=' + token
}
}
if(config.url.indexOf(ucenterApiUrl)>-1 || config.url.indexOf(xueApiUrl)>-1){
// php端增加header Authorization
config.header['Authorization'] = token
}
// config.header.token = vm.vuex_token || 'RTOKENe56f873b5823477fa2e15572f8fa7eb3a5fb6f7b';
config.header['x-requested-with'] = 'xmlhttprequest';
return config;
}
function getCode(res){
const result = res.data || res
// let code
// if(result.hasOwnProperty('statusCode')){
// code = res.statusCode
// }else if(result.hasOwnProperty('code')){
// code = result.code
// }
return result.statusCode || result.code || res.statusCode || res.code
}
function getMsg(res){
res = res.data || res
let msg = res.message || res.errMsg
if(res.code == 200 || res.status == true || msg) {
return msg
}
return msg || '请求错误'
}
// 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = (res) => {
let result = res.data || res;
let msg = getMsg(res)
//返回__token__,设置
// if (res.header.__token__) {
// vm.$u.vuex('vuex__token__', res.header.__token__);
// }
const code = getCode(res)
switch (code) {
case 1:
case 0:
// return result;
case 200:
return {
data:result.data || result,
code:code,
message:msg
};
case 401:
// token失效,清空登录信息,同时跳转登录
vm.$u.vuex('vuex_token', '');
vm.$u.vuex('vuex_user', null);
vm.$u.vuex('vuex_wx_uid', '');
toLoginPage()
case 403://没有权限访问
case 500:
// return result;
default:
return {
data:result,
code:code,
message:msg
};
// vm.$u.toast('网络请求错误!');
}
}
}
// 将返回值统一封装为直接返回对象的统一封装{data:data,code:200,message:message}形式
export default {
install
}