request.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import axios from 'axios'; // 引入axios
  2. import { Message } from 'element-ui';
  3. import { store } from '@/store/index'
  4. import context from '@/main.js'
  5. import router from '@/router/index'
  6. const service = axios.create({
  7. baseURL: process.env.VUE_APP_BASE_API,
  8. timeout: 99999
  9. })
  10. let acitveAxios = 0
  11. let timer
  12. const showLoading = () => {
  13. acitveAxios++
  14. if (timer) {
  15. clearTimeout(timer)
  16. }
  17. timer = setTimeout(() => {
  18. if (acitveAxios > 0) {
  19. context.$bus.emit("showLoading")
  20. }
  21. }, 400);
  22. }
  23. const closeLoading = () => {
  24. acitveAxios--
  25. if (acitveAxios <= 0) {
  26. clearTimeout(timer)
  27. context.$bus.emit("closeLoading")
  28. }
  29. }
  30. //http request 拦截器
  31. service.interceptors.request.use(
  32. config => {
  33. if (!config.donNotShowLoading) {
  34. showLoading()
  35. }
  36. const token = store.getters['user/token']
  37. const user = store.getters['user/userInfo']
  38. config.data = JSON.stringify(config.data);
  39. config.headers = {
  40. 'Content-Type': 'application/json',
  41. 'x-token': token,
  42. 'x-user-id': user.ID
  43. }
  44. return config;
  45. },
  46. error => {
  47. closeLoading()
  48. Message({
  49. showClose: true,
  50. message: error,
  51. type: 'error'
  52. })
  53. return error;
  54. }
  55. );
  56. //http response 拦截器
  57. service.interceptors.response.use(
  58. response => {
  59. closeLoading()
  60. if (response.headers["new-token"]) {
  61. store.commit('user/setToken', response.headers["new-token"])
  62. }
  63. if(response.data.code == 0){
  64. if(response.data.data?.needInit){
  65. Message({
  66. type:"info",
  67. message:"您是第一次使用,请初始化"
  68. })
  69. store.commit("user/NeedInit")
  70. router.push({name:"init"})
  71. }
  72. }
  73. if (response.data.code == 0 || response.headers.success === "true") {
  74. return response.data
  75. } else {
  76. Message({
  77. showClose: true,
  78. message: response.data.msg || decodeURI(response.headers.msg),
  79. type: response.headers.msgtype||'error',
  80. })
  81. if (response.data.data && response.data.data.reload) {
  82. store.commit('user/LoginOut')
  83. }
  84. return response.data.msg ? response.data : response
  85. }
  86. },
  87. error => {
  88. closeLoading()
  89. Message({
  90. showClose: true,
  91. message: error,
  92. type: 'error'
  93. })
  94. return error
  95. }
  96. )
  97. export default service