Browse Source

chore: fault tolerance

master
wangxiang 2 years ago
parent
commit
ece23a42b1
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 2
      src/api/platform/core/controller/menu.ts
  2. 2
      src/api/platform/core/controller/user.ts
  3. 18
      src/store/modules/user.ts
  4. 6
      types/axios.d.ts

2
src/api/platform/core/controller/menu.ts

@ -11,4 +11,4 @@ enum Api {
} }
/** 获取用户菜单 */ /** 获取用户菜单 */
export const listMenuRoute = () => defHttp.get<MenuRouteResult>({ url: Api.list }); export const listMenuRoute = () => defHttp.get<MenuRouteResult>({ url: Api.list }, { retryRequest: { isOpenRetry: false } });

2
src/api/platform/core/controller/user.ts

@ -46,7 +46,7 @@ export const login = (params: LoginParams) => {
}; };
/** 获取当前用户信息 */ /** 获取当前用户信息 */
export const getUserInfo = () => defHttp.get<KiccUser>({ url: Api.getUserInfo }); export const getUserInfo = () => defHttp.get<KiccUser>({ url: Api.getUserInfo }, { retryRequest: { isOpenRetry: false } });
/** 登出 */ /** 登出 */
export const logout = () => defHttp.delete({ url: Api.logout }); export const logout = () => defHttp.delete({ url: Api.logout });

18
src/store/modules/user.ts

@ -28,7 +28,7 @@ import { merge } from 'lodash-es';
import { RequestOptions } from '/#/axios'; import { RequestOptions } from '/#/axios';
interface UserState { interface UserState {
userInfo: Nullable<KiccUser>; userInfo: KiccUser;
sessionTimeout?: boolean; sessionTimeout?: boolean;
lastUpdateTime: number; lastUpdateTime: number;
roleIds: string[]; roleIds: string[];
@ -95,7 +95,7 @@ export const useUserStore = defineStore({
this.refresh_token = refreshToken; this.refresh_token = refreshToken;
setAuthCache(REFRESH_TOKEN_KEY, refreshToken); setAuthCache(REFRESH_TOKEN_KEY, refreshToken);
}, },
setUserInfo(userInfo: Nullable<KiccUser>) { setUserInfo(userInfo: Partial<KiccUser>) {
this.userInfo = userInfo; this.userInfo = userInfo;
this.lastUpdateTime = new Date().getTime(); this.lastUpdateTime = new Date().getTime();
setAuthCache(USER_INFO_KEY, userInfo); setAuthCache(USER_INFO_KEY, userInfo);
@ -105,9 +105,7 @@ export const useUserStore = defineStore({
}, },
resetState(): void { resetState(): void {
this.setSessionTimeout(false); this.setSessionTimeout(false);
this.setUserInfo(null); this.setUserInfo({});
this.setAccessToken('');
this.setRefreshToken('');
this.setRoleIds([]); this.setRoleIds([]);
this.setPermissions([]); this.setPermissions([]);
}, },
@ -127,6 +125,7 @@ export const useUserStore = defineStore({
} }
const data = await login(loginParams); const data = await login(loginParams);
const { access_token, refresh_token } = data; const { access_token, refresh_token } = data;
this.setUserInfo(data.user_info);
this.setAccessToken(access_token); this.setAccessToken(access_token);
this.setRefreshToken(refresh_token); this.setRefreshToken(refresh_token);
return this.afterLoginAction(goHome); return this.afterLoginAction(goHome);
@ -173,16 +172,15 @@ export const useUserStore = defineStore({
this.setRoleIds(userInfo.roleIds); this.setRoleIds(userInfo.roleIds);
this.setPermissions(userInfo.permissions); this.setPermissions(userInfo.permissions);
return userInfo; return userInfo;
} catch (e) { } catch (error) { console.error(error); }
// 防止 system-biz 微服务挂掉后导致token授权成功重新登陆覆盖授权客户端密钥 return Promise.resolve({} as KiccUser);
this.resetState();
throw Error(t('sys.api.errMsg503'));
}
}, },
/** 登出 */ /** 登出 */
async logout(goLogin = false) { async logout(goLogin = false) {
await logout(); await logout();
this.resetState(); this.resetState();
this.setAccessToken('');
this.setRefreshToken('');
goLogin && await router.push(PageEnum.BASE_LOGIN); goLogin && await router.push(PageEnum.BASE_LOGIN);
}, },
/** 退出前确认 */ /** 退出前确认 */

6
types/axios.d.ts vendored

@ -40,9 +40,9 @@ export interface RequestOptions {
/** 请求重试请求 */ /** 请求重试请求 */
export interface RetryRequest { export interface RetryRequest {
isOpenRetry: boolean; isOpenRetry?: boolean;
count: number; count?: number;
waitTime: number; waitTime?: number;
} }
/** 响应信息主体 */ /** 响应信息主体 */

Loading…
Cancel
Save