2021-06-30 16:45:32 +08:00
|
|
|
// import axios from 'axios'
|
2021-03-03 15:06:52 +08:00
|
|
|
// import { MessageBox, Message } from 'element-ui'
|
|
|
|
import store from '@/store'
|
|
|
|
import { $alert, $error } from './message'
|
|
|
|
import { getToken } from '@/utils/auth'
|
|
|
|
import Config from '@/settings'
|
2021-03-10 14:25:26 +08:00
|
|
|
import i18n from '@/lang'
|
2021-03-04 14:58:52 +08:00
|
|
|
import { tryShowLoading, tryHideLoading } from './loading'
|
2021-03-29 14:15:39 +08:00
|
|
|
import { getLinkToken, setLinkToken } from '@/utils/auth'
|
2021-03-04 14:58:52 +08:00
|
|
|
// import router from '@/router'
|
|
|
|
|
2021-03-03 15:06:52 +08:00
|
|
|
const TokenKey = Config.TokenKey
|
2021-03-08 18:19:57 +08:00
|
|
|
const RefreshTokenKey = Config.RefreshTokenKey
|
2021-03-26 18:44:41 +08:00
|
|
|
const LinkTokenKey = Config.LinkTokenKey
|
2021-03-03 15:06:52 +08:00
|
|
|
// create an axios instance
|
|
|
|
const service = axios.create({
|
|
|
|
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
|
|
|
|
// withCredentials: true, // send cookies when cross-domain requests
|
2021-06-28 16:45:48 +08:00
|
|
|
timeout: 0 // request timeout
|
2021-03-03 15:06:52 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
// request interceptor
|
|
|
|
service.interceptors.request.use(
|
|
|
|
config => {
|
|
|
|
// do something before request is sent
|
|
|
|
|
|
|
|
if (store.getters.token) {
|
|
|
|
// let each request carry token
|
|
|
|
// ['X-Token'] is a custom headers key
|
|
|
|
// please modify it according to the actual situation
|
|
|
|
config.headers[TokenKey] = getToken()
|
|
|
|
}
|
2021-03-29 14:15:39 +08:00
|
|
|
let linkToken = null
|
|
|
|
if ((linkToken = getLinkToken()) !== null) {
|
|
|
|
config.headers[LinkTokenKey] = linkToken
|
2021-03-26 18:44:41 +08:00
|
|
|
}
|
2021-05-18 17:30:36 +08:00
|
|
|
|
2021-05-18 18:33:52 +08:00
|
|
|
if (i18n.locale) {
|
2021-05-19 10:03:00 +08:00
|
|
|
const lang = i18n.locale.replace('_', '-')
|
|
|
|
config.headers['Accept-Language'] = lang
|
2021-05-18 17:30:36 +08:00
|
|
|
}
|
2021-03-04 14:58:52 +08:00
|
|
|
// 增加loading
|
|
|
|
|
|
|
|
config.loading && tryShowLoading(store.getters.currentPath)
|
|
|
|
|
2021-03-03 15:06:52 +08:00
|
|
|
return config
|
|
|
|
},
|
|
|
|
error => {
|
2021-03-08 18:19:57 +08:00
|
|
|
error.config.loading && tryHideLoading(store.getters.currentPath)
|
2021-03-03 15:06:52 +08:00
|
|
|
// do something with request error
|
|
|
|
return Promise.reject(error)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
const checkAuth = response => {
|
|
|
|
// 请根据实际需求修改
|
2021-03-10 14:25:26 +08:00
|
|
|
|
|
|
|
if (response.headers['authentication-status'] === 'login_expire') {
|
|
|
|
const message = i18n.t('login.expires')
|
2021-06-04 12:20:03 +08:00
|
|
|
// store.dispatch('user/setLoginMsg', message)
|
2021-03-03 15:06:52 +08:00
|
|
|
$alert(message, () => {
|
|
|
|
store.dispatch('user/logout').then(() => {
|
|
|
|
location.reload()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2021-03-10 14:25:26 +08:00
|
|
|
|
2021-06-04 12:20:03 +08:00
|
|
|
if (response.headers['authentication-status'] === 'invalid') {
|
2021-03-10 14:25:26 +08:00
|
|
|
const message = i18n.t('login.tokenError')
|
2021-03-08 21:10:16 +08:00
|
|
|
$alert(message, () => {
|
|
|
|
store.dispatch('user/logout').then(() => {
|
|
|
|
location.reload()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2021-03-08 18:19:57 +08:00
|
|
|
// token到期后自动续命 刷新token
|
|
|
|
if (response.headers[RefreshTokenKey]) {
|
|
|
|
const refreshToken = response.headers[RefreshTokenKey]
|
|
|
|
store.dispatch('user/refreshToken', refreshToken)
|
|
|
|
}
|
2021-03-26 18:44:41 +08:00
|
|
|
|
2021-03-29 14:15:39 +08:00
|
|
|
if (response.headers[LinkTokenKey.toLocaleLowerCase()]) {
|
|
|
|
const linkToken = response.headers[LinkTokenKey.toLocaleLowerCase()]
|
|
|
|
setLinkToken(linkToken)
|
2021-03-26 18:44:41 +08:00
|
|
|
}
|
2021-06-07 16:11:06 +08:00
|
|
|
// 许可状态改变 刷新页面
|
|
|
|
// if (response.headers['lic-status']) {
|
|
|
|
// location.reload()
|
|
|
|
// }
|
2021-03-03 15:06:52 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// 请根据实际需求修改
|
|
|
|
service.interceptors.response.use(response => {
|
2021-03-04 14:58:52 +08:00
|
|
|
response.config.loading && tryHideLoading(store.getters.currentPath)
|
2021-03-03 15:06:52 +08:00
|
|
|
checkAuth(response)
|
2021-03-03 18:20:59 +08:00
|
|
|
return response.data
|
2021-03-03 15:06:52 +08:00
|
|
|
}, error => {
|
2021-06-09 16:19:14 +08:00
|
|
|
const config = error.response && error.response.config || error.config
|
|
|
|
const headers = error.response && error.response.headers || error.response || config.headers
|
|
|
|
config.loading && tryHideLoading(store.getters.currentPath)
|
|
|
|
|
2021-03-03 15:06:52 +08:00
|
|
|
let msg
|
|
|
|
if (error.response) {
|
|
|
|
checkAuth(error.response)
|
2021-06-04 12:20:03 +08:00
|
|
|
// checkPermission(error.response)
|
2021-03-03 15:06:52 +08:00
|
|
|
msg = error.response.data.message || error.response.data
|
|
|
|
} else {
|
|
|
|
msg = error.message
|
|
|
|
}
|
2021-06-09 16:19:14 +08:00
|
|
|
!config.hideMsg && (!headers['authentication-status']) && $error(msg)
|
2021-03-03 15:06:52 +08:00
|
|
|
return Promise.reject(error)
|
|
|
|
})
|
|
|
|
export default service
|