request.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import axios from "axios";
  2. import { MessageBox, Message } from "element-ui";
  3. import store from "@/store";
  4. import router, { resetRouter } from "@/router";
  5. import { getToken, getUserId, removeToken } from "@/utils/auth";
  6. import MD5 from "blueimp-md5";
  7. // create an axios instance
  8. // let baseURL
  9. // if (process.env.NODE_ENV === "development") {
  10. // baseURL = '/dev-api'
  11. // }
  12. // else {
  13. // baseURL = ''
  14. // }
  15. const service = axios.create({
  16. //baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  17. baseURL: PLATFROM_CONFIG.baseURLCA,
  18. // withCredentials: true, // send cookies when cross-domain requests
  19. timeout: 30000, // request timeout
  20. });
  21. // request interceptor
  22. service.interceptors.request.use(
  23. (config) => {
  24. // do something before request is sent
  25. // config.headers['Content-Type'] = 'text/plain'
  26. if (store.getters.token) {
  27. // let each request carry token
  28. // ['X-Token'] is a custom headers key
  29. // please modify it according to the actual situation
  30. // config.headers['X-Token'] = getToken()
  31. // config.headers["token"] = getToken();
  32. config.headers["token"] = config.headers["token"] ?? getToken();
  33. }
  34. if (config.data) {
  35. config.data["OperatorId"] = getUserId();
  36. config.data["token"] = MD5(JSON.stringify(config.data));
  37. }
  38. return config;
  39. },
  40. (error) => {
  41. // do something with request error
  42. return Promise.reject(error);
  43. }
  44. );
  45. // response interceptor
  46. service.interceptors.response.use(
  47. /**
  48. * If you want to get http information such as headers or status
  49. * Please return response => response
  50. */
  51. /**
  52. * Determine the request status by custom code
  53. * Here is just an example
  54. * You can also judge the status by HTTP Status Code
  55. */
  56. (response) => {
  57. const res = response.data;
  58. // if the custom code is not 20000, it is judged as an error.
  59. if (res.code != "0") {
  60. Message({
  61. message: res.message || "Error",
  62. type: "error",
  63. duration: 5 * 1000,
  64. });
  65. // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
  66. if (res.code === 500 || res.code === 50012 || res.code === 50014) {
  67. // to re-login
  68. MessageBox.confirm(
  69. "You have been logged out, you can cancel to stay on this page, or log in again",
  70. "Confirm logout",
  71. {
  72. confirmButtonText: "Re-Login",
  73. cancelButtonText: "Cancel",
  74. type: "warning",
  75. }
  76. ).then(async () => {
  77. sessionStorage.removeItem("userName");
  78. store.dispatch("app/toggleOutflag", false);
  79. await store.dispatch("user/logout");
  80. router.push(`/login`);
  81. });
  82. }
  83. return Promise.reject(new Error(res.message || "Error"));
  84. } else {
  85. return res;
  86. }
  87. },
  88. (error) => {
  89. const des500 = `${error}`.split(" ").includes("500");
  90. if (des500) {
  91. Message({
  92. message: "身份令牌过期或失效,即将重新登录",
  93. type: "error",
  94. duration: 3 * 1000,
  95. onClose: async () => {
  96. sessionStorage.clear();
  97. removeToken(); // must remove token first
  98. removeToken("codeToken");
  99. removeToken("systemSet");
  100. removeToken("userid");
  101. store.dispatch("app/toggleOutflag", false);
  102. await store.dispatch("user/resetToken");
  103. resetRouter();
  104. router.push(`/login`);
  105. location.reload();
  106. },
  107. });
  108. } else {
  109. Message({
  110. message: error.message,
  111. type: "error",
  112. duration: 5 * 1000,
  113. });
  114. }
  115. return Promise.reject(error);
  116. }
  117. );
  118. export default service;