request.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import store from '@/store'
  4. import { VueAxios } from './axios'
  5. import { Modal, notification } from 'ant-design-vue'
  6. import { ACCESS_TOKEN } from '@/store/mutation-types'
  7. /**
  8. * 【指定 axios的 baseURL】
  9. * 如果手工指定 baseURL: '/jshERP-boot'
  10. * 则映射后端域名,通过 vue.config.js
  11. * @type {*|string}
  12. */
  13. let apiBaseUrl = window._CONFIG['domianURL']
  14. //console.log("apiBaseUrl= ",apiBaseUrl)
  15. // 创建 axios 实例
  16. const service = axios.create({
  17. baseURL: apiBaseUrl, // api base_url
  18. timeout: 300000, // 请求超时时间
  19. })
  20. const err = (error) => {
  21. if (error.response) {
  22. let data = error.response.data
  23. const token = Vue.ls.get(ACCESS_TOKEN)
  24. switch (error.response.status) {
  25. case 403:
  26. notification.error({ message: '系统提示', description: '拒绝访问', duration: 4 })
  27. break
  28. case 500:
  29. if (token && data === 'loginOut') {
  30. Modal.error({
  31. title: '登录已过期',
  32. content: '很抱歉,登录已过期,请重新登录',
  33. okText: '重新登录',
  34. mask: false,
  35. onOk: () => {
  36. Vue.ls.remove(ACCESS_TOKEN)
  37. window.location.reload()
  38. },
  39. })
  40. }
  41. break
  42. case 404:
  43. notification.error({ message: '系统提示', description: '很抱歉,资源未找到!', duration: 4 })
  44. break
  45. case 504:
  46. notification.error({ message: '系统提示', description: '网络超时' })
  47. break
  48. case 401:
  49. notification.error({ message: '系统提示', description: '未授权,请重新登录', duration: 4 })
  50. if (token) {
  51. store.dispatch('Logout').then(() => {
  52. setTimeout(() => {
  53. window.location.reload()
  54. }, 1500)
  55. })
  56. }
  57. break
  58. default:
  59. notification.error({
  60. message: '系统提示',
  61. description: data.message,
  62. duration: 4,
  63. })
  64. break
  65. }
  66. }
  67. return Promise.reject(error)
  68. }
  69. // request interceptor
  70. service.interceptors.request.use(
  71. (config) => {
  72. const token = Vue.ls.get(ACCESS_TOKEN)
  73. if (token) {
  74. config.headers['X-Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
  75. }
  76. return config
  77. },
  78. (error) => {
  79. return Promise.reject(error)
  80. }
  81. )
  82. // response interceptor
  83. service.interceptors.response.use((response) => {
  84. return response.data
  85. }, err)
  86. const installer = {
  87. vm: {},
  88. install(Vue, router = {}) {
  89. Vue.use(VueAxios, router, service)
  90. },
  91. }
  92. export { installer as VueAxios, service as axios }