fetch-api.js
4.59 KB
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
import axios from 'axios';
import {
Toast
} from 'vant';
import router from '@/router'
import {
getToken,
setToken,
removeToken
} from '@/utils/auth'
import {
makeEncrypt
} from '@/utils/encrypt-util'
import api from '@/api/api';
// axios的默认url
// axios.defaults.baseURL = ""
let base = process.env.VUE_APP_BASE_API;
const ENV = process.env.VUE_APP_ENV;
const MODULE_CODE = process.env.VUE_APP_MODULE_CODE;
const IS_POST_ENC = process.env.VUE_APP_IS_POST_ENC;
// 默认超时
axios.defaults.timeout = 5000;
// 请求拦截器
// axios.interceptors.request.use(
// config => {
// // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
// // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
// const token = "token"; //这里写入token
// token && (config.headers.Authorization = token);
// return config;
// },
// error => {
// return Promise.error(error);
// })
// 响应拦截器
axios.interceptors.response.use(
response => {
let {
config
} = response;
let {
opt
} = config;
// 服务器状态码
if (response.status === 200) {
// 业务状态码
if (response.data.code === 200) {
return Promise.resolve(response);
} else {
if (typeof (opt) == "undefined" || typeof (opt.toast) == "undefined" || opt.toast) {
Toast(response.data.errMsg);
}
switch (response.data.code) {
/**
* 登陆失败
* 清除cookies
* 根据业务可能要引导回登陆页
*/
case 403:
removeToken();
break;
default:
break;
}
return Promise.reject(response);
}
} else {
return Promise.reject(response);
}
},
// 服务器状态码不是200的情况
error => {
if (error.response.status) {
switch (error.response.status) {
// 其他错误,直接抛出错误提示
default:
Toast({
message: error.response.data.message,
duration: 1500,
forbidClick: true
});
}
return Promise.reject(error.response);
}
}
);
/**
* 分解参数&拦截请求
*/
function analysisParams(params) {
let {
url,
data,
mode,
opt = Object.assign({}, params.opt),
sid = true,
config,
method
} = params;
if (IS_POST_ENC == 'true') {
if (method == 'post') {
data = makeEncrypt(data);
}
} else {
if (opt.enc) {
data = makeEncrypt(data);
}
}
if (opt.dec) {
data = makerypt(data);
}
let reqUrl = `${base}${url}`;
if (mode == "custom") {
reqUrl = `${url}`
}
let headers = {}
if (sid) {
headers.sessionId = getToken();
headers['-kd-platform-module'] = MODULE_CODE
headers['-kd-platform-env'] = ENV
}
return {
reqUrl,
data,
headers,
opt,
method,
config
}
}
/**
* 封装get方法
* @param {*} params
*/
export const httpGet = params => {
params.method = 'get';
let {
reqUrl,
data,
headers,
opt,
method
} = analysisParams(params);
return axios.get(reqUrl, {
params: data,
headers,
opt
}).then(res => res.data.content);
}
/**
* 封装post方法
* mode为custom时,忽略baseUrl
* @param {*} params
*/
export const httpPost = params => {
params.method = 'post';
let {
reqUrl,
data,
headers,
opt,
method
} = analysisParams(params);
return axios.post(reqUrl, data, {
headers,
opt
}).then(res => res.data.content);
}
/**
* 封装post方法
* @param {*} params
* data数据是 formdata格式
* 例如:
* this.file = file
let data = new FormData() //使用formData对象
data.append('path', '/pro/mzczcradmin/')
data.append('file', file.file)
*/
export const formdata = params => {
let {
url,
data,
} = params;
let formData = new FormData(); //使用formData对象
for (let key in data) {
formData.append(key, data[key]);
}
return axios.post(`${base}${url}`, formData, {
headers: {
"Content-Type": "multipart/form-data"
}
}).then(res => res.data.content);
}
/**
* 打点
* @param {*} params
*/
export const stat = data => {
data.s = encodeURIComponent(getToken());
let reqUrl = `${base}${api.stat}`;
let opt = {
toast: false
}
let headers = {}
// headers.sessionId = getToken();
return axios.get(reqUrl, {
params: data,
headers,
opt
}).then(res => res.data.content);;
}