request.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import {BaseResultContent} from '@models';
  2. import {userStore} from '@stores';
  3. import {E2E_NETWORK_URL, NETWORK_ERROR_TIPS, NETWORK_URL} from '@utils';
  4. import {message} from 'antd';
  5. import axios from 'axios';
  6. const http = axios.create({
  7. baseURL: process.env.IS_E2E ? E2E_NETWORK_URL : NETWORK_URL,
  8. headers: {
  9. 'Content-Type': 'application/json',
  10. 'Cache-Control': 'no-cache',
  11. },
  12. timeout: 5000,
  13. });
  14. const exportUrlList = ['productExcel', 'getRemovalHalfProductExcel'];
  15. const exportReg = /export/i;
  16. http.interceptors.request.use(function(config) {
  17. if (config?.url) {
  18. const isExport = exportReg.test(config.url)
  19. || exportUrlList.some(val => config.url ? config.url.includes(val) : false);
  20. isExport && (config.responseType = 'blob');
  21. }
  22. const token = userStore.getState().token;
  23. config.headers && (config.headers.token = token);
  24. return config;
  25. });
  26. export async function request<T, R extends BaseResultContent<any>>(options: {
  27. method: 'POST' | 'GET' | 'PUT' | 'DELETE';
  28. url: string;
  29. data?: T;
  30. skipError?: boolean;
  31. useBody?: boolean;
  32. }) {
  33. const {data, skipError, method, url, useBody} = options;
  34. let res: BaseResultContent<any>;
  35. const useData = useBody ? useBody : (method !== 'GET' && method !== 'DELETE');
  36. try {
  37. const result = await http.request<R>({
  38. method,
  39. url,
  40. data: useData ? data : void 0,
  41. params: !useData ? data : void 0,
  42. });
  43. res = result.data;
  44. if (res.msg !== '200' && !skipError) message.error(res.errMsg);
  45. } catch (error) {
  46. res = {msg: '510', errMsg: NETWORK_ERROR_TIPS};
  47. if (!skipError) message.error(res.errMsg);
  48. }
  49. return res;
  50. }