import { fetchApi } from '@/utils/request'; import { platform, PLATFORM_TYPE, AccessCode } from '@/utils/access'; import { firstCharToLowerCase } from '@/utils/tool'; import system from '@/services/system'; const systemInitState = () => ({ gatewayState: false, isMaxWindowSize: false, client: system.isClient ? '桌面端' : 'WEB端', }); const loginInitState = () => ({ isLogin: false, accountId: undefined, accountName: undefined, userName: undefined, platformList: [], currentPlatform: {}, currentCompanyId: undefined, avator: undefined, userInfo: {}, }) const getBootstrapState = () => { let state = Object.assign(systemInitState(), loginInitState()); try { const sessionState = JSON.parse(sessionStorage.getItem('user')); const currentCompanyId = sessionStorage.getItem('companyId'); const currentPlatform = JSON.parse(sessionStorage.getItem('platform') || '{}'); //sessionStorage.getItem('companyName'); if (sessionState && sessionState.accountId) { state.isLogin = true; Object.assign(state, sessionState); state.currentCompanyId = currentCompanyId; state.currentPlatform = currentPlatform; } } catch (e) { console.log('加载session数据失败'); state = Object.assign(systemInitState(), loginInitState()); } return state; }; export default { state: getBootstrapState(), setCurrentPlatform(platformInfo) { this.state.currentPlatform = platformInfo; this.state.currentCompanyId = platformInfo.orgId; sessionStorage.companyId = platformInfo.orgId; sessionStorage.platform = JSON.stringify(platformInfo); sessionStorage.CompanyName = JSON.parse(sessionStorage.platform).orgName; sessionStorage.accountName = JSON.parse(sessionStorage.user).accountName; const params = { API: 'authentication/login', Action: '登录', CompanyName: sessionStorage.CompanyName, Subject: sessionStorage.accountName, Source: sessionStorage.client, }; fetchApi('operation/record', params); }, setIsMaxWindowSize(val) { this.state.isMaxWindowSize = val; }, changeGatewayState(newState) { this.state.gatewayState = newState; }, async login(UserName, PassWord) { const loginRes = await fetchApi('authentication/login', { UserName, PassWord }); const loginSucc = loginRes.Code === 0; if (!loginSucc) { return loginRes; } // //记录登录 // const param={ // API:'authentication/login', // Action: 'login', // CompanyName:'' // } // const res = await fetchApi('operation/record') this.state.isLogin = true; const userData = firstCharToLowerCase(loginRes.Data || {}); // 如果以后用到这里面的数据,拍平放到同层级,不再放到userExt字段下 delete userData.userExt; const { companyId, cnName, id: accountId, permission, backgroundPermission } = userData; const platformList = []; const loginData = { accountId, accountName: UserName, userName: cnName, platformList, userInfo: userData, }; /** * 身份类型: * 1. 超管: 仅可看到总后台(暂时将模板控制台与其绑定) * 2. 模板提供商(serviceProvider) : 角色类型暂无 * 3. 企业 */ const isSuperAdmin = backgroundPermission === 3; const isCompanyAdmin = backgroundPermission === 2; // if (isSuperAdmin) { // todo 服务商查询企业列表并生成platformList platformList.push( platform(PLATFORM_TYPE.MANAGE_CENTER, companyId, 'LOCKING 总后台', undefined, []) // platform(PLATFORM_TYPE.TEMPLATE_CONSOLE, CompanyId, undefined, false, '模版控制台'), ); } else { // 企业生成自己的企业平台权限 const companyInfoRes = await fetchApi('company/queryFrontDeskCompanyById', { id: companyId }); if (companyInfoRes.Code !== 0) { return companyInfoRes; } const { Data = {} } = companyInfoRes; const { company: { LogoUrl, CompanyName, ServiceProviderStatus, SoftwareVersion }, } = Data; const accessList = []; if(ServiceProviderStatus == 1) { platformList.push(platform(PLATFORM_TYPE.TEMPLATE_CONSOLE, companyId, CompanyName, LogoUrl, [])); } if (isCompanyAdmin) { accessList.push(AccessCode.CompanyConsole); } if (permission === 1) { accessList.push(AccessCode.ProjectManager); } platformList.push(platform(PLATFORM_TYPE.COMPANY, companyId, CompanyName, LogoUrl, accessList, { softwareVersion: SoftwareVersion })); } // 存储 this.state.isLogin = true; Object.assign(this.state, loginData); sessionStorage.client = this.state.client; sessionStorage.userId = accountId; sessionStorage.accountId = accountId; sessionStorage.user = JSON.stringify(loginData); return { Code: loginRes.Code, Data: loginData, }; }, logout() { const params = { API: 'authentication/loginOut', Action: '注销', CompanyName: sessionStorage.CompanyName, Subject: sessionStorage.accountName, Source: sessionStorage.client, }; fetchApi('operation/record', params); this.state = Object.assign(this.state, loginInitState()); fetchApi('authentication/loginOut'); sessionStorage.clear(); }, };