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, SysRoleApi } 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, // 字典列表 userTableList: [] as any, // 用户表格字段列表 }), getters: {}, actions: { // 存储用户信息到浏览器缓存 async setUserInfos() { this.userInfos = Session.get('userInfo') ?? await this.getApiUserInfo(); }, // 存储常量信息到浏览器缓存 async setConstList() { this.constList = Session.get('constList') ?? 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; }, // 存储用户表格列到浏览器缓存 async setUserTables() { this.userTableList = Session.get('userTable') ?? await this.getUserTableList(); if (!Session.get('userTable')) Session.set('userTable', this.userTableList); }, // 获取当前用户信息 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, authApiList: d.apis, lastChangePasswordTime: d.lastChangePasswordTime, 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); }); }); }, // 获取当前用户表格列集合 getUserTableList() { return new Promise((resolve) => { getAPI(SysRoleApi) .apiSysRoleUserRoleTableListGet() .then(async (res: any) => { resolve(res.data.result ?? []); }); }); }, // 获取常量集合 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] || []; }, // 根据字典类型和代码取字典项 getDictItemByCode(typePCode: string, code: string) { if (code != undefined && code !== '') { const _code = code.toString(); const ds = this.getDictDataByCode(typePCode); for (const element of ds) { if (element.code == _code) { return element; } } } return {}; }, // 根据字典类型和值取描述 getDictLabelByVal(typePCode: string, val: string) { if (val != undefined && val !== '') { const _val = val.toString(); const ds = this.getDictDataByCode(typePCode); for (const element of ds) { if (element.value == _val) { return element; } } } return {}; }, // 常量编码和名称转换 codeToName(code: any, type: any) { return this.constList.find((x: any) => x.code === type).data.result.find((x: any) => x.code === code)?.name; }, }, }); // 处理字典国际化, 默认显示字典中的value值 const setDictLangMessageAsync = async (dict: any) => { dict.langMessage = `message.system.dictType.${dict.typeCode}.${dict.code}`; const value = t(dict.langMessage); dict.value = value !== dict.langMessage ? value : dict.value; };