request.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import axios from 'axios';
  2. import NProgress from 'nprogress';
  3. import 'nprogress/nprogress.css';
  4. import store from '@/store/index';
  5. import router from '@/router/index';
  6. import { href } from '@/cool/utils/index';
  7. import qs from 'qs';
  8. import { Message } from 'element-ui';
  9. axios.defaults.timeout = 600000;
  10. axios.defaults.withCredentials = true;
  11. axios.defaults.validateStatus = function(status) {
  12. return status >= 200 && status <= 500;
  13. };
  14. NProgress.configure({
  15. showSpinner: false
  16. });
  17. axios.interceptors.request.use(
  18. config => {
  19. // if (config.url) {
  20. // if (!['/login', '/captcha'].some(e => config.url.includes(e))) {
  21. // config.headers['Authorization'] = store.state.user.token || '';
  22. // }
  23. // if (!['/sys/info/record'].some(e => config.url.includes(e))) {
  24. // NProgress.start();
  25. // }
  26. // }
  27. if (store.state.user.token) config.headers['token'] = store.state.user.token || '';
  28. config.headers['source'] = localStorage.getItem('source') || '';
  29. config.headers['account'] = localStorage.getItem('account') || '';
  30. config.data = qs.stringify(config.data) || {};
  31. return config;
  32. },
  33. error => {
  34. return Promise.reject(error);
  35. }
  36. );
  37. const onerror = async ({ url, status }) => {
  38. if (status == 401) {
  39. if (url.includes('/logout')) {
  40. store.dispatch('userRemove');
  41. } else {
  42. await store.dispatch('userLogout');
  43. }
  44. href('/login');
  45. }
  46. // if (status == 403) {
  47. // router.$plugin.to('/403');
  48. // }
  49. // if (status == 500) {
  50. // router.$plugin.to('/500');
  51. // }
  52. return Promise.reject();
  53. };
  54. // response
  55. axios.interceptors.response.use(
  56. res => {
  57. NProgress.done();
  58. const { config, status } = res;
  59. if (res.status == 401) {
  60. return onerror({ url: config.url, status });
  61. }
  62. if (res.status == 403) {
  63. return onerror({ status });
  64. }
  65. if (res.status == 404) {
  66. return Promise.reject();
  67. }
  68. if (res.status == 500) {
  69. return onerror({ status });
  70. }
  71. const { code, data, msg } = res.data;
  72. if (!data) {
  73. return res.data;
  74. }
  75. switch (code) {
  76. case 1:
  77. return data;
  78. default:
  79. Message.error(msg);
  80. return Promise.reject(msg);
  81. case 2:
  82. Message.error(msg);
  83. store.dispatch('userRemove');
  84. break;
  85. }
  86. },
  87. error => {
  88. console.error(error);
  89. NProgress.done();
  90. return Promise.reject(error);
  91. }
  92. );
  93. export default axios;