index.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { defineStore } from 'pinia';
  2. import {
  3. login as userLogin,
  4. logout as userLogout,
  5. getUserInfo,
  6. LoginData,
  7. Data,
  8. } from '@/api/user';
  9. import useAuth from '@/utils/auth';
  10. import { removeRouteListener } from '@/utils/route-listener';
  11. import { UserState } from './types';
  12. import useAppStore from '../app';
  13. const { setToken, clearToken } = useAuth();
  14. const useUserStore = defineStore('user', {
  15. state: (): UserState => ({
  16. name: undefined,
  17. avatar: undefined,
  18. organization: undefined,
  19. email: undefined,
  20. personalWebsite: undefined,
  21. jobName: undefined,
  22. organizationName: undefined,
  23. phone: undefined,
  24. registrationDate: undefined,
  25. accountId: undefined,
  26. certification: undefined,
  27. role: '',
  28. }),
  29. getters: {
  30. userInfo(state: UserState): UserState {
  31. return { ...state };
  32. },
  33. },
  34. actions: {
  35. switchRoles() {
  36. return new Promise(resolve => {
  37. this.role = this.role === 'user' ? 'admin' : 'user';
  38. resolve(this.role);
  39. });
  40. },
  41. // Set user's information
  42. setInfo(partial: Partial<UserState>) {
  43. this.$patch(partial);
  44. },
  45. // Reset user's information
  46. resetInfo() {
  47. this.$reset();
  48. },
  49. // Get user's information
  50. async info(data: Data) {
  51. // const res = await getUserInfo();
  52. const { name } = data;
  53. this.setInfo({ name: name, role: 'admin' });
  54. },
  55. // Login
  56. async login(loginForm: LoginData) {
  57. try {
  58. const params = {
  59. name: loginForm.username,
  60. password: loginForm.password,
  61. };
  62. const res = await userLogin(params);
  63. setToken(res.data.token, res.data.refreshToken);
  64. console.log('aaaddd', res.data);
  65. this.info(res.data);
  66. return res;
  67. } catch (err) {
  68. clearToken();
  69. throw err;
  70. }
  71. },
  72. logoutCallBack() {
  73. const appStore = useAppStore();
  74. this.resetInfo();
  75. clearToken();
  76. removeRouteListener();
  77. appStore.clearServerMenu();
  78. },
  79. // Logout
  80. async logout() {
  81. try {
  82. // await userLogout();
  83. } finally {
  84. this.logoutCallBack();
  85. }
  86. },
  87. },
  88. });
  89. export default useUserStore;