request.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. // 3=会员列表等只展示净账户余额(后端 debtAmount 已废弃)
  31. config.headers['appVersion'] = 3;
  32. config.data = qs.stringify(config.data) || {};
  33. return config;
  34. },
  35. error => {
  36. return Promise.reject(error);
  37. }
  38. );
  39. const onerror = async ({ url, status }) => {
  40. if (status == 401) {
  41. if (url.includes('/logout')) {
  42. store.dispatch('userRemove');
  43. } else {
  44. await store.dispatch('userLogout');
  45. }
  46. href('/login');
  47. }
  48. // if (status == 403) {
  49. // router.$plugin.to('/403');
  50. // }
  51. // if (status == 500) {
  52. // router.$plugin.to('/500');
  53. // }
  54. return Promise.reject();
  55. };
  56. // response
  57. axios.interceptors.response.use(
  58. res => {
  59. NProgress.done();
  60. const { config, status } = res;
  61. if (res.status == 401) {
  62. return onerror({ url: config.url, status });
  63. }
  64. if (res.status == 403) {
  65. return onerror({ status });
  66. }
  67. if (res.status == 404) {
  68. return Promise.reject();
  69. }
  70. if (res.status == 500) {
  71. return onerror({ status });
  72. }
  73. const { code, data, msg } = res.data;
  74. if (!data) {
  75. return res.data;
  76. }
  77. switch (code) {
  78. case 1:
  79. return data;
  80. default:
  81. Message.error(msg);
  82. return Promise.reject(msg);
  83. case 2:
  84. Message.error(msg);
  85. store.dispatch('userRemove');
  86. break;
  87. }
  88. },
  89. error => {
  90. console.error(error);
  91. NProgress.done();
  92. return Promise.reject(error);
  93. }
  94. );
  95. export default axios;