request.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import axios from 'axios';
  2. import router from '@/router';
  3. import dialog from '@/components/Dialog';
  4. import JSONbig from 'json-bigint';
  5. import { getToken, setToken } from '@/utils';
  6. // 创建axios实例
  7. const service = axios.create({
  8. timeout: 1000 * 30,
  9. withCredentials: true,
  10. headers: {
  11. // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
  12. 'Content-Type': 'application/json; charset=utf-8',
  13. 'deviceType': '4'
  14. },
  15. transformResponse: [
  16. function (data) {
  17. if (typeof data === 'string') {
  18. const JSONbigString = new JSONbig({storeAsString: true});
  19. return JSONbigString.parse(data);
  20. } else {
  21. return data;
  22. }
  23. }
  24. ]
  25. })
  26. // request拦截器
  27. service.interceptors.request.use(
  28. config => {
  29. let token = getToken();
  30. let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId');
  31. let currentMenuId;
  32. if (menuIdJsonStr != null) {
  33. currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data;
  34. }
  35. if (token != null) config.headers['Authorization'] = token;
  36. if (currentMenuId != null) config.headers['MenuId'] = currentMenuId;
  37. return config
  38. }, error => {
  39. return Promise.reject(error)
  40. }
  41. );
  42. // response拦截器
  43. service.interceptors.response.use(
  44. response => {
  45. if (response.data && response.data.errorCode === 'UNAUTHORIZED_LOGIN') { // 401, token失效
  46. dialog.closeAll();
  47. router.push({ name: 'login' })
  48. } else {
  49. if (response.headers['refreshedtoken'] != null) {
  50. setToken(response.headers['refreshedtoken']);
  51. }
  52. }
  53. return response
  54. }, error => {
  55. let response = error.response;
  56. if (response && response.data) {
  57. if (response.data.errorCode === 'UNAUTHORIZED_LOGIN') {
  58. dialog.closeAll();
  59. router.push({ name: 'login' });
  60. }
  61. return Promise.reject(response.data);
  62. } else {
  63. return Promise.reject(new Error({
  64. errorMessage: '数据获取失败,请稍后再试'
  65. }));
  66. }
  67. }
  68. );
  69. export default service