🐛 fix i18n init bug

This commit is contained in:
landaiqing
2024-08-13 15:40:30 +08:00
parent 431e690f02
commit fa1301689a
24 changed files with 135 additions and 106 deletions

View File

@@ -2,13 +2,46 @@ import {createAlova} from 'alova';
import VueHook from 'alova/vue';
import useStore from "@/store";
import {axiosRequestAdapter} from "@alova/adapter-axios";
import {AxiosError, AxiosResponse} from "axios";
import {message} from "ant-design-vue";
import {localforageStorageAdapter} from "@/utils/alova/adapter/localforageStorageAdapter.ts";
import {createServerTokenAuthentication} from "alova/client";
import {AxiosError, AxiosResponse} from "axios";
import {handleCode} from "@/utils/errorCode/errorCodeHandler.ts";
import {message} from "ant-design-vue";
import i18n from "@/locales";
import {axiosRequestAdapter} from "@alova/adapter-axios";
import {refreshToken} from "@/api/user";
import router from "@/router/router.ts";
const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication<typeof VueHook,
typeof axiosRequestAdapter>({
refreshTokenOnSuccess: {
// 在请求前触发将接收到method参数并返回boolean表示token是否过期
isExpired: (response: AxiosResponse<any, any>, _method: any) => {
return response.data.code === 401;
},
// 当token过期时触发在此函数中触发刷新token
handler: async () => {
try {
const user = useStore().user;
const res: any = await refreshToken(user.getUser()?.refreshToken || '');
if (res.code === 0 && res.data) {
user.setUser({
userId: res.data.userId,
accessToken: res.data.access_token,
refreshToken: res.data.refresh_token,
expiresAt: res.data.expires_at,
});
}
} catch (error) {
// token刷新失败跳转回登录页
message.error(i18n.global.t('error.authTokenError')).then();
await router.push('/login');
throw error;
}
}
}
});
export const service = createAlova({
timeout: 5000,
baseURL: import.meta.env.VITE_APP_BASE_API,
@@ -16,43 +49,38 @@ export const service = createAlova({
// 请求适配器
requestAdapter: axiosRequestAdapter(),
l2Cache: localforageStorageAdapter,
cacheFor: {
// GET: {
// mode: 'restore',
// expire: 10 * 1000
// },
},
cacheLogger: import.meta.env.VITE_NODE_ENV === 'development',
cacheFor: {},
// 设置全局的请求拦截器
beforeRequest(method) {
beforeRequest: onAuthRequired(async (method: any) => {
if (!method.meta?.ignoreToken) {
const user = useStore().user;
method.config.headers.token = user.getUser()?.token;
method.config.headers.Authorization = `${import.meta.env.VITE_APP_TOKEN_KEY} ${user.getUser()?.accessToken}`;
}
const lang = useStore().lang;
method.config.headers['Accept-Language'] = lang.getLang();
},
method.config.headers['Accept-Language'] = lang.lang|| 'zh';
}),
// 响应拦截器
responded: {
onSuccess: async (response: AxiosResponse) => {
responded: onResponseRefreshToken({
onSuccess: async (response: AxiosResponse, _method: any) => {
if (response.data instanceof Blob) {
return response;
} else {
return response.data;
}
},
onError(error: AxiosError) {
const {response} = error;
if (response) {
handleCode(response.status);
}
if (!window.navigator.onLine) {
message.error(i18n.global.t('error.networkError')).then();
return Promise.reject(error);
}
}
}
onError:
(error: AxiosError, _method: any) => {
const {response} = error;
if (response) {
handleCode(response.status);
}
if (!window.navigator.onLine) {
message.error(i18n.global.t('error.networkError')).then();
return Promise.reject(error);
}
},
}),
});