vue-element-equipment-pty/src/utils/request.js
2025-04-03 16:54:02 +08:00

110 lines
3.3 KiB
JavaScript

import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import { errorCodeMsg } from '@/utils/util'
// 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
timeout: 20000 // request timeout
})
// 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['x-token'] = getToken()
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (response.headers['content-type']?.indexOf('text/plain') !== -1) {
return res
}
if (res.code !== 200) {
if (res.code === 401 || res.code === 402) res.message = errorCodeMsg(res.code)
// res.code === 604 ||
if (res.code === 600 || res.code === 601 || res.code === 602 || res.code === 603 ||
res.code === 610 || res.code === 611 || res.code === 620 || res.code === 621 || res.code === 622 || res.code === 623 || res.code === 624 || res.code === 625 ||
res.code === 630 || res.code === 640 || res.code === 641 || res.code === 642 || res.code === 643 || res.code === 644) {
res.message = errorCodeMsg(res.code)
return res
// return Promise.reject(res)
}
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === 401 || res.code === 402) {
if (res.code === 402) {
Message({
message: res.message,
type: 'error',
duration: 3 * 1000
})
}
store.dispatch('user/resetToken').then(() => {
location.reload()
})
// to re-login
// MessageBox.confirm(i18n.t('login.loggedOut'), i18n.t('login.confirmLogout'), {
// confirmButtonText: i18n.t('login.toLogin'),
// cancelButtonText: i18n.t('login.logCancel'),
// type: 'warning'
// }).then(() => {
// store.dispatch('user/resetToken').then(() => {
// location.reload()
// })
// })
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
export default service