http-request.js
4.42 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
import axios, { CancelToken } from 'axios'
import { APP } from '@/config'
import store from '@/store'
import { Modal } from 'antd'
class HttpRequest {
constructor (baseUrl, loginUrl = APP.loginPath) {
this.baseUrl = baseUrl
this.loginUrl = loginUrl
this.header = { ...APP.header }
this.instance = null
this.init()
}
/**初始化 */
init() {
let instance = axios.create({ baseURL: this.baseUrl, headers: this.header })
this.interceptors(instance)
this.instance = instance
}
/**绑定请求拦截器 */
interceptors (instance) {
// 请求
instance.interceptors.request.use(config => {
// config.headers['Authorization'] = getToken()
return config
}, error => {
if (process.env.NODE_ENV === 'development') console.error(error)
return Promise.reject(error)
})
// 响应
instance.interceptors.response.use(res => {
if (res.headers['content-type'] && res.headers['content-type'].indexOf('download') !== -1) return res
if (res.headers['content-type'] && res.headers['content-type'].indexOf('excel') !== -1) return res
if (res.data.type === 'multipart/form-data' && res.data.size) return res
if (res.headers['content-type'] && res.headers['content-disposition']) return res
return this.handleRespone(res)
}, error => {
if (process.env.NODE_ENV === 'development') console.error(error)
return Promise.reject(error.response ?
`发生错误!状态码:${error.response.status},${error.response.message||error.response.data.message}`
: error.message + "")
})
}
/**请求 */
async request (options) {
return this.instance(options)
}
/**
* 可取消的请求,返回一个source对象对象。可通过 source.cancel(msg) 取消此请求
* @param {*} options
* @param {function} successCallback
* @param {function} errorCallback
*/
sourceRequest(options, successCallback, errorCallback) {
const source = CancelToken.source()
options = Object.assign(options, { cancelToken: source.token })
this.instance(options)
.then(successCallback)
.catch(errorCallback)
return source
}
/**
* 设置请求头
* @param {string} key
* @param {any} value
*/
setHeader(key, value) {
this.instance.defaults.headers.common[key] = value
}
/**
* 设置URL
* @param {string} url
*/
setBaseUrl(url) {
this.instance.defaults.baseURL = url
}
/**
* 处理响用体
* @param {response} res
*/
handleRespone(res) {
if (!res.data) return res
const { code, message, data, list } = res.data
if(typeof code === 'undefined') return data
if(typeof list !== 'undefined' && typeof data === 'undefined') return list
switch(code) {
case 0:
return data ? data : { data, list }
case "0":
return data ? data : { data, list }
case 200:
if (res.config.url.indexOf(this.loginUrl) !== -1) {
this.saveLoginInfo(data.jwt, data.sessionid, data.user.vid, res.config.data) //保存登陆数据
}
return Array.isArray(data)?data:(typeof data === 'object' ? {message, code, ...data} : {data, message})
// case 400001:
// return Array.isArray(data)?data:(typeof data === 'object' ? {message, code, ...data} : {data, message})
case 401:
if (process.env.NODE_ENV === 'development') console.error(`发生错误,错误代码: ${code};详情:${message}`)
Modal.error({
title: '登陆状态已过期,正在退出登陆'
})
store.commit('SYSTEM_CLEAR') // 清除登陆状态
break
case 403:
if (process.env.NODE_ENV === 'development') console.error(`发生错误,错误代码: ${code};详情:${message}`, data)
return Promise.reject(`发生错误!错误代码: ${code},无权限使用此功能`, data)
default:
if (process.env.NODE_ENV === 'development') console.error(`发生错误,错误代码: ${code};详情:${message}`, data)
return Promise.reject(`发生错误!代码: ${code},${message}`, data)
}
}
/**
* 保存登陆数据
* @param {*} jwt token
* @param {*} data 请求数据体
*/
saveLoginInfo(jwt, sessionid, vid, data) {
data = JSON.parse(data)
const { applyCarrier, applyPlatform } = data
store.commit('SYSTEM_LOGIN', { jwt , sessionid, vid, applyCarrier, applyPlatform})
}
}
export default HttpRequest