request.js 2.7 KB

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