You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

166 lines
5.3 KiB

  1. import { fetchApi } from '@/utils/request';
  2. import { platform, PLATFORM_TYPE, AccessCode } from '@/utils/access';
  3. import { firstCharToLowerCase } from '@/utils/tool';
  4. import system from '@/services/system';
  5. const systemInitState = () => ({
  6. gatewayState: false,
  7. isMaxWindowSize: false,
  8. client: system.isClient ? '桌面端' : 'WEB端',
  9. });
  10. const loginInitState = () => ({
  11. isLogin: false,
  12. accountId: undefined,
  13. accountName: undefined,
  14. userName: undefined,
  15. platformList: [],
  16. currentPlatform: {},
  17. currentCompanyId: undefined,
  18. avator: undefined,
  19. userInfo: {},
  20. })
  21. const getBootstrapState = () => {
  22. let state = Object.assign(systemInitState(), loginInitState());
  23. try {
  24. const sessionState = JSON.parse(sessionStorage.getItem('user'));
  25. const currentCompanyId = sessionStorage.getItem('companyId');
  26. const currentPlatform = JSON.parse(sessionStorage.getItem('platform') || '{}');
  27. //sessionStorage.getItem('companyName');
  28. if (sessionState && sessionState.accountId) {
  29. state.isLogin = true;
  30. Object.assign(state, sessionState);
  31. state.currentCompanyId = currentCompanyId;
  32. state.currentPlatform = currentPlatform;
  33. }
  34. } catch (e) {
  35. console.log('加载session数据失败');
  36. state = Object.assign(systemInitState(), loginInitState());
  37. }
  38. return state;
  39. };
  40. export default {
  41. state: getBootstrapState(),
  42. setCurrentPlatform(platformInfo) {
  43. this.state.currentPlatform = platformInfo;
  44. this.state.currentCompanyId = platformInfo.orgId;
  45. sessionStorage.companyId = platformInfo.orgId;
  46. sessionStorage.platform = JSON.stringify(platformInfo);
  47. sessionStorage.CompanyName = JSON.parse(sessionStorage.platform).orgName;
  48. sessionStorage.accountName = JSON.parse(sessionStorage.user).accountName;
  49. const params = {
  50. API: 'authentication/login',
  51. Action: '登录',
  52. CompanyName: sessionStorage.CompanyName,
  53. Subject: sessionStorage.accountName,
  54. Source: sessionStorage.client,
  55. };
  56. fetchApi('operation/record', params);
  57. },
  58. setIsMaxWindowSize(val) {
  59. this.state.isMaxWindowSize = val;
  60. },
  61. changeGatewayState(newState) {
  62. this.state.gatewayState = newState;
  63. },
  64. async login(UserName, PassWord) {
  65. const loginRes = await fetchApi('authentication/login', { UserName, PassWord });
  66. const loginSucc = loginRes.Code === 0;
  67. if (!loginSucc) {
  68. return loginRes;
  69. }
  70. // //记录登录
  71. // const param={
  72. // API:'authentication/login',
  73. // Action: 'login',
  74. // CompanyName:''
  75. // }
  76. // const res = await fetchApi('operation/record')
  77. this.state.isLogin = true;
  78. const userData = firstCharToLowerCase(loginRes.Data || {});
  79. // 如果以后用到这里面的数据,拍平放到同层级,不再放到userExt字段下
  80. delete userData.userExt;
  81. const { companyId, cnName, id: accountId, permission, backgroundPermission } = userData;
  82. const platformList = [];
  83. const loginData = {
  84. accountId,
  85. accountName: UserName,
  86. userName: cnName,
  87. platformList,
  88. userInfo: userData,
  89. };
  90. /**
  91. * 身份类型:
  92. * 1. 超管: 仅可看到总后台(暂时将模板控制台与其绑定)
  93. * 2. 模板提供商(serviceProvider) : 角色类型暂无
  94. * 3. 企业
  95. */
  96. const isSuperAdmin = backgroundPermission === 3;
  97. const isCompanyAdmin = backgroundPermission === 2;
  98. //
  99. if (isSuperAdmin) {
  100. // todo 服务商查询企业列表并生成platformList
  101. platformList.push(
  102. platform(PLATFORM_TYPE.MANAGE_CENTER, companyId, 'LOCKING 总后台', undefined, [])
  103. // platform(PLATFORM_TYPE.TEMPLATE_CONSOLE, CompanyId, undefined, false, '模版控制台'),
  104. );
  105. } else {
  106. // 企业生成自己的企业平台权限
  107. const companyInfoRes = await fetchApi('company/queryFrontDeskCompanyById', { id: companyId });
  108. if (companyInfoRes.Code !== 0) {
  109. return companyInfoRes;
  110. }
  111. const { Data = {} } = companyInfoRes;
  112. const {
  113. company: { LogoUrl, CompanyName, ServiceProviderStatus, SoftwareVersion },
  114. } = Data;
  115. const accessList = [];
  116. if(ServiceProviderStatus == 1) {
  117. platformList.push(platform(PLATFORM_TYPE.TEMPLATE_CONSOLE, companyId, CompanyName, LogoUrl, []));
  118. }
  119. if (isCompanyAdmin) {
  120. accessList.push(AccessCode.CompanyConsole);
  121. }
  122. if (permission === 1) {
  123. accessList.push(AccessCode.ProjectManager);
  124. }
  125. platformList.push(platform(PLATFORM_TYPE.COMPANY, companyId, CompanyName, LogoUrl, accessList, { softwareVersion: SoftwareVersion }));
  126. }
  127. // 存储
  128. this.state.isLogin = true;
  129. Object.assign(this.state, loginData);
  130. sessionStorage.client = this.state.client;
  131. sessionStorage.userId = accountId;
  132. sessionStorage.accountId = accountId;
  133. sessionStorage.user = JSON.stringify(loginData);
  134. return {
  135. Code: loginRes.Code,
  136. Data: loginData,
  137. };
  138. },
  139. logout() {
  140. const params = {
  141. API: 'authentication/loginOut',
  142. Action: '注销',
  143. CompanyName: sessionStorage.CompanyName,
  144. Subject: sessionStorage.accountName,
  145. Source: sessionStorage.client,
  146. };
  147. fetchApi('operation/record', params);
  148. this.state = Object.assign(this.state, loginInitState());
  149. fetchApi('authentication/loginOut');
  150. sessionStorage.clear();
  151. },
  152. };