wangzhibo
2026-07-16 b57020623cf0c946706573bf102e548c3a544423
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
import { defineStore } from 'pinia';
import { ref } from 'vue';
import { storage } from '/@/cool/utils';
import { service, router } from '/@/cool';
 
// 本地缓存
const data = storage.info();
 
export const useUserStore = defineStore('user', function () {
    // 标识
    const token = ref<string>(data.token);
 
    // 设置标识
    function setToken(data: {
        token: string;
        expire: number;
        refreshToken: string;
        refreshExpire: number;
    }) {
        // 请求的唯一标识
        token.value = data.token;
        storage.set('token', data.token, data.expire);
 
        // 刷新 token 的唯一标识
        storage.set('refreshToken', data.refreshToken, data.refreshExpire);
    }
 
    // 刷新标识
    async function refreshToken(): Promise<string> {
        return new Promise((resolve, reject) => {
            service.base.open
                .refreshToken({
                    refreshToken: storage.get('refreshToken')
                })
                .then(res => {
                    setToken(res);
                    resolve(res.token);
                })
                .catch(err => {
                    logout();
                    reject(err);
                });
        });
    }
 
    // 用户信息
    const info = ref<Eps.BaseSysUserEntity | null>(data.userInfo);
 
    // 设置用户信息
    function set(value: any) {
        info.value = value;
        storage.set('userInfo', value);
    }
 
    // 清除用户
    function clear() {
        storage.remove('userInfo');
        storage.remove('token');
        token.value = '';
        info.value = null;
    }
 
    // 退出
    async function logout() {
        clear();
        router.clear();
        router.push('/login');
    }
 
    // 获取用户信息
    async function get() {
        return service.base.comm.person().then(res => {
            set(res);
            return res;
        });
    }
 
    return {
        token,
        info,
        get,
        set,
        logout,
        clear,
        setToken,
        refreshToken
    };
});