users.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { defineStore } from 'pinia';
  2. import { store } from '@/store';
  3. import { ACCESS_TOKEN, CURRENT_USER, IM_TOKEN } from '@/store/mutation-types';
  4. import { storage } from '@/utils/storage';
  5. import { userLogin, getUserInfo } from '@/api/user';
  6. export interface IUserState {
  7. token: string;
  8. imToken: string;
  9. username: string;
  10. avatar: string;
  11. info: any;
  12. imUserInfo: any;
  13. noReadCount: number;
  14. }
  15. export const useUserStore = defineStore('user-store', {
  16. state: (): IUserState => ({
  17. token: storage.get(ACCESS_TOKEN, ''),
  18. imToken: storage.get(IM_TOKEN, ''),
  19. username: '',
  20. avatar: '',
  21. noReadCount: 0, // 未读数量
  22. info: storage.get(CURRENT_USER, {}),
  23. imUserInfo: {} // IM
  24. }),
  25. getters: {
  26. getNoReadCount(): number {
  27. return this.noReadCount;
  28. },
  29. getToken(): string {
  30. return this.token;
  31. },
  32. getImToken(): string {
  33. return this.imToken;
  34. },
  35. getAvatar(): string {
  36. return this.avatar;
  37. },
  38. getNickname(): string {
  39. return this.username;
  40. },
  41. getUserInfo(): any {
  42. return this.info;
  43. },
  44. getImUserInfo(): any {
  45. return this.imUserInfo;
  46. }
  47. },
  48. actions: {
  49. setNoReadCount(count: number) {
  50. this.noReadCount = count;
  51. },
  52. setToken(token: string) {
  53. this.token = token;
  54. },
  55. setImToken(token: string) {
  56. this.imToken = token;
  57. },
  58. setAvatar(avatar: string) {
  59. this.avatar = avatar;
  60. },
  61. setUsername(username: string) {
  62. this.username = username;
  63. },
  64. setUserInfo(info: any) {
  65. this.info = info;
  66. },
  67. setImUserInfo(info: any) {
  68. this.imUserInfo = info;
  69. },
  70. // 登录
  71. async login(userInfo: any) {
  72. try {
  73. const { data } = await userLogin(userInfo);
  74. const userToken = data.token_type + ' ' + data.access_token;
  75. const ex = 7 * 24 * 60 * 60 * 1000;
  76. storage.set(ACCESS_TOKEN, userToken, ex);
  77. // storage.get(IM_TOKEN, data.imToken);
  78. this.setToken(userToken);
  79. // this.setImToken(data.imToken);
  80. return Promise.resolve();
  81. } catch (e) {
  82. return Promise.reject(e);
  83. }
  84. },
  85. // 获取用户信息
  86. async getInfo() {
  87. return new Promise((resolve, reject) => {
  88. getUserInfo()
  89. .then((res: any) => {
  90. const result = res.data;
  91. this.setUserInfo(result);
  92. this.setAvatar(result.account.avatar);
  93. this.setUsername(result.nickname);
  94. resolve(true);
  95. })
  96. .catch((error: any) => {
  97. reject(error);
  98. });
  99. });
  100. },
  101. // 登出
  102. async logout() {
  103. this.setUserInfo('');
  104. storage.remove(ACCESS_TOKEN);
  105. storage.remove(CURRENT_USER);
  106. return Promise.resolve('');
  107. }
  108. }
  109. });
  110. // Need to be used outside the setup
  111. export function useUserStoreWidthOut() {
  112. return useUserStore(store);
  113. }