http-request.js
3.99 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
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:
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}`)
store.dispatch.user.SYSTEM_OUT()
Modal.error('未登录或登录状已失效,请重新登陆')
return Promise.reject('')
// 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)
}
}
}
export default HttpRequest