request.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import axios from "axios";
  2. import { Message } from "element-ui";
  3. import router from "../router/index";
  4. // request.js 文件中新增接收 router 的能力
  5. const service = axios.create({
  6. baseURL: window?._BASE_CONFIG?.API || "/api",
  7. withCredentials: true,
  8. timeout: 10000,
  9. });
  10. const writeList = ["/api/energy-manage-service/sysuserinfo/open/userLogin"];
  11. /**
  12. * 请求拦截器
  13. * 统一处理请求拦截,如:添加token等
  14. */
  15. service.interceptors.request.use(
  16. (config) => {
  17. if (!writeList.includes(config.url)) {
  18. const token = JSON.parse(sessionStorage.getItem("vuex"))?.auth?.userInfo
  19. ?.token;
  20. if (token) {
  21. config.headers.token = token;
  22. config.headers.showIp = "106.120.102.238";
  23. } else {
  24. router.push("/login");
  25. }
  26. }
  27. return config;
  28. },
  29. (error) => {
  30. return Promise.reject(error);
  31. }
  32. );
  33. /**
  34. * 响应拦截器
  35. * 统一处理响应拦截
  36. * 如:重定向、消息提示等操作
  37. */
  38. service.interceptors.response.use(
  39. async (response) => {
  40. const { data } = response;
  41. // console.log("500", response);
  42. if (data?.code) {
  43. if (data.code !== 200) {
  44. Message({
  45. message: data.msg || "Error",
  46. type: "error",
  47. duration: 5 * 1000,
  48. });
  49. return Promise.reject(new Error(data.msg || "Error"));
  50. } else if (data.code === 500) {
  51. Message({
  52. message: "查看接口网络连接是否存在问题",
  53. type: "error",
  54. duration: 5 * 1000,
  55. });
  56. } else {
  57. return data;
  58. }
  59. } else if (data.type === "application/octet-stream") {
  60. return response;
  61. } else if (data.type === "application/json") {
  62. const resData = JSON.parse(await data.text());
  63. if (resData.code !== 200) {
  64. Message({
  65. message: resData.msg || "Error",
  66. type: "error",
  67. duration: 5 * 1000,
  68. });
  69. return Promise.reject(new Error(resData.msg || "Error"));
  70. } else {
  71. return resData;
  72. }
  73. }
  74. },
  75. (error) => {
  76. const { response } = error;
  77. // console.log("500", error);
  78. if (response) {
  79. if (response.status === 401) {
  80. window.location = response.data;
  81. } else if (response.status === 500) {
  82. Message({
  83. message: "查看网络连接是否存在问题",
  84. type: "error",
  85. duration: 5 * 1000,
  86. });
  87. // router.push("/login");
  88. } else {
  89. Message({
  90. message: response.data.message || error.message,
  91. type: "error",
  92. duration: 5 * 1000,
  93. });
  94. }
  95. } else {
  96. Message({
  97. message: error.message,
  98. type: "error",
  99. duration: 5 * 1000,
  100. });
  101. }
  102. return Promise.reject(error);
  103. }
  104. );
  105. /**
  106. * 统一处理请求
  107. * @param {Object} requestObj 请求参数
  108. */
  109. const request = async (requestObj) => {
  110. try {
  111. const {
  112. url,
  113. method,
  114. data = {},
  115. timeout,
  116. params,
  117. responseType,
  118. } = requestObj;
  119. const response = await service({
  120. url,
  121. method: method || "post",
  122. data,
  123. timeout: timeout || 300000,
  124. params: params || (method && method.toLowerCase() === "get" ? data : {}),
  125. responseType: responseType || "json",
  126. });
  127. return response;
  128. } catch (error) {
  129. // console.error("Request error:", error);
  130. throw error;
  131. }
  132. };
  133. export default request;