1234567891011121314151617181920212223242526272829303132 |
- import { createAlova, Method } from 'alova';
- import adapterFetch from 'alova/fetch';
- import VueHook from 'alova/vue';
- import pinia, { useAccountStore } from '@/stores';
- const SystemHttpClient = createAlova({
- requestAdapter: adapterFetch(),
- statesHook: VueHook,
- baseURL: `${ import.meta.env.SIX_API ?? '' }/manager/system/`,
- async beforeRequest(method) {
- if (!method.config.meta?.ignoreToken) method.config.headers.Authorization ??= useAccountStore(pinia).token;
- },
- responded: {
- async onSuccess(response, method) {
- if (response.status === 200) {
- return analysisResponseBody(response, method);
- }
- },
- async onError(error, method) {},
- async onComplete(method) {},
- },
- });
- export default SystemHttpClient;
- async function analysisResponseBody(response: Response, method: Method) {
- const body = await response.json();
- const { code, msg, data, ...external } = body;
- if (code !== 200) throw method.meta?.exception?.(msg, response, method) ?? msg;
- ['success', 'warn', 'error'].forEach((key) => Reflect.deleteProperty(external, key));
- return Object.assign({}, external, data);
- }
|