25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

114 satır
3.7 KiB

  1. import { fetchApi } from '@/utils/request';
  2. import { platform, PLATFORM_TYPE, AccessCode } from '@/utils/access';
  3. import { firstCharToLowerCase } from '@/utils/tool';
  4. const initialState = () => ({
  5. isLogin: false,
  6. accountId: undefined,
  7. accountName: undefined,
  8. userName: undefined,
  9. platformList: [],
  10. currentPlatform: {},
  11. currentCompanyId: undefined,
  12. avator: undefined,
  13. userInfo: {},
  14. });
  15. const getBootstrapState = () => {
  16. let state = initialState();
  17. try {
  18. const sessionState = JSON.parse(sessionStorage.getItem('user'));
  19. const currentCompanyId = sessionStorage.getItem('companyId');
  20. const currentPlatform = JSON.parse(sessionStorage.getItem('platform') || '{}');
  21. if (sessionState && sessionState.accountId) {
  22. state.isLogin = true;
  23. Object.assign(state, sessionState);
  24. state.currentCompanyId = currentCompanyId;
  25. state.currentPlatform = currentPlatform;
  26. }
  27. } catch (e) {
  28. console.log('加载session数据失败');
  29. state = initialState();
  30. }
  31. return state;
  32. }
  33. export default {
  34. state: getBootstrapState(),
  35. setCurrentPlatform(platformInfo) {
  36. this.state.currentPlatform = platformInfo;
  37. this.state.currentCompanyId = platformInfo.orgId;
  38. sessionStorage.companyId = platformInfo.orgId;
  39. sessionStorage.platform = JSON.stringify(platformInfo);
  40. },
  41. async login(UserName, PassWord) {
  42. const loginRes = await fetchApi('authentication/login', { UserName, PassWord });
  43. const loginSucc = loginRes.Code === 0;
  44. if (!loginSucc) {
  45. return loginRes;
  46. }
  47. this.state.isLogin = true;
  48. const userData = firstCharToLowerCase(loginRes.Data || {});
  49. // 如果以后用到这里面的数据,拍平放到同层级,不再放到userExt字段下
  50. delete userData.userExt;
  51. const { companyId, cnName, id: accountId, permission, backgroundPermission } = userData;
  52. const platformList = [];
  53. const loginData = {
  54. accountId,
  55. accountName: UserName,
  56. userName: cnName,
  57. platformList,
  58. userInfo: userData,
  59. };
  60. /**
  61. * 身份类型:
  62. * 1. 超管: 仅可看到总后台(暂时将模板控制台与其绑定)
  63. * 2. 模板提供商(serviceProvider) : 角色类型暂无
  64. * 3. 企业
  65. */
  66. const isSuperAdmin = backgroundPermission === 3;
  67. const isCompanyAdmin = backgroundPermission === 2;
  68. //
  69. if (isSuperAdmin) { // todo 服务商查询企业列表并生成platformList
  70. // todo 暂时将模板控制台加入到超管账号中
  71. platformList.push(
  72. platform(PLATFORM_TYPE.MANAGE_CENTER, companyId, 'LOCKING 总后台', undefined, []),
  73. // platform(PLATFORM_TYPE.TEMPLATE_CONSOLE, CompanyId, undefined, false, '模版控制台'),
  74. );
  75. } else { // 企业生成自己的企业平台权限
  76. const companyInfoRes = await fetchApi('company/queryFrontDeskCompanyById', { id: companyId });
  77. if (companyInfoRes.Code !== 0) {
  78. return companyInfoRes;
  79. }
  80. const { Data = {} } = companyInfoRes;
  81. const { company: { LogoUrl, CompanyName } } = Data;
  82. const accessList = [];
  83. if (isCompanyAdmin) { accessList.push(AccessCode.CompanyConsole); }
  84. if (permission === 1) { accessList.push(AccessCode.ProjectManager); }
  85. platformList.push(platform(PLATFORM_TYPE.COMPANY, companyId, CompanyName, LogoUrl, accessList));
  86. }
  87. // 存储
  88. this.state.isLogin = true;
  89. Object.assign(this.state, loginData);
  90. sessionStorage.userId = accountId;
  91. sessionStorage.accountId = accountId;
  92. sessionStorage.user = JSON.stringify(loginData);
  93. return {
  94. Code: loginRes.Code,
  95. Data: loginData,
  96. }
  97. },
  98. logout() {
  99. this.state = initialState();
  100. fetchApi('authentication/loginOut');
  101. sessionStorage.clear();
  102. }
  103. }