request.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import axios, { AxiosRequestConfig } from 'axios';
  2. import qs from 'querystring';
  3. import { ElMessage } from 'element-plus';
  4. import useMainStore from '@/store/useMainStore';
  5. import { BaseLoginUrl, DA_HUA_URL_PREFIX } from '@/constants/constants';
  6. import { useDaHuaStore } from '@/store';
  7. const baseURL =
  8. process.env.NODE_ENV === 'production'
  9. ? 'http://sqpcbg.xt.wenhq.top:8083/api'
  10. : '/api';
  11. const CancelToken = axios.CancelToken;
  12. const source = CancelToken.source();
  13. let timer: NodeJS.Timeout;
  14. axios.interceptors.request.use((config) => {
  15. const main = useMainStore();
  16. config.cancelToken = new axios.CancelToken((cancel) => {
  17. main.pushReqToken(cancel);
  18. });
  19. return config;
  20. });
  21. axios.interceptors.response.use(
  22. (res) => {
  23. if (res.status >= 200 && res.status < 300) {
  24. if (res.data?.code === 200) {
  25. return res.data;
  26. }
  27. if (res.data?.code === 401) {
  28. ElMessage.error({
  29. // message: `401. 没有权限访问该接口: ${res.config.url}`,
  30. message: `401. 没有权限访问该接口`,
  31. });
  32. const main = useMainStore();
  33. main.clearReqToken();
  34. window.localStorage.setItem('Authorization', '');
  35. window.location.href = BaseLoginUrl;
  36. throw Error(res.statusText);
  37. }
  38. if (res.data?.code === 404) {
  39. ElMessage.error({ message: '404. 未找到该接口!' });
  40. throw Error(res.statusText);
  41. }
  42. if (res.data?.code >= 500) {
  43. ElMessage.error({ message: res.data?.msg ?? '系统异常, 请稍后重试!' });
  44. throw Error(res.statusText);
  45. }
  46. }
  47. if (res.status === 401) {
  48. ElMessage.error({
  49. message: `401. 没有权限访问该接口: ${res.config.url}`,
  50. });
  51. throw Error(res.statusText);
  52. }
  53. if (res.status === 404) {
  54. ElMessage.error({ message: '404. 未找到该接口!' });
  55. throw Error(res.statusText);
  56. }
  57. if (res.status >= 500) {
  58. ElMessage.error({ message: '系统异常, 请稍后重试!' });
  59. throw Error(res.statusText);
  60. }
  61. return res.data;
  62. },
  63. (error) => {
  64. // ElMessage.error({ message: '系统异常, 请稍后重试!' });
  65. const {
  66. status,
  67. config: { url },
  68. } = error.response;
  69. if (status === 401 && url?.includes(DA_HUA_URL_PREFIX)) {
  70. clearTimeout(timer);
  71. const dahuaStore = useDaHuaStore();
  72. dahuaStore.timer && clearInterval(dahuaStore.timer);
  73. timer = setTimeout(() => {
  74. dahuaStore.DAHUALogin();
  75. }, 1000);
  76. }
  77. throw Error(error);
  78. },
  79. );
  80. export default function request<T>(
  81. method: AxiosRequestConfig['method'] = 'GET',
  82. confifg: AxiosRequestConfig & {},
  83. ): Promise<T> {
  84. return axios.request({
  85. method,
  86. baseURL,
  87. ...confifg,
  88. headers: {
  89. Accept: 'application/json',
  90. 'Content-Type': 'application/json',
  91. Authorization:
  92. 'Bearer ' + window.localStorage.getItem('Authorization') ?? '',
  93. ...confifg.headers,
  94. },
  95. });
  96. }