zhengyiming
7 天以前 732ddea9dbac6192a081fe407d21e8075ea0d32e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import { defineStore } from 'pinia';
import { store } from '@/store';
import {
  getToken,
  setToken,
  removeToken,
  removeUserInfo,
  setUserInfo,
  getUserInfo,
  md5Encrypt,
} from '@/utils';
import { resetRouter, router } from '@/router';
import { useTagsViewStoreHook } from './tagsView';
import { usePermissionStoreHook } from './permission';
import { getAccountInfoFromAccessToken, AccountInfo } from '@bole-core/core';
import { useClearSubModule } from '@/hooks';
import { myClient } from '@/constants/query';
import * as authServices from '@/services/api/auth';
 
export interface UserState {
  token: string;
  userInfo: API.PasswordLoginCommandCallback;
}
 
function getDefaultState() {
  const accessToken = getToken();
  const userInfo = getUserInfo();
 
  return {
    token: accessToken,
    userInfo: userInfo || {},
  } as UserState;
}
 
export const useUserStore = defineStore({
  id: 'user',
  state: getDefaultState,
  getters: {
    accessToken(state) {
      return state.token;
    },
    user(state) {
      return state.userInfo;
    },
 
    userId(state) {
      return '';
    },
  },
  actions: {
    setToken(token: string) {
      this.token = token;
      setToken(token);
    },
    setUserInfo(userInfo: API.PasswordLoginCommandCallback) {
      this.userInfo = userInfo;
      setUserInfo(userInfo);
    },
 
    // 用户登入
    async loginByUsername(params: API.PasswordLoginCommand) {
      let res = await authServices.passwordLogin(
        {
          ...params,
          password: md5Encrypt(params.password),
          type: AppLocalConfig.userType,
          clientType: AppLocalConfig.clientType,
        },
        {
          showLoading: false,
        }
      );
      if (res) {
        this.setToken(res.accessToken);
        this.setUserInfo(res);
      }
    },
 
    // 登出 清空缓存
    logout(redirectPath = '/') {
      return new Promise(async (resolve) => {
        removeToken();
        removeUserInfo();
        this.resetState();
        resetRouter();
        myClient.removeQueries();
 
        await router.push(`/login?redirect=${redirectPath}`);
 
        const tagsViewStore = useTagsViewStoreHook();
        tagsViewStore.delAllViews();
        const { clearSubModule } = useClearSubModule();
        clearSubModule();
 
        const permissionStore = usePermissionStoreHook();
        permissionStore.resetModuleList();
        resolve(1);
      });
    },
 
    resetToken() {
      this.token = '';
      removeToken();
      this.resetState();
    },
 
    resetState() {
      Object.assign(this, getDefaultState());
    },
 
    async refreshToken(params: any) {
      return Promise.resolve({
        accessToken: '1222',
        expiresIn: 1000 * 60 * 24 * 60,
        creationTime: '2025-08-04 00:00:00',
        refreshToken: '1222',
      });
    },
  },
});
 
export function useUserStoreHook() {
  return useUserStore(store);
}