users.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. setUserInfo(info: any) {
  49. this.info = info;
  50. },
  51. // 登录
  52. async login(userInfo: any) {
  53. try {
  54. const { data } = await userLogin(userInfo);
  55. const userToken =
  56. data.authentication.token_type +
  57. ' ' +
  58. data.authentication.access_token;
  59. const ex = 7 * 24 * 60 * 60 * 1000;
  60. storage.set(ACCESS_TOKEN, userToken, ex);
  61. // storage.get(IM_TOKEN, data.imToken);
  62. this.setToken(userToken);
  63. // this.setImToken(data.imToken);
  64. return Promise.resolve();
  65. } catch (e) {
  66. return Promise.reject(e);
  67. }
  68. },
  69. // 获取用户信息
  70. async getInfo() {
  71. // const that = this;
  72. return new Promise((resolve, reject) => {
  73. // .then(res => {
  74. // const result = res.data;
  75. // this..setUserInfo(result);
  76. // that.setAvatar(result.account.avatar);
  77. // resolve(res);
  78. // })
  79. // .catch(error => {
  80. // reject(error);
  81. // });
  82. try {
  83. // getUserInfo().then((res: any) => {
  84. // console.log(res, 'res');
  85. // });
  86. resolve(true);
  87. } catch {
  88. reject();
  89. }
  90. });
  91. },
  92. // 登出
  93. async logout() {
  94. this.setUserInfo('');
  95. storage.remove(ACCESS_TOKEN);
  96. storage.remove(CURRENT_USER);
  97. return Promise.resolve('');
  98. }
  99. }
  100. });
  101. // Need to be used outside the setup
  102. export function useUserStoreWidthOut() {
  103. return useUserStore(store);
  104. }