request.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import axios from 'axios'
  2. import { MessageBox, Message, Loading } from 'element-ui'
  3. let loadingInstance = null
  4. let requestCount = 0
  5. const showLoading = () => {
  6. requestCount++
  7. if (requestCount === 1) {
  8. loadingInstance = Loading.service({
  9. target: '.pc-player-container',
  10. text: '加载中...',
  11. background: 'rgba(255,255,255,0.6)'
  12. })
  13. }
  14. }
  15. const closeLoading = () => {
  16. requestCount--
  17. if (requestCount <= 0) {
  18. requestCount = 0
  19. if (loadingInstance) {
  20. loadingInstance.close()
  21. loadingInstance = null
  22. }
  23. }
  24. }
  25. const service = axios.create({
  26. baseURL: '/',
  27. })
  28. service.interceptors.request.use(
  29. config => {
  30. if (!config.hideLoading) {
  31. showLoading()
  32. }
  33. return config
  34. },
  35. error => {
  36. return Promise.reject(error)
  37. }
  38. )
  39. service.interceptors.response.use(
  40. response => {
  41. if (!response.config.hideLoading) {
  42. closeLoading()
  43. }
  44. const res = response.data || {}
  45. if (res.code == 200 || res.code == 20000) {
  46. return Promise.resolve(res)
  47. } else if (res.code == 401) {
  48. Message({
  49. message: '用户被踢下线,请重新登入',
  50. type: 'error',
  51. duration: 5000
  52. })
  53. window.location.href = '/'
  54. return Promise.resolve(res)
  55. } else {
  56. Message({
  57. message: res.msg || 'Error',
  58. type: 'error',
  59. duration: 2000
  60. })
  61. return Promise.resolve(res)
  62. }
  63. },
  64. error => {
  65. closeLoading()
  66. Message({
  67. message: error.message,
  68. type: 'error',
  69. duration: 5 * 1000
  70. })
  71. return Promise.reject(error)
  72. }
  73. )
  74. export default service