request.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. // 创建 axios 实例
  8. const service = axios.create({
  9. baseURL: '/jeecg-boot', // api base_url
  10. timeout: 6000000 // 请求超时时间
  11. })
  12. const err = (error) => {
  13. if (error.response) {
  14. let data = error.response.data
  15. const token = Vue.ls.get(ACCESS_TOKEN)
  16. console.log("------异常响应------", token)
  17. console.log("------异常响应------", error.response.status)
  18. switch (error.response.status) {
  19. case 403:
  20. notification.error({message: '系统提示', description: '拒绝访问', duration: 4})
  21. break
  22. case 500:
  23. //notification.error({ message: '系统提示', description:'Token失效,请重新登录!',duration: 4})
  24. if (token && data.message == "Token失效,请重新登录") {
  25. // update-begin- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转----
  26. // store.dispatch('Logout').then(() => {
  27. // window.location.reload()
  28. // })
  29. Modal.error({
  30. title: '登录已过期',
  31. content: '很抱歉,登录已过期,请重新登录',
  32. okText: '重新登录',
  33. mask: false,
  34. onOk: () => {
  35. store.dispatch('Logout').then(() => {
  36. Vue.ls.remove(ACCESS_TOKEN)
  37. window.location.reload()
  38. })
  39. }
  40. })
  41. // update-end- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转----
  42. }
  43. break
  44. case 404:
  45. notification.error({message: '系统提示', description: '很抱歉,资源未找到!', duration: 4})
  46. break
  47. case 504:
  48. notification.error({message: '系统提示', description: '网络超时'})
  49. break
  50. case 401:
  51. notification.error({message: '系统提示', description: '未授权,请重新登录', duration: 4})
  52. if (token) {
  53. store.dispatch('Logout').then(() => {
  54. setTimeout(() => {
  55. window.location.reload()
  56. }, 1500)
  57. })
  58. }
  59. break
  60. default:
  61. notification.error({
  62. message: '系统提示',
  63. description: data.message,
  64. duration: 4
  65. })
  66. break
  67. }
  68. }
  69. return Promise.reject(error)
  70. };
  71. // request interceptor
  72. service.interceptors.request.use(config => {
  73. const token = Vue.ls.get(ACCESS_TOKEN)
  74. if (token) {
  75. config.headers['X-Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
  76. }
  77. if (config.method == 'get') {
  78. config.params = {
  79. _t: Date.parse(new Date()) / 1000,
  80. ...config.params
  81. }
  82. }
  83. return config
  84. }, (error) => {
  85. return Promise.reject(error)
  86. })
  87. // response interceptor
  88. service.interceptors.response.use((response) => {
  89. return response.data
  90. }, err)
  91. const installer = {
  92. vm: {},
  93. install(Vue, router = {}) {
  94. Vue.use(VueAxios, router, service)
  95. }
  96. }
  97. export {
  98. installer as VueAxios,
  99. service as axios
  100. }