user.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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: {
  18. userId: number;
  19. username: string;
  20. realName: string;
  21. avatar: string;
  22. desc: string;
  23. token: string;
  24. roleType: string;
  25. nickname: string;
  26. mobile: string;
  27. email: string;
  28. remark: string;
  29. tenantName: string;
  30. tenantCode: string;
  31. };
  32. tenantId: number;
  33. }
  34. export const useUserStore = defineStore({
  35. id: 'app-user',
  36. state: (): IUserState => ({
  37. token: Storage.get(ACCESS_TOKEN, ''),
  38. tenantId: Storage.get(TENANT_TOKEN, ''),
  39. // username: '',
  40. welcome: '',
  41. avatar: '',
  42. permissions: [],
  43. info: Storage.get(CURRENT_USER, {}),
  44. }),
  45. getters: {
  46. getToken(): string {
  47. return this.token;
  48. },
  49. getTenantId(): number {
  50. return this.tenantId;
  51. },
  52. getAvatar(): string {
  53. return this.avatar;
  54. },
  55. getNickname(): string {
  56. return this.info.username;
  57. },
  58. getPermissions(): [any][] {
  59. return this.permissions;
  60. },
  61. getUserInfo(): any {
  62. return this.info;
  63. },
  64. /** 获取角色类型,可能为多个 */
  65. getRoleTypes(): string[] {
  66. return this.info.roleType.split(',');
  67. },
  68. },
  69. actions: {
  70. setTenantId(tenantId: number) {
  71. this.tenantId = tenantId;
  72. },
  73. setToken(token: string) {
  74. this.token = token;
  75. },
  76. setAvatar(avatar: string) {
  77. this.avatar = avatar;
  78. },
  79. setPermissions(permissions) {
  80. this.permissions = permissions;
  81. },
  82. setUserInfo(info) {
  83. this.info = info;
  84. },
  85. // 登录
  86. async login(userInfo) {
  87. try {
  88. const response = await login(userInfo);
  89. const { data: result, code } = response;
  90. if (parseInt(code) === ResultEnum.SUCCESS) {
  91. const ex = 7 * 24 * 60 * 60 * 1000;
  92. const token = result.satoken;
  93. const tenantId = result.tenantId;
  94. storage.set(ACCESS_TOKEN, token, ex);
  95. storage.set(TENANT_TOKEN, tenantId, ex);
  96. storage.set(CURRENT_USER, result, ex);
  97. storage.set(IS_LOCKSCREEN, false);
  98. storage.setCookie('satoken', token);
  99. storage.setCookie('tenantId', tenantId);
  100. this.setToken(token);
  101. this.setTenantId(tenantId);
  102. this.setUserInfo(result);
  103. }
  104. return Promise.resolve(response);
  105. } catch (e) {
  106. return Promise.reject(e);
  107. }
  108. },
  109. // 获取用户信息
  110. GetInfo() {
  111. return new Promise((resolve, reject) => {
  112. getUserInfo({ tenantCode })
  113. .then((res) => {
  114. const result = res;
  115. if (result.permissions && result.permissions.length) {
  116. const permissionsList = result.permissions;
  117. this.setPermissions(permissionsList);
  118. }
  119. this.setUserInfo(result);
  120. this.setAvatar(result.avatar);
  121. resolve(res);
  122. })
  123. .catch((error) => {
  124. reject(error);
  125. });
  126. });
  127. },
  128. // 登出
  129. async logout() {
  130. this.setPermissions([]);
  131. this.setUserInfo('');
  132. storage.remove(ACCESS_TOKEN);
  133. storage.remove(CURRENT_USER);
  134. storage.remove('username');
  135. storage.remove('lxUsername');
  136. return Promise.resolve('');
  137. },
  138. checkPermission(permission: string) {
  139. return this.permissions.find((x) => x.value === permission);
  140. },
  141. },
  142. });
  143. // Need to be used outside the setup
  144. export function useUserStoreWidthOut() {
  145. return useUserStore(store);
  146. }