兰宝车间质量管理系统-前端
LiuHao
2023-04-02 251d2411f235e23209d57173857e05b637729ce8
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
import { to } from 'await-to-js';
import defAva from '@/assets/images/profile.jpg';
import store from '@/store';
import { getToken, removeToken, setToken } from '@/utils/auth';
import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
import { LoginData } from '@/api/types';
 
export const useUserStore = defineStore('user', () => {
    const token = ref(getToken());
    const name = ref('');
    const nickname = ref('');
    const userId = ref<string | number>('');
    const avatar = ref('');
    const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
    const permissions = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
 
    /**
     * 登录
     * @param userInfo
     * @returns
     */
    const login = async (userInfo: LoginData): Promise<void> => {
        const [err, res] = await to(loginApi(userInfo));
        if (res) {
            const data = res.data;
            setToken(data.token);
            token.value = data.token;
            return Promise.resolve();
        }
        return Promise.reject(err);
    };
 
    // 获取用户信息
    const getInfo = async (): Promise<void> => {
        const [err, res] = await to(getUserInfo());
        if (res) {
            const data = res.data;
            const user = data.user;
            const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
 
            if (data.roles && data.roles.length > 0) {
                // 验证返回的roles是否是一个非空数组
                roles.value = data.roles;
                permissions.value = data.permissions;
            } else {
                roles.value = ['ROLE_DEFAULT'];
            }
            name.value = user.userName;
            nickname.value = user.nickName;
            avatar.value = profile;
            userId.value = user.userId;
            return Promise.resolve();
        }
        return Promise.reject(err);
    };
 
    // 注销
    const logout = async (): Promise<void> => {
        await logoutApi();
        token.value = '';
        roles.value = [];
        permissions.value = [];
        removeToken();
    };
 
    return {
        userId,
        token,
        nickname,
        avatar,
        roles,
        permissions,
        login,
        getInfo,
        logout
    };
});
 
export default useUserStore;
// 非setup
export function useUserStoreHook() {
    return useUserStore(store);
}