user.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import {UserLoginData} from '@models';
  2. import {QUERY_CLIENT, USER_TOKEN_STORAGE} from '@utils';
  3. import {createStore} from 'zustand/vanilla';
  4. import {menuStore} from './menu';
  5. import {tabStore} from './tab';
  6. type UserStoreState = UserLoginData;
  7. type UserStoreAction = {
  8. init(data: UserLoginData): void;
  9. logout(): void;
  10. setMenu(menus: string[]): void;
  11. };
  12. function defaultValue(): UserStoreState {
  13. return {
  14. id: 0,
  15. realName: '',
  16. token: '',
  17. userName: '',
  18. menu: null,
  19. department: '',
  20. role: '',
  21. };
  22. }
  23. export const userStore = createStore<UserStoreState & UserStoreAction>(
  24. function (set) {
  25. // 刷新时不会丢掉用户状态
  26. const sessionData = sessionStorage.getItem(USER_TOKEN_STORAGE);
  27. const initValue = sessionData
  28. ? (JSON.parse(sessionData) as UserLoginData)
  29. : defaultValue();
  30. return {
  31. ...initValue,
  32. init(data) {
  33. set(data);
  34. },
  35. logout() {
  36. // 清除用户缓存
  37. sessionStorage.removeItem(USER_TOKEN_STORAGE);
  38. set(defaultValue());
  39. // 清除请求缓存
  40. QUERY_CLIENT.clear();
  41. // 清除菜单缓存
  42. menuStore.getState().clear();
  43. // 清除tab状态
  44. tabStore.getState().clear();
  45. },
  46. setMenu(menus) {
  47. set({menu: menus.join(',') + ','});
  48. },
  49. };
  50. },
  51. );