import { defineStore, storeToRefs } from 'pinia'; import { Cookie, Session } from '@/utils/storage'; import { getUserInfo } from '@/api/login/user'; import { useThemeConfig } from '@/stores/themeConfig'; import { JSEncrypt } from 'jsencrypt'; /** * @description 用户信息 * @methods getUserInfos 获取用户信息 * @methods setUserInfos 设置用户信息 */ export const useUserInfo = defineStore('userInfo', { state: (): UserInfosStates => ({ userInfos: { account: '', // 账号 name: '', // 姓名 phoneNo: '', //电话 staffNo: '', // 工号 id: '', photo: '', //头像 authBtnList: [], // 授权按钮数组 defaultTelNo: '', // 默认分机号 defaultTelGroup: '', // 默认分机组 token: '', showTelControl: false, // 是否展示坐席操作电话面板 orgName: '', // 组织名称 roles: [], // 角色 isCenter: false, // 当前本部门是否是中心 monitor: false, // 是否是班长 encryptionHeader: '', // 加密用户信息(用户数据共享平台加密header) }, }), actions: { async setUserInfos(buttons: string[]) { if (Session.get('userInfo')) { //有缓存 取缓存 this.userInfos = Session.get('userInfo'); } else { this.userInfos = (await this.getApiUserInfo(buttons)) as any; } }, async getApiUserInfo(buttons: string[]) { try { // 个人信息 let userInfo: any = await getUserInfo(); this.userInfos.name = userInfo.result?.user.name ?? '暂无名称'; this.userInfos.account = userInfo.result?.user.account ?? ''; this.userInfos.phoneNo = userInfo.result?.user.phoneNo ?? ''; this.userInfos.staffNo = userInfo.result?.user.staffNo ?? ''; this.userInfos.defaultTelNo = userInfo.result.user.defaultTelNo ?? ''; this.userInfos.defaultTelGroup = userInfo.result.user.defaultTelGroup ?? ''; this.userInfos.id = userInfo.result?.user.id ?? ''; this.userInfos.roles = userInfo.result?.user.roles ?? []; this.userInfos.token = Cookie.get('token') ?? ''; this.userInfos.photo = ''; this.userInfos.orgName = userInfo.result?.user.organization?.name ?? ''; this.userInfos.isCenter = userInfo.result?.user.organization?.isCenter ?? false; this.userInfos.monitor = userInfo.result?.monitor ?? false; //授权按钮 this.userInfos.showTelControl = buttons.includes('public:seat:panel'); // 查询是否有展示面板权限 this.userInfos.authBtnList = buttons; // 新建一个JSEncrypt对象 const encryptor = new JSEncrypt({ default_key_size: '2048' }); // 设置公钥 const publicKey = '-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQAB-----END PUBLIC KEY-----'; encryptor.setPublicKey(publicKey); // publicKey为公钥 // 加密数据 const submitObj: { userId: string; userName: string; orgName: string } = { userId: this.userInfos.id, userName: this.userInfos.name, orgName: this.userInfos.orgName, }; this.userInfos.encryptionHeader = encryptor.encrypt(JSON.stringify(submitObj)); Session.set('userInfo', this.userInfos); const storesThemeConfig = useThemeConfig(); const { themeConfig } = storeToRefs(storesThemeConfig); if (themeConfig.value.isWatermark) { storesThemeConfig.setThemeConfig({ ...storesThemeConfig.themeConfig, watermarkText: [this.userInfos.name, this.userInfos.orgName], }); } return this.userInfos; } catch (error) { this.userInfos = { account: '暂无名称', // 账号 name: '', // 姓名 phoneNo: '', //电话 staffNo: '', // 工号 id: '', photo: '', //头像 authBtnList: [], // 授权按钮数组 defaultTelNo: '', // 默认分机号 defaultTelGroup: '', // 默认分机组 token: '', showTelControl: false, // 是否展示坐席操作电话面板 orgName: '', // 组织名称 roles: [], // 角色 isCenter: false, // 当前部门是否是中心 monitor: false, // 是否是班长 encryptionHeader: '', // 加密用户信息(用户数据共享平台加密header) }; Session.set('userInfo', this.userInfos); return this.userInfos; } }, }, });