request.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import axios from 'axios'
  2. // import store from '@/store'
  3. // import { getToken } from '@/utils/auth'
  4. import { loginUrl } from '@/apiConfig/requestIP.js'
  5. import { Encrypt } from '@/utils/crypto-js.js'
  6. import { message } from '@/utils/mesDebounce'
  7. import router from '@/router/index.js'
  8. import store from '@/store/index.js'
  9. // create an axios instance
  10. const service = axios.create({
  11. baseURL: '/apis', // url = base url + request url
  12. timeout: 5000, // request timeout
  13. withCredentials: true
  14. })
  15. service.interceptors.request.use(
  16. config => {
  17. config.headers['secret'] = Encrypt()
  18. // config.retry = 2// 如果请求超时,重试次数
  19. // config.retryInterval = 1000 // 重试间隔
  20. return config
  21. },
  22. error => {
  23. return Promise.reject(error)
  24. }
  25. )
  26. service.interceptors.response.use(
  27. response => {
  28. const res = response.data
  29. if (typeof res.code !== 'undefined' && res.code !== 200 && res.code !== 0) {
  30. message({
  31. message: res.msg || 'Error',
  32. type: 'error',
  33. duration: 5 * 1000
  34. })
  35. } else if (typeof res.retCode !== 'undefined' && res.retCode !== 0) {
  36. message({
  37. message: res.retMsg || 'Error',
  38. type: 'error',
  39. duration: 5 * 1000
  40. })
  41. }
  42. return res
  43. },
  44. error => {
  45. if (error && error.response) {
  46. switch (error.response.status) {
  47. case 400:
  48. error.message = '错误请求'
  49. break
  50. case 401:
  51. error.message = '未授权,请重新登录'
  52. break
  53. case 404:
  54. error.message = '请求错误,未找到该资源'
  55. break
  56. case 405:
  57. error.message = '请求方法未允许'
  58. break
  59. default:
  60. error.message = '服务出现异常,请稍后再试或联系管理员'
  61. }
  62. if (error.response.status !== 403) {
  63. message({
  64. message: error.message,
  65. type: 'warning',
  66. duration: 5 * 1000
  67. })
  68. }
  69. if (error.response.status === 401) {
  70. location.href = loginUrl
  71. } else if (error.response.status === 403) {
  72. store.dispatch('global/setBizId', -1)
  73. store.dispatch('global/setBizName', '')
  74. router.push({ name: 'notAccess' })
  75. }
  76. }
  77. return Promise.reject(error)
  78. }
  79. )
  80. // function axiosRetryInterceptor(res) {
  81. // const config = res.config
  82. // // 无网络状态或者请求超时
  83. // if (!config || !config.retry) return Promise.reject(res)
  84. // // 记录重新请求的次数
  85. // config.retryCount = config.retryCount || 0
  86. // // 检查重新请求的次数是否超过我们设定的请求次数
  87. // if (config.retryCount >= config.retry) {
  88. // return Promise.reject(res)
  89. // }
  90. // // 重新请求的次数自增
  91. // config.retryCount += 1
  92. // // 创建新的Promise来处理重新请求的间隙
  93. // const back = new Promise(function(resolve) {
  94. // console.log('接口' + config.url + '请求超时,重新请求')
  95. // setTimeout(function() {
  96. // resolve()
  97. // }, config.retryInterval || 500)
  98. // })
  99. // // 返回axios的实体,重试请求
  100. // return back.then(function() {
  101. // return service(config)
  102. // })
  103. // }
  104. export default service