users.ts 3.3 KB

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