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
import axios from 'axios'
import qs from 'qs'
var instance = axios.create()
// axios.defaults.baseURL = 'http://192.168.1.106:8300/v1/isv' // 本地荣
// axios.defaults.baseURL = 'http://192.168.1.102:8300/v1/isv' // 本地钱
// axios.defaults.baseURL = 'http://139.196.213.18:8300/v1/isv' // beta环境
const BASE_URL = process.env.VUE_APP_API_URL
let loadingInstance // 创建Loading 的实例
// 配置发送请求前的拦截器可以设置token信息
axios.interceptors.request.use((config) => {
// loading开始loadingInstance.start()
let isRefreshToken = new Date().getTime() - sessionStorage.getItem('start_time') < sessionStorage.getItem('expires_in') - 5 * 60 * 1000
if (isRefreshToken) {
config.headers['Authorization'] = `Bearer ${sessionStorage.getItem('access_token')}`
return config
} else {
return new Promise((resolve, reject) => {
getToken().then((response) => {
sessionStorage.setItem('access_token', response.data.access_token)
sessionStorage.setItem('refresh_token', response.data.refresh_token)
sessionStorage.setItem('expires_in', response.data.expires_in * 1000)
sessionStorage.setItem('start_time', new Date().getTime())
resolve(config)
return config
}).catch((err) => {
console.log(err)
})
})
}
}, (error) => {
// 出错,也要loading结束
loadingInstance.close()
return Promise.reject(error)
})
function getToken () {
let loginData = qs.stringify({
refresh_token: sessionStorage.getItem('refresh_token'),
grant_type: 'refresh_token'
})
return new Promise((resolve, reject) => {
instance.post(`${BASE_URL}/auth/oauth/token`, loginData, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Authorization': 'Basic bWluZ3BheS13ZWI6bWluZ3BheS13ZWI='
}
}).then((res) => {
resolve(res)
}).catch((err) => {
console.log(err)
})
})
}
const $http = {
post: (url, data) => {
return new Promise((resolve, reject) => {
axios.post(`${BASE_URL}${url}`, data, {
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
}).then((res) => {
return resolve(res)
}).catch((error) => {
return reject(error)
})
})
},
get: (url) => {
return new Promise((resolve, reject) => {
axios.get(`${BASE_URL}${url}`).then((res) => {
return resolve(res)
}).catch((error) => {
return reject(error)
})
})
}
}
export { $http }