zhangwei
3 天以前 cfb72890898236afab5e691fc11abd620b3f157f
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
import { defineStore } from 'pinia';
import { Local, Session } from '/@/utils/storage';
import Watermark from '/@/utils/watermark';
import { useThemeConfig } from '/@/stores/themeConfig';
import { i18n } from "/@/i18n";
 
import { getAPI } from '/@/utils/axios-utils';
import { SysAuthApi, SysConstApi, SysDictTypeApi } from '/@/api-services/api';
 
const { t } = i18n.global;
 
/**
 * 用户信息
 * @methods setUserInfos 设置用户信息
 */
export const useUserInfo = defineStore('userInfo', {
    state: (): UserInfosState => ({
        userInfos: {} as any,
        constList: [] as any,
        dictList: {} as any,
    }),
    getters: {
        // // 获取系统常量列表
        // async getSysConstList(): Promise<any[]> {
        //     var res = await getAPI(SysConstApi).apiSysConstListGet();
        //     this.constList = res.data.result ?? [];
        //     return this.constList;
        // },
    },
    actions: {
        // 存储用户信息到浏览器缓存
        async setUserInfos() {
            this.userInfos = Session.get('userInfo') ?? <UserInfos>await this.getApiUserInfo();
        },
 
        // 存储常量信息到浏览器缓存
        async setConstList() {
            this.constList = Session.get('constList') ?? <any[]>await this.getSysConstList();
            if (!Session.get('constList')) Session.set('constList', this.constList);
        },
 
        // 存储字典信息到浏览器缓存
        async setDictList() {
            var dictList = await getAPI(SysDictTypeApi).apiSysDictTypeAllDictListGet().then(res => res.data.result ?? {});
            var dictListTemp = JSON.parse(JSON.stringify(dictList));
 
            await Promise.all(Object.keys(dictList).map(async (key) => {
                dictList[key].forEach((da: any, index: any) => {
                    setDictLangMessageAsync(dictListTemp[key][index]);
                });
                // 如果 key 以 "Enum" 结尾,则转换 value 为数字
                if (key.endsWith("Enum")) {
                    dictListTemp[key].forEach((e: any) => e.value = Number(e.value));
                }
            }))
            this.dictList = dictListTemp;
        },
 
        // 获取当前用户信息
        getApiUserInfo() {
            return new Promise((resolve) => {
                getAPI(SysAuthApi)
                    .apiSysAuthUserInfoGet()
                    .then(async (res: any) => {
                        if (res.data.result == null) return;
                        var d = res.data.result;
                        const userInfos = {
                            id: d.id,
                            account: d.account,
                            realName: d.realName,
                            phone: d.phone,
                            idCardNum: d.idCardNum,
                            email: d.email,
                            accountType: d.accountType,
                            avatar: d.avatar ?? '/upload/logo.png',
                            address: d.address,
                            signature: d.signature,
                            orgId: d.orgId,
                            orgName: d.orgName,
                            posName: d.posName,
                            roles: d.roleIds,
                            authBtnList: d.buttons,
                            tenantId: d.tenantId,
                            time: new Date().getTime(),
                        };
 
                        // vue-next-admin 提交Id:225bce7 提交消息:admin-23.03.26:发布v2.4.32版本
                        // 增加了下面代码,引起当前会话的用户信息不会刷新,如:重新提交的头像不更新,需要新开一个页面才能正确显示
                        // Session.set('userInfo', userInfos);
 
                        // 用户水印
                        const storesThemeConfig = useThemeConfig();
                        storesThemeConfig.themeConfig.watermarkText = d.watermarkText ?? '';
                        if (storesThemeConfig.themeConfig.isWatermark) Watermark.set(storesThemeConfig.themeConfig.watermarkText);
                        else Watermark.del();
 
                        Local.remove('themeConfig');
                        Local.set('themeConfig', storesThemeConfig.themeConfig);
 
                        resolve(userInfos);
                    });
            });
        },
 
        // 获取常量集合
        getSysConstList() {
            return new Promise((resolve) => {
                getAPI(SysConstApi)
                    .apiSysConstListGet()
                    .then(async (res: any) => {
                        resolve(res.data.result ?? []);
                    });
            });
        },
 
        // 根据常量类名获取常量数据
        getConstDataByTypeCode(typeCode: string) {
            return this.constList.find((item: any) => item.code === typeCode)?.data?.result || [];
        },
 
        // 根据常量类名和编码获取常量值
        getConstItemNameByType(typeCode: string, itemCode: string) {
            const data = this.getConstDataByTypeCode(typeCode);
            return data.find((item: any) => item.code === itemCode)?.name;
        },
 
        // 根据字典类型获取字典数据
        getDictDataByCode(dictTypeCode: string) {
            return this.dictList[dictTypeCode] || [];
        }
    },
});
 
// 处理字典国际化, 默认显示字典中的label值
const setDictLangMessageAsync = async (dict: any) => {
    dict.langMessage = `message.dictType.${dict.typeCode}_${dict.value}`;
    const text = t(dict.langMessage);
    dict.label = text !== dict.langMessage ? text : dict.label;
}