user.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { defineStore } from 'pinia';
  2. import { createStorage } from '@/utils/Storage';
  3. import { store } from '@/store';
  4. import { ACCESS_TOKEN, CURRENT_USER, IS_LOCKSCREEN, TENANT_TOKEN } from '@/store/mutation-types';
  5. import { ResultEnum } from '@/enums/httpEnum';
  6. const Storage = createStorage({ storage: localStorage });
  7. import { getUserInfo, login } from '@/api/system/user';
  8. import { storage } from '@/utils/Storage';
  9. import { useGlobSetting } from '@/hooks/setting';
  10. const { tenantCode } = useGlobSetting();
  11. export interface IUserState {
  12. token: string;
  13. username: string;
  14. welcome: string;
  15. avatar: string;
  16. permissions: any[];
  17. info: any;
  18. tenantId: number;
  19. }
  20. export const useUserStore = defineStore({
  21. id: 'app-user',
  22. state: (): IUserState => ({
  23. token: Storage.get(ACCESS_TOKEN, ''),
  24. tenantId: Storage.get(TENANT_TOKEN, ''),
  25. username: '',
  26. welcome: '',
  27. avatar: '',
  28. permissions: [],
  29. info: Storage.get(CURRENT_USER, {}),
  30. }),
  31. getters: {
  32. getToken(): string {
  33. return this.token;
  34. },
  35. getTenantId(): number {
  36. return this.tenantId;
  37. },
  38. getAvatar(): string {
  39. return this.avatar;
  40. },
  41. getNickname(): string {
  42. return this.username;
  43. },
  44. getPermissions(): [any][] {
  45. return this.permissions;
  46. },
  47. getUserInfo(): any {
  48. return this.info;
  49. },
  50. /** 获取角色类型,可能为多个 */
  51. getRoleTypes(): string[] {
  52. return this.info.roleType.split(',');
  53. },
  54. },
  55. actions: {
  56. setTenantId(tenantId: number) {
  57. this.tenantId = tenantId;
  58. },
  59. setToken(token: string) {
  60. this.token = token;
  61. },
  62. setAvatar(avatar: string) {
  63. this.avatar = avatar;
  64. },
  65. setPermissions(permissions) {
  66. this.permissions = permissions;
  67. },
  68. setUserInfo(info) {
  69. this.info = info;
  70. },
  71. // 登录
  72. async login(userInfo) {
  73. try {
  74. const response = await login(userInfo);
  75. const { data: result, code } = response;
  76. if (parseInt(code) === ResultEnum.SUCCESS) {
  77. const ex = 7 * 24 * 60 * 60 * 1000;
  78. const token = result.satoken;
  79. const tenantId = result.tenantId;
  80. storage.set(ACCESS_TOKEN, token, ex);
  81. storage.set(TENANT_TOKEN, tenantId, ex);
  82. storage.set(CURRENT_USER, result, ex);
  83. storage.set(IS_LOCKSCREEN, false);
  84. storage.setCookie('satoken', token);
  85. storage.setCookie('tenantId', tenantId);
  86. this.setToken(token);
  87. this.setTenantId(tenantId);
  88. this.setUserInfo(result);
  89. }
  90. return Promise.resolve(response);
  91. } catch (e) {
  92. return Promise.reject(e);
  93. }
  94. },
  95. // 获取用户信息
  96. GetInfo() {
  97. return new Promise((resolve, reject) => {
  98. getUserInfo({ tenantCode })
  99. .then((res) => {
  100. const result = res;
  101. if (result.permissions && result.permissions.length) {
  102. const permissionsList = result.permissions;
  103. this.setPermissions(permissionsList);
  104. }
  105. this.setUserInfo(result);
  106. this.setAvatar(result.avatar);
  107. resolve(res);
  108. })
  109. .catch((error) => {
  110. reject(error);
  111. });
  112. });
  113. },
  114. // 登出
  115. async logout() {
  116. this.setPermissions([]);
  117. this.setUserInfo('');
  118. storage.remove(ACCESS_TOKEN);
  119. storage.remove(CURRENT_USER);
  120. return Promise.resolve('');
  121. },
  122. },
  123. });
  124. // Need to be used outside the setup
  125. export function useUserStoreWidthOut() {
  126. return useUserStore(store);
  127. }