userInfo.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { defineStore, storeToRefs } from 'pinia';
  2. import { Cookie, Session } from '@/utils/storage';
  3. import { getUserInfo } from '@/api/login/user';
  4. import { useThemeConfig } from '@/stores/themeConfig';
  5. import { JSEncrypt } from 'jsencrypt';
  6. /**
  7. * @description 用户信息
  8. * @methods getUserInfos 获取用户信息
  9. * @methods setUserInfos 设置用户信息
  10. */
  11. export const useUserInfo = defineStore('userInfo', {
  12. state: (): UserInfosStates => ({
  13. userInfos: {
  14. account: '', // 账号
  15. name: '', // 姓名
  16. phoneNo: '', //电话
  17. staffNo: '', // 工号
  18. id: '',
  19. photo: '', //头像
  20. authBtnList: [], // 授权按钮数组
  21. defaultTelNo: '', // 默认分机号
  22. defaultTelGroup: '', // 默认分机组
  23. token: '',
  24. showTelControl: false, // 是否展示坐席操作电话面板
  25. orgName: '', // 组织名称
  26. roles: [], // 角色
  27. isCenter: false, // 当前本部门是否是中心
  28. monitor: false, // 是否是班长
  29. encryptionHeader: '', // 加密用户信息(用户数据共享平台加密header)
  30. },
  31. }),
  32. actions: {
  33. async setUserInfos(buttons: string[]) {
  34. if (Session.get('userInfo')) {
  35. //有缓存 取缓存
  36. this.userInfos = Session.get('userInfo');
  37. } else {
  38. this.userInfos = (await this.getApiUserInfo(buttons)) as any;
  39. }
  40. },
  41. async getApiUserInfo(buttons: string[]) {
  42. try {
  43. // 个人信息
  44. let userInfo: any = await getUserInfo();
  45. this.userInfos.name = userInfo.result?.user.name ?? '暂无名称';
  46. this.userInfos.account = userInfo.result?.user.account ?? '';
  47. this.userInfos.phoneNo = userInfo.result?.user.phoneNo ?? '';
  48. this.userInfos.staffNo = userInfo.result?.user.staffNo ?? '';
  49. this.userInfos.defaultTelNo = userInfo.result.user.defaultTelNo ?? '';
  50. this.userInfos.defaultTelGroup = userInfo.result.user.defaultTelGroup ?? '';
  51. this.userInfos.id = userInfo.result?.user.id ?? '';
  52. this.userInfos.roles = userInfo.result?.user.roles ?? [];
  53. this.userInfos.token = Cookie.get('token') ?? '';
  54. this.userInfos.photo = '';
  55. this.userInfos.orgName = userInfo.result?.user.organization?.name ?? '';
  56. this.userInfos.isCenter = userInfo.result?.user.organization?.isCenter ?? false;
  57. this.userInfos.monitor = userInfo.result?.monitor ?? false;
  58. //授权按钮
  59. this.userInfos.showTelControl = buttons.includes('public:seat:panel'); // 查询是否有展示面板权限
  60. this.userInfos.authBtnList = buttons;
  61. // 新建一个JSEncrypt对象
  62. const encryptor = new JSEncrypt({ default_key_size: '2048' });
  63. // 设置公钥
  64. const publicKey =
  65. '-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQAB-----END PUBLIC KEY-----';
  66. encryptor.setPublicKey(publicKey); // publicKey为公钥
  67. // 加密数据
  68. const submitObj: { userId: string; userName: string; orgName: string } = {
  69. userId: this.userInfos.id,
  70. userName: this.userInfos.name,
  71. orgName: this.userInfos.orgName,
  72. };
  73. this.userInfos.encryptionHeader = <string>encryptor.encrypt(JSON.stringify(submitObj));
  74. Session.set('userInfo', this.userInfos);
  75. const storesThemeConfig = useThemeConfig();
  76. const { themeConfig } = storeToRefs(storesThemeConfig);
  77. if (themeConfig.value.isWatermark) {
  78. storesThemeConfig.setThemeConfig({
  79. ...storesThemeConfig.themeConfig,
  80. watermarkText: [this.userInfos.name, this.userInfos.orgName],
  81. });
  82. }
  83. return this.userInfos;
  84. } catch (error) {
  85. this.userInfos = {
  86. account: '暂无名称', // 账号
  87. name: '', // 姓名
  88. phoneNo: '', //电话
  89. staffNo: '', // 工号
  90. id: '',
  91. photo: '', //头像
  92. authBtnList: [], // 授权按钮数组
  93. defaultTelNo: '', // 默认分机号
  94. defaultTelGroup: '', // 默认分机组
  95. token: '',
  96. showTelControl: false, // 是否展示坐席操作电话面板
  97. orgName: '', // 组织名称
  98. roles: [], // 角色
  99. isCenter: false, // 当前部门是否是中心
  100. monitor: false, // 是否是班长
  101. encryptionHeader: '', // 加密用户信息(用户数据共享平台加密header)
  102. };
  103. Session.set('userInfo', this.userInfos);
  104. return this.userInfos;
  105. }
  106. },
  107. },
  108. });