alova.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import adapterMock from '@/request/mock';
  2. import pinia, { useAccountStore, usePlatformStore } from '@/stores';
  3. import { createAlova } from 'alova';
  4. import adapterFetch from 'alova/fetch';
  5. import VueHook from 'alova/vue';
  6. export default createAlova({
  7. baseURL: import.meta.env.SIX_REQUEST_BASE ?? '/',
  8. statesHook: VueHook,
  9. requestAdapter: import.meta.env.DEV ? adapterMock() : adapterFetch(),
  10. async beforeRequest(method) {
  11. const store = usePlatformStore(pinia);
  12. method.config.headers.warrant ??= store.serialNumber;
  13. if ( !method.config.meta?.ignoreToken ) method.config.headers.Authorization ??= useAccountStore(pinia).token;
  14. },
  15. responded: {
  16. async onSuccess(response, method) {
  17. try {
  18. if ( response.status >= 400 ) throw new Error(`${ response.statusText }(${ response.status })`);
  19. const result = await response.json();
  20. /* 接口修正 code */
  21. if ( result.success === true || result.code === 200 ) result.code = 0;
  22. const { success = false, code = success ? 0 : -1, data, msg: message = '未知错误', ...props } = result;
  23. if ( code === 0 ) { return data; } else {}
  24. throw { ...props, message: `${ message }` };
  25. } catch ( e: any ) {
  26. if ( !method.meta?.ignoreException ) {
  27. const { Notify } = await import('@/platform/notify.ui');
  28. Notify.error(e?.message);
  29. }
  30. throw e;
  31. }
  32. },
  33. async onError(error, method) {
  34. if ( !method.meta?.ignoreException && error.name !== 'AbortError' ) {
  35. const { Notify } = await import('@/platform/notify.ui');
  36. Notify.error(`${ error.message }`);
  37. }
  38. },
  39. onComplete() {},
  40. },
  41. });