network.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {BaseResultContent} from '@models';
  2. import {NETWORK_URL} from '@utils';
  3. import axios from 'axios';
  4. import {useMessage} from 'naive-ui';
  5. // 普通请求
  6. const http = axios.create({
  7. baseURL: NETWORK_URL,
  8. headers: {
  9. 'Content-Type': 'application/json',
  10. 'Cache-Control': 'no-cache',
  11. },
  12. });
  13. const exportReg = /export|excel/i;
  14. http.interceptors.request.use(function(config) {
  15. if (config?.url) {
  16. const isExport = exportReg.test(config.url);
  17. isExport && (config.responseType = 'blob');
  18. }
  19. return config;
  20. });
  21. export async function request<T, R extends BaseResultContent<any>>(options: {
  22. method: 'POST' | 'GET' | 'PUT' | 'DELETE';
  23. url: string;
  24. data?: T;
  25. skipError?: boolean;
  26. useBody?: boolean;
  27. signal?: AbortSignal;
  28. }) {
  29. const {data, skipError, method, url, useBody, signal} = options;
  30. let res: BaseResultContent<any>;
  31. const useData = useBody ? useBody : method !== 'GET' && method !== 'DELETE';
  32. const message = useMessage();
  33. try {
  34. const result = await http.request<R>({
  35. method,
  36. url,
  37. data: useData ? data : void 0,
  38. params: !useData ? data : void 0,
  39. signal,
  40. });
  41. res = result.data;
  42. if (res.msg !== '200' && !skipError && !exportReg.test(url))
  43. message.error(res.errMsg);
  44. } catch (error: any) {
  45. res = {msg: '510', errMsg: 'NETWORK_ERROR'};
  46. if (!skipError && error.code !== 'ERR_CANCELED' && !exportReg.test(url))
  47. message.error(res.errMsg);
  48. }
  49. return res;
  50. }