request.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import axios from 'axios'
  2. import { Message, MessageBox } from 'element-ui'
  3. import store from '@/store'
  4. const service = axios.create({
  5. baseURL: process.env.VUE_APP_BASE_API || '/api',
  6. timeout: 30000
  7. })
  8. service.interceptors.request.use(
  9. config => {
  10. // 始终发送 X-Frontend-Type 标识
  11. config.headers['X-Frontend-Type'] = 'agent'
  12. if (store.state.token) {
  13. config.headers['Authorization'] = 'Bearer ' + store.state.token
  14. }
  15. return config
  16. },
  17. error => {
  18. console.error('请求错误:', error)
  19. return Promise.reject(error)
  20. }
  21. )
  22. service.interceptors.response.use(
  23. response => {
  24. const res = response.data
  25. if (res.code !== 200) {
  26. Message({
  27. message: res.message || '请求失败',
  28. type: 'error',
  29. duration: 3 * 1000
  30. })
  31. if (res.code === 401) {
  32. // 清除过期token
  33. store.commit('CLEAR_AUTH')
  34. // 跳转登录页,保留当前端口
  35. window.location.href = window.location.origin + '/login'
  36. }
  37. return Promise.reject(new Error(res.message || 'Error'))
  38. } else {
  39. return res
  40. }
  41. },
  42. error => {
  43. console.error('响应错误:', error)
  44. Message({
  45. message: error.message,
  46. type: 'error',
  47. duration: 3 * 1000
  48. })
  49. return Promise.reject(error)
  50. }
  51. )
  52. export default service