123456789101112131415161718192021222324252627282930313233343536373839 |
- import { createAlova, Method } from 'alova';
- import adapterFetch from 'alova/fetch';
- import VueHook from 'alova/vue';
- import pinia, { useAccountStore } from '@/stores';
- import router from '@/router';
- const FileHttpClient = createAlova({
- requestAdapter: adapterFetch(),
- statesHook: VueHook,
- baseURL: `${ import.meta.env.SIX_API ?? '' }/manager/file/`,
- 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 FileHttpClient;
- async function analysisResponseBody(response: Response, method: Method) {
- const body = await response.json();
- const { code, msg, data, ...external } = body;
- if (code === 401) {
- await nextTick(() => router.replace({ name: 'login' }));
- }
- 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);
- }
|