users.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. }
  13. export const useUserStore = defineStore('user-store', {
  14. state: (): IUserState => ({
  15. token: storage.get(ACCESS_TOKEN, ''),
  16. imToken: storage.get(IM_TOKEN, ''),
  17. username: '',
  18. avatar: '',
  19. info: storage.get(CURRENT_USER, {})
  20. }),
  21. getters: {
  22. getToken(): string {
  23. return this.token;
  24. },
  25. getImToken(): string {
  26. return this.imToken;
  27. },
  28. getAvatar(): string {
  29. return this.avatar;
  30. },
  31. getNickname(): string {
  32. return this.username;
  33. },
  34. getUserInfo(): object {
  35. return this.info;
  36. }
  37. },
  38. actions: {
  39. setToken(token: string) {
  40. this.token = token;
  41. },
  42. setImToken(token: string) {
  43. this.imToken = token;
  44. },
  45. setAvatar(avatar: string) {
  46. this.avatar = avatar;
  47. },
  48. setUsername(username: string) {
  49. this.username = username;
  50. },
  51. setUserInfo(info: any) {
  52. this.info = info;
  53. },
  54. // 登录
  55. async login(userInfo: any) {
  56. try {
  57. const { data } = await userLogin(userInfo);
  58. console.log(data, 'data');
  59. const userToken = data.token_type + ' ' + data.access_token;
  60. const ex = 7 * 24 * 60 * 60 * 1000;
  61. storage.set(ACCESS_TOKEN, userToken, ex);
  62. // storage.get(IM_TOKEN, data.imToken);
  63. this.setToken(userToken);
  64. // this.setImToken(data.imToken);
  65. return Promise.resolve();
  66. } catch (e) {
  67. return Promise.reject(e);
  68. }
  69. },
  70. // 获取用户信息
  71. async getInfo() {
  72. return new Promise((resolve, reject) => {
  73. getUserInfo()
  74. .then((res: any) => {
  75. const result = res.data;
  76. this.setUserInfo(result);
  77. this.setAvatar(result.account.avatar);
  78. this.setUsername(result.nickname);
  79. resolve(true);
  80. })
  81. .catch((error: any) => {
  82. reject(error);
  83. });
  84. });
  85. },
  86. // 登出
  87. async logout() {
  88. this.setUserInfo('');
  89. storage.remove(ACCESS_TOKEN);
  90. storage.remove(CURRENT_USER);
  91. return Promise.resolve('');
  92. }
  93. }
  94. });
  95. // Need to be used outside the setup
  96. export function useUserStoreWidthOut() {
  97. return useUserStore(store);
  98. }