'-'
zhangwei
2025-07-29 2aa2da6ff94c0e88e7ba0638606881a3c04cf579
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
import { defineStore } from "pinia";
import {
  type userType,
  store,
  router,
  resetRouter,
  routerArrays,
  storageLocal
} from "../utils";
import {
  type LoginResult,
  type RefreshTokenResult,
  getLogin,
  refreshTokenApi,
  getChangeLogoInExRule
} from "@/api/user";
import { useMultiTagsStoreHook } from "./multiTags";
import {
  type DataInfo,
  setToken,
  setRoleListInfo,
  setNowRole,
  removeToken,
  userKey,
  setEnterpriseInfo
} from "@/utils/auth";
import { exRole } from "@/api/register/index";
import { cusExtendInfo } from "@/api/mine";
 
export const useUserStore = defineStore("pure-user", {
  state: (): userType => ({
    // 头像
    avatar: storageLocal().getItem<DataInfo<number>>(userKey)?.avatar ?? "",
    // 用户名
    username: storageLocal().getItem<DataInfo<number>>(userKey)?.username ?? "",
    // 昵称
    nickname: storageLocal().getItem<DataInfo<number>>(userKey)?.nickname ?? "",
    // 页面级别权限
    exRoles: storageLocal().getItem<DataInfo<number>>(userKey)?.exRoles ?? [],
    // 按钮级别权限
    permissions:
      storageLocal().getItem<DataInfo<number>>(userKey)?.permissions ?? [],
    // 是否勾选了登录页的免登录
    isRemembered: false,
    // 登录页的免登录存储几天,默认7天
    loginDay: 1,
    // 企业资料
    enterpriseInfo:
      storageLocal().getItem<DataInfo<number>>("enterpriseInfo") ?? {},
    nowRole: storageLocal().getItem<DataInfo<number>>("nowRole") ?? {},
    rolesList: storageLocal().getItem<DataInfo<number>>("rolesList") ?? []
  }),
  actions: {
    /** 存储头像 */
    SET_AVATAR(avatar: string) {
      this.avatar = avatar;
    },
    /** 存储用户名 */
    SET_USERNAME(username: string) {
      this.username = username;
    },
    /** 存储昵称 */
    SET_NICKNAME(nickname: string) {
      this.nickname = nickname;
    },
    /** 存储用户角色 */
    SET_ROLES(exRoles: Array<string>) {
      this.exRoles = exRoles;
    },
    /** 存储角色当前角色 */
    SET_NOW_ROLE(nowRole: object) {
      this.nowRole = nowRole;
    },
    /** 存储角色列表 */
    SET_ROLES_LIST(rolesList: Array<string>) {
      this.rolesList = rolesList;
    },
    /** 存储按钮级别权限 */
    SET_PERMS(permissions: Array<string>) {
      this.permissions = permissions;
    },
    /** 存储是否勾选了登录页的免登录 */
    SET_ISREMEMBERED(bool: boolean) {
      this.isRemembered = bool;
    },
    /** 设置登录页的免登录存储几天 */
    SET_LOGINDAY(value: number) {
      this.loginDay = Number(value);
    },
    // 设置企业资料
    SET_ENTERPRISEINFO(value: object) {
      this.loginDay = Number(value);
    },
    /** 登入 */
    async loginByUsername(obj) {
      return new Promise<LoginResult>((resolve, reject) => {
        getLogin(obj)
          .then(data => {
            if (data?.code == 200) {
              setToken(data.result);
              this.getNowRole(obj.exRuleCode);
            }
            resolve(data);
          })
          .catch(error => {
            reject(error);
          });
      });
    },
    /** 获取角色列表 */
    async getRoleList() {
      return new Promise<LoginResult>((resolve, reject) => {
        exRole()
          .then(data => {
            if (data?.code == 200) {
              setRoleListInfo(data.result);
              if (this.nowRole.code) {
                this.getNowRole(this.nowRole.code);
              }
            }
            resolve(data);
          })
          .catch(error => {
            reject(error);
          });
      });
    },
    /** 获取当前角色 */
    async getNowRole(code) {
      return new Promise<LoginResult>((resolve, reject) => {
        const data = this.rolesList.find(item => {
          return item.code == code;
        });
        setNowRole(data);
        resolve(data);
      });
    },
    /** 切换角色 */
    async changeLogoInExRule(obj) {
      return new Promise<LoginResult>((resolve, reject) => {
        getChangeLogoInExRule(obj)
          .then(data => {
            if (data?.code == 200) {
              setToken(data.result);
              this.getNowRole(obj.ruleCode);
              this.getCusExtendInfo();
            }
            resolve(data);
          })
          .catch(error => {
            reject(error);
          });
      });
    },
    async getCusExtendInfo() {
      return new Promise<LoginResult>((resolve, reject) => {
        cusExtendInfo()
          .then(data => {
            data.result.username = data.result.enterpriseName;
            if (data?.code == 200) {
              setEnterpriseInfo(data.result);
              resolve(data);
            }
          })
          .catch(error => {
            reject(error);
          });
      });
    },
    /** 前端登出(不调用接口) */
    logOut() {
      this.username = "";
      this.exRoles = [];
      this.permissions = [];
      removeToken();
      useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
      resetRouter();
      router.push("/index");
    },
    /** 刷新`token` */
    async handRefreshToken(data) {
      return new Promise<RefreshTokenResult>((resolve, reject) => {
        refreshTokenApi(data)
          .then(data => {
            if (data) {
              setToken(data.data);
              resolve(data);
            }
          })
          .catch(error => {
            reject(error);
          });
      });
    }
  }
});
 
export function useUserStoreHook() {
  return useUserStore(store);
}