system.request.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import { createAlova, Method } from 'alova';
  2. import adapterFetch from 'alova/fetch';
  3. import VueHook from 'alova/vue';
  4. import pinia, { useAccountStore } from '@/stores';
  5. const SystemHttpClient = createAlova({
  6. requestAdapter: adapterFetch(),
  7. statesHook: VueHook,
  8. baseURL: `${ import.meta.env.SIX_API ?? '' }/manager/system/`,
  9. async beforeRequest(method) {
  10. if (!method.config.meta?.ignoreToken) method.config.headers.Authorization ??= useAccountStore(pinia).token;
  11. },
  12. responded: {
  13. async onSuccess(response, method) {
  14. if (response.status === 200) {
  15. return analysisResponseBody(response, method);
  16. }
  17. },
  18. async onError(error, method) {},
  19. async onComplete(method) {},
  20. },
  21. });
  22. export default SystemHttpClient;
  23. async function analysisResponseBody(response: Response, method: Method) {
  24. const body = await response.json();
  25. const { code, msg, data, ...external } = body;
  26. if (code !== 200) throw method.meta?.exception?.(msg, response, method) ?? msg;
  27. ['success', 'warn', 'error'].forEach((key) => Reflect.deleteProperty(external, key));
  28. return Object.assign({}, external, data);
  29. }