user.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { acceptHMRUpdate, defineStore } from 'pinia';
  2. interface BasicUserInfo {
  3. /**
  4. * 头像
  5. */
  6. avatar: string;
  7. /**
  8. * 用户昵称
  9. */
  10. realName: string;
  11. /**
  12. * 用户角色
  13. */
  14. roles?: string[];
  15. /**
  16. * 用户id
  17. */
  18. userId: string;
  19. /**
  20. * 用户名
  21. */
  22. username: string;
  23. }
  24. interface AccessState {
  25. /**
  26. * 用户信息
  27. */
  28. userInfo: BasicUserInfo | null;
  29. /**
  30. * 用户角色
  31. */
  32. userRoles: string[];
  33. }
  34. /**
  35. * @zh_CN 用户信息相关
  36. */
  37. export const useUserStore = defineStore('core-user', {
  38. actions: {
  39. setUserInfo(userInfo: BasicUserInfo | null) {
  40. // 设置用户信息
  41. this.userInfo = userInfo;
  42. // 设置角色信息
  43. const roles = userInfo?.roles ?? [];
  44. this.setUserRoles(roles);
  45. },
  46. setUserRoles(roles: string[]) {
  47. this.userRoles = roles;
  48. },
  49. },
  50. state: (): AccessState => ({
  51. userInfo: null,
  52. userRoles: [],
  53. }),
  54. });
  55. // 解决热更新问题
  56. const hot = import.meta.hot;
  57. if (hot) {
  58. hot.accept(acceptHMRUpdate(useUserStore, hot));
  59. }