request.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import store from '@/store'
  4. import notification from 'ant-design-vue/es/notification'
  5. import { VueAxios } from './axios'
  6. import { ACCESS_TOKEN } from '@/store/mutation-types'
  7. // 创建 axios 实例
  8. const service = axios.create({
  9. baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
  10. timeout: 6000 // 请求超时时间
  11. })
  12. const err = (error) => {
  13. console.log('error')
  14. if (error.response) {
  15. const data = error.response.data
  16. const token = Vue.ls.get(ACCESS_TOKEN)
  17. if (error.response.status === 403) {
  18. notification.error({
  19. message: 'Forbidden',
  20. description: data.message
  21. })
  22. }
  23. if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
  24. notification.error({
  25. message: 'Unauthorized',
  26. description: 'Authorization verification failed'
  27. })
  28. if (token) {
  29. store.dispatch('Logout').then(() => {
  30. setTimeout(() => {
  31. window.location.reload()
  32. }, 1500)
  33. })
  34. }
  35. }
  36. }
  37. return Promise.reject(error)
  38. }
  39. // request interceptor
  40. service.interceptors.request.use(config => {
  41. const token = Vue.ls.get(ACCESS_TOKEN)
  42. if (token) {
  43. config.headers['Authorization'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
  44. }
  45. return config
  46. }, err)
  47. // response interceptor
  48. service.interceptors.response.use((response) => {
  49. const res = response.data
  50. if (res.resultCode !== '00000') {
  51. notification.error({
  52. message: res.message || 'Error',
  53. duration: 3
  54. })
  55. return Promise.reject(new Error(res.message || 'Error'))
  56. } else {
  57. return res
  58. }
  59. }, err)
  60. const installer = {
  61. vm: {},
  62. install (Vue) {
  63. Vue.use(VueAxios, service)
  64. }
  65. }
  66. export {
  67. installer as VueAxios,
  68. service as axios
  69. }