123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import type { UserInfo } from '/#/store';
- import type { ErrorMessageMode } from '/@/utils/http/axios/types';
- import { defineStore } from 'pinia';
- import { store } from '/@/store';
- import { RoleEnum } from '/@/enums/roleEnum';
- import { PageEnum } from '/@/enums/pageEnum';
- import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum';
- import { getAuthCache, setAuthCache } from '/@/utils/auth';
- import {
- GetUserInfoByUserIdModel,
- GetUserInfoByUserIdParams,
- LoginParams,
- } from '/@/api/sys/model/userModel';
- import { getUserInfoById, loginApi } from '/@/api/sys/user';
- import { useI18n } from '/@/hooks/web/useI18n';
- import { useMessage } from '/@/hooks/web/useMessage';
- import router from '/@/router';
- interface UserState {
- userInfo: Nullable<UserInfo>;
- token?: string;
- roleList: RoleEnum[];
- }
- export const useUserStore = defineStore({
- id: 'app-user',
- state: (): UserState => ({
- // user info
- userInfo: null,
- // token
- token: undefined,
- // roleList
- roleList: [],
- }),
- getters: {
- getUserInfo(): UserInfo {
- return this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {};
- },
- getToken(): string {
- return this.token || getAuthCache<string>(TOKEN_KEY);
- },
- getRoleList(): RoleEnum[] {
- return this.roleList.length > 0 ? this.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY);
- },
- },
- actions: {
- setToken(info: string) {
- this.token = info;
- setAuthCache(TOKEN_KEY, info);
- },
- setRoleList(roleList: RoleEnum[]) {
- this.roleList = roleList;
- setAuthCache(ROLES_KEY, roleList);
- },
- setUserInfo(info: UserInfo) {
- this.userInfo = info;
- setAuthCache(USER_INFO_KEY, info);
- },
- resetState() {
- this.userInfo = null;
- this.token = '';
- this.roleList = [];
- },
- /**
- * @description: login
- */
- async login(
- params: LoginParams & {
- goHome?: boolean;
- mode?: ErrorMessageMode;
- }
- ): Promise<GetUserInfoByUserIdModel | null> {
- try {
- const { goHome = true, mode, ...loginParams } = params;
- const data = await loginApi(loginParams, mode);
- const { token, userId } = data;
- // save token
- this.setToken(token);
- // get user info
- const userInfo = await this.getUserInfoAction({ userId });
- goHome && (await router.replace(PageEnum.BASE_HOME));
- return userInfo;
- } catch (error) {
- return null;
- }
- },
- async getUserInfoAction({ userId }: GetUserInfoByUserIdParams) {
- const userInfo = await getUserInfoById({ userId });
- const { roles } = userInfo;
- const roleList = roles.map((item) => item.value) as RoleEnum[];
- this.setUserInfo(userInfo);
- this.setRoleList(roleList);
- return userInfo;
- },
- /**
- * @description: logout
- */
- logout(goLogin = false) {
- goLogin && router.push(PageEnum.BASE_LOGIN);
- },
- /**
- * @description: Confirm before logging out
- */
- confirmLoginOut() {
- const { createConfirm } = useMessage();
- const { t } = useI18n();
- createConfirm({
- iconType: 'warning',
- title: t('sys.app.logoutTip'),
- content: t('sys.app.logoutMessage'),
- onOk: async () => {
- await this.logout(true);
- },
- });
- },
- },
- });
- // Need to be used outside the setup
- export function useUserStoreWidthOut() {
- return useUserStore(store);
- }
|