Commit 677afc30 authored by 周宏民's avatar 周宏民

feat: 宿州北排集成登录

parent 624b89f8
Pipeline #96068 passed with stages
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
......@@ -19,6 +19,7 @@ import QinzhouPage from './project/qinzhou';
import WuliangyePage from './project/wuliangye';
import JianshiPage from './project/jianshi';
import XinyuanPage from './project/xinyuan';
import SuzhouPage from './project/suzhou';
import IntegrationNewPage from './integrationNew';
export const guidePage = [
// type 为true 则需要 功能配置 isPanda 为true
......@@ -87,6 +88,11 @@ export const guidePage = [
value: 'xinyuanPage',
previewSrc: require('@/assets/images/integration/previewImg/新源.png'),
},
{
label: '宿州集成登录',
value: 'SuzhouPage',
previewSrc: require('@/assets/images/integration/previewImg/宿州北排.png'),
},
{
label: '演示环境(旧版)',
type: true,
......@@ -114,4 +120,5 @@ export const BootPageTemplate = {
jianshiPage: JianshiPage,
xinyuanPage: XinyuanPage,
wulaingyePage: WuliangyePage,
suzhouPage: SuzhouPage,
};
/* eslint-disable prettier/prettier */
/*
* @Title:
* @Author: hongmye
* @Date: 2025-03-10 18:34:42
*/
import 标题bg from '@/assets/images/integration/suzhou/标题.png';
import subTitle from '@/assets/images/integration/suzhou/宿州北排.png';
import leftIcon from '@/assets/images/integration/suzhou/left.png';
import rightIcon from '@/assets/images/integration/suzhou/right.png';
import 水环境 from '@/assets/images/integration/suzhou/水环境.png';
import 水生态 from '@/assets/images/integration/suzhou/水生态.png';
import 水资源 from '@/assets/images/integration/suzhou/水资源.png';
import 六位一体 from '@/assets/images/integration/suzhou/六位一体.png';
import 水安全 from '@/assets/images/integration/suzhou/水安全.png';
import 水文化 from '@/assets/images/integration/suzhou/水文化.png';
import 水管理 from '@/assets/images/integration/suzhou/水管理.png';
import 运营中心 from '@/assets/images/integration/suzhou/运营中心.png';
import 业务应用 from '@/assets/images/integration/suzhou/业务应用.png';
import 支撑平台 from '@/assets/images/integration/suzhou/支撑平台.png';
import 数字流域驾驶舱 from '@/assets/images/integration/suzhou/数字流域驾驶舱.png';
import 河道信息专题 from '@/assets/images/integration/suzhou/河道信息专题.png';
import 河道监测专题 from '@/assets/images/integration/suzhou/河道监测专题.png';
import 河道水环境评价 from '@/assets/images/integration/suzhou/河道水环境评价.png';
import 河网监控 from '@/assets/images/integration/suzhou/河网监控.png';
import 河网监管 from '@/assets/images/integration/suzhou/河网监管.png';
import 河网监控bg from '@/assets/images/integration/suzhou/河网监控bg.png';
import 河道全景hover from '@/assets/images/integration/suzhou/河道全景hover.png';
import 排口管控 from '@/assets/images/integration/suzhou/排口管控.png';
import 排口管控hover from '@/assets/images/integration/suzhou/排口管控hover.png';
import 闸站调度 from '@/assets/images/integration/suzhou/闸站调度.png';
import 闸站调度bg from '@/assets/images/integration/suzhou/闸站调度bg.png';
import 闸站格局bg from '@/assets/images/integration/suzhou/闸站格局bg.png';
import 闸站格局hover from '@/assets/images/integration/suzhou/闸站格局hover.png';
import 业务中心 from '@/assets/images/integration/suzhou/业务中心.png';
import 业务中心bg from '@/assets/images/integration/suzhou/业务中心bg.png';
import 河管巡检bg from '@/assets/images/integration/suzhou/河管巡检bg.png';
import 河管巡检hover from '@/assets/images/integration/suzhou/河管巡检hover.png';
import 运营管理 from '@/assets/images/integration/suzhou/运营管理.png';
import 运营管理bg from '@/assets/images/integration/suzhou/运营管理bg.png';
import 水质分析bg from '@/assets/images/integration/suzhou/水质分析bg.png';
import 水质分析hover from '@/assets/images/integration/suzhou/水质分析hover.png';
import 支撑平台bg from '@/assets/images/integration/suzhou/支撑平台bg.png';
import 物联接入 from '@/assets/images/integration/suzhou/物联接入.png';
import 视频接入 from '@/assets/images/integration/suzhou/视频接入.png';
import 统一报警 from '@/assets/images/integration/suzhou/统一报警.png';
import WEB组态 from '@/assets/images/integration/suzhou/WEB组态.png';
import 运维监管 from '@/assets/images/integration/suzhou/运维监管.png';
export const imgMap = {
标题bg,
subTitle,
leftIcon,
rightIcon,
水环境,
水生态,
水资源,
六位一体,
水安全,
水文化,
水管理,
运营中心,
业务应用,
支撑平台,
数字流域驾驶舱,
河道信息专题,
河道监测专题,
河道水环境评价,
河网监控,
河网监管,
河网监控bg,
河道全景hover,
排口管控,
排口管控hover,
闸站调度,
闸站调度bg,
闸站格局bg,
闸站格局hover,
业务中心,
业务中心bg,
河管巡检bg,
河管巡检hover,
运营管理,
运营管理bg,
水质分析bg,
水质分析hover,
支撑平台bg,
物联接入,
视频接入,
统一报警,
WEB组态,
运维监管,
};
/*
* @Title: 宿州北排集成登录
* @Author: hongmye
* @Date: 2025-03-10 18:34:42
*/
import { appService } from '@/api';
import { FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons';
import { message, Button } from 'antd';
import classNames from 'classnames';
import { debounce } from 'lodash';
import { getImageUrl, goToPath, searchUrl } from '@/utils/utils';
import axios from 'axios';
import React, { useRef, useEffect, useState, useMemo } from 'react';
import backImg from '@/assets/images/demonstration/返回.png';
import arrowLeftImg from '@/assets/images/demonstration/左箭头.png';
import LoadPage from '@/components/LoadPage';
import { connect } from 'react-redux';
import { actionCreators } from '@/containers/App/store';
import { getUserInfo, getWebSiteConfig } from '@/api/service/base';
import { useHistory, useAliveController } from '@wisdom-utils/runtime';
import Cookies from 'js-cookie';
import { store } from '@wisdom-utils/utils';
import LoginAction from '@/pages/user/login/login';
import { defaultApp } from '@/micro';
import { imgMap } from './imgImport';
import useFullScreen from '../../demonstration/components/useFullScreen';
import styles from './index.less';
const boxWidth = 1920;
const boxHeight = 1080;
const IntegrationSuzhou = props => {
const integratedConfig = props.integratedConfig?.toObject
? props.integratedConfig.toObject()
: props.integratedConfig || {};
const [ref, isFullscreen, handleFullScreen, handleExitFullScreen] = useFullScreen(false);
const clientRef = useRef(props.global.client);
const integrationClient = integratedConfig?.client || window?.globalConfig?.client || 'city'; // 集成登录client
const [integrationData, setIntegrationData] = useState({}); // 所有子站
const loadingTime = integratedConfig?.loadingTime || 5;
const history = useHistory();
const { clear } = useAliveController();
const timer2 = useRef(null);
const timer3 = useRef(null);
const progressRef2 = useRef(0);
// 退出
const exit = () => {
console.log(isFullscreen, 'isFullscreen');
if (isFullscreen) {
handleExitFullScreen && handleExitFullScreen();
} else {
handleFullScreen && handleFullScreen();
}
};
const [boxSize, setBoxSize] = useState({
scale: 1,
boxHeight: 1080,
});
const [linkUrl, setLinkUrl] = useState('');
const [jumpLoading, setJumpLoading] = useState(false);
const [progressValue2, setProgressValue2] = useState(0);
const [loginAction, setAction] = useState(() => new LoginAction(props));
const jumpProgressStart = () => {
if (timer2.current) {
clearInterval(timer2.current);
timer2.current = null;
}
progressRef2.current = 0;
setProgressValue2(0);
timer2.current = setInterval(() => {
if (progressRef2.current < 97.5) {
progressRef2.current += 2.5;
setProgressValue2(progressRef2.current);
} else {
setProgressValue2(99);
timer2.current && clearInterval(timer2.current);
timer2.current = null;
}
}, 100);
};
const jumpProgressEnd = () => {
setProgressValue2(100);
timer2.current && clearInterval(timer2.current);
timer2.current = null;
};
const getData = async () => {
const token = props.global?.token || Cookies.get('token');
const client = integratedConfig?.client || sessionStorage.getItem('client') || props?.global?.client || '';
localStorage.setItem('integrationClient', client);
appService
.GetIntegrationConfig({
type: '集成登录',
userId: window.globalConfig.userInfo?.OID ?? null,
isEnable: true,
client,
})
.then(res1 => {
const list = res1.data || [];
list.length && localStorage.setItem('integrationData', JSON.stringify(list));
const obj = {};
list.forEach(i => {
obj[i.appKey] = i;
});
setIntegrationData(obj);
});
};
const onResize = () => {
if (ref?.current) {
const { clientWidth, clientHeight } = ref.current;
if (!boxWidth || !boxHeight) return;
const xScale = clientWidth / boxWidth;
const yScale = clientHeight / boxHeight;
let n = Math.min(xScale, yScale);
let bHeight = boxHeight;
// 高度为偶数
bHeight = parseInt(bHeight, 10);
if (bHeight % 2 !== 0) {
bHeight += 1;
}
n = Number(n.toFixed(4));
setBoxSize({
scale: n,
boxHeight: bHeight,
});
}
};
const startTiming = (time = 2) => {
if (timer3.current) {
clearInterval(timer3.current);
timer3.current = null;
}
timer3.current = setTimeout(() => {
setJumpLoading(false);
timer2.current && clearInterval(timer2.current);
timer2.current = null;
}, time * 1000);
};
const toRevenue = async item => {
setJumpLoading(true);
jumpProgressStart();
startTiming(6);
try {
const res = await appService.getTicketByToken({ token: window.globalConfig?.token });
if (res.code === 0) {
// 营收是api-bcs,直饮水是api-ddw
// /api-ddw/sysUser/ssoGCK
// res.data = 'e44a2883a2ac4c4b8c8f1186cf27ca1dcc406c1dda1247cabe04bff3c06d28e7'; // 测试token
const apiPath = `${item.url + (item.url.indexOf('?') > 0 ? '&' : '?') + item.paramValue}=${res.data}`;
if (item?.openOpt === '当前页打开') {
props.history.push('/thirdParty', { linkUrl: apiPath });
} else {
setJumpLoading(false);
jumpProgressEnd();
window.open(apiPath, '_blank');
}
} else {
res.msg && message.error(res.msg);
setJumpLoading(false);
jumpProgressEnd();
}
} catch (error) {
setJumpLoading(false);
jumpProgressEnd();
}
};
const toClient = async (item, loginA) => {
const token = props.global?.token || Cookies.get('token');
const cli = item.client;
const res = await getWebSiteConfig({
identity: token,
client: cli,
});
if (!res?.data?.[0]?.widgets?.length) {
message.error({
duration: 3,
content: '您没有该板块权限,请联系管理员',
});
return;
}
if (window.qiankunIsCache) {
store.set('event:dropCache');
}
Cookies.set('client', cli, {
expires: 86400000 / (24 * 60 * 60 * 1000),
path: '/',
});
sessionStorage.setItem('client', cli);
const currentProduct = `__global__recent_productIndex__micro_${window.location.hostname}_${window.globalConfig
?.client ?? 'city'}`;
sessionStorage.removeItem(currentProduct);
const currentProductNew = `__global__recent_productIndex__micro_${window.location.hostname}_${cli || 'city'}`;
sessionStorage.setItem(currentProductNew, 0);
// 用全局存跳转信息,跳转过程页面会刷新
window.clientInfo = item;
clientRef.current = cli;
const config = props.global;
config.uiwidgets = [];
config.widgets = [];
config.allWidgets = [];
window.qiankunStarted = false;
if (cli) {
config.client = cli;
}
setJumpLoading(true);
jumpProgressStart();
startTiming(loadingTime);
window.jumpLoadingProgress = 99;
loginA && loginA.getUserInfoAndConfig('', true, item.type);
};
const onLink = (item, loginA) => {
const token = props.global?.token || Cookies.get('token');
if (!token) {
history.push(`/user/login?client=${integrationClient}`, { reload: true });
clear();
props.logout();
return;
}
const { url, client } = item;
if (window.clientInfo) {
window.clientInfo = null;
}
if (item.subType === '内链' && client) {
toClient(item, loginA);
} else {
if (!url) return;
if (url?.indexOf('{userId}') >= 0) {
item.url = url.replace('{userId}', window.globalConfig?.userInfo?.OID);
}
let link = item.url;
if (item.paramName) {
link = `${item.url + (item.url.indexOf('?') > 0 ? '&' : '?') + item.paramName}=${window.globalConfig?.token}`;
}
if (item.subType === '外链') {
if (item.paramValue === 'ticket') {
toRevenue(item); // 去营收
return;
}
if (item?.openOpt === '当前页打开') {
props.history.push('/thirdParty', { linkUrl: url });
} else {
window.open(url, '_blank');
}
return;
}
axios({
url: link,
method: 'get',
dataType: 'json',
}).then(res => {
if (res?.data?.code === 0) {
if (item?.openOpt === '当前页打开') {
props.history.push('/thirdParty', { linkUrl: res.data?.data });
} else {
window.open(res.data?.data, '_blank');
}
}
});
}
};
useEffect(() => {
getData();
window.addEventListener('resize', debounce(onResize, 300));
onResize();
return () => {
window.removeEventListener('resize', onResize);
timer2.current && clearInterval(timer2.current);
timer2.current = null;
timer3.current && clearInterval(timer3.current);
timer3.current = null;
};
}, []);
useEffect(() => {
const handleToggleIndustry = event => {
setJumpLoading(false);
jumpProgressEnd();
window.jumpLoadingProgress = 0;
let url = '';
if (window.clientInfo?.url && window.clientInfo.subType === '内链') {
url = searchUrl(window.clientInfo.url);
window.clientInfo = null;
}
props.history.push(`/?client=${clientRef.current || props.global.client}`);
props.updateCurrentIndex && props.updateCurrentIndex(0);
defaultApp(url);
};
const handleError = () => {
setJumpLoading(false);
jumpProgressEnd();
};
loginAction.events.on('toggleIndustry', handleToggleIndustry);
loginAction.events.on('loginError', handleError);
return () => {
loginAction && loginAction.events && loginAction.events.removeListener('toggleIndustry', handleToggleIndustry);
loginAction && loginAction.events && loginAction.events.removeListener('loginError', handleError);
};
}, [loginAction.events, props]);
return (
<div className={classNames(styles.integrationSuzhou, 'integrationSuzhou')} ref={ref}>
{jumpLoading ? (
<div className={styles.integrationJumpLoad} key="jumpLoading">
<div style={{ width: '285px' }}>
<LoadPage percent={progressValue2 / 100} text="页面加载中~" />
</div>
</div>
) : null}
{!linkUrl ? (
<div className={styles.integrationSuzhou_exit} onClick={exit}>
<Button type="text" style={{ color: '#fff', fontSize: '24px' }}>
{isFullscreen ? <FullscreenExitOutlined /> : <FullscreenOutlined />}
</Button>
</div>
) : null}
<div
className={styles.integration_content}
style={{
width: boxWidth,
height: boxSize.boxHeight,
transform: `scale(${boxSize.scale}) translate(-50%,-50%)`,
}}
>
<div className={styles.integrationSuzhou_title}>
<img className={styles.integrationSuzhou_title1} src={imgMap['标题bg']} alt="宿州智慧水环境管理平台" />
<img className={styles.integrationSuzhou_subTitle} src={imgMap.subTitle} alt="宿州北排" />
</div>
<div className={styles.integrationSuzhou_left}>
<img src={imgMap.leftIcon} alt="" />
</div>
<div className={styles.integrationSuzhou_right}>
<img src={imgMap.rightIcon} alt="" />
</div>
<div className={styles.integrationSuzhou_bottom}>
<img className={styles.bottom1} src={imgMap['水环境']} alt="" />
<img className={styles.bottom2} src={imgMap['水生态']} alt="" />
<img className={styles.bottom3} src={imgMap['水资源']} alt="" />
<img className={styles.bottom4} src={imgMap['六位一体']} alt="" />
<img className={styles.bottom5} src={imgMap['水安全']} alt="" />
<img className={styles.bottom6} src={imgMap['水文化']} alt="" />
<img className={styles.bottom7} src={imgMap['水管理']} alt="" />
</div>
<div className={styles.integrationSuzhou_wrap}>
<div className={styles.integrationSuzhou_boxLeft}>
<img className={styles.integrationSuzhou_boxLeft_icon1} src={imgMap['运营中心']} alt="" />
<img className={styles.integrationSuzhou_boxLeft_icon2} src={imgMap['业务应用']} alt="" />
<img className={styles.integrationSuzhou_boxLeft_icon3} src={imgMap['支撑平台']} alt="" />
</div>
<div>
<div className={classNames(styles.integration_row1)}>
<div
className={classNames(
styles.cell1_box,
integrationData['数字流域驾驶舱'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="数字流域驾驶舱"
onClick={() => onLink(integrationData['数字流域驾驶舱'], loginAction)}
>
<div className={styles.cell1}>
<span>数字流域驾驶舱</span>
</div>
</div>
<div
className={classNames(
styles.cell1_box,
integrationData['河道信息专题'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="河道信息专题"
onClick={() => onLink(integrationData['河道信息专题'], loginAction)}
>
<div className={styles.cell1}>
<span>河道信息专题</span>
</div>
</div>
<div
className={classNames(
styles.cell1_box,
integrationData['河道监测专题'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="河道监测专题"
onClick={() => onLink(integrationData['河道监测专题'], loginAction)}
>
<div className={styles.cell1}>
<span>河道监测专题</span>
</div>
</div>
<div
className={classNames(
styles.cell1_box,
integrationData['河道水环境评价'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="河道水环境评价"
onClick={() => onLink(integrationData['河道水环境评价'], loginAction)}
>
<div className={styles.cell1}>
<span>河道水环境评价</span>
</div>
</div>
</div>
<div className={classNames(styles.integration_row2)}>
<div className={classNames(styles.integration_row2_box1)}>
<div className={classNames(styles.integration_row2_box1_title)} />
<div className={classNames(styles.integration_row2_box1_list)}>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['何道全景'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="何道全景"
onClick={() => onLink(integrationData['何道全景'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 何道全景 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['水质监控'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="水质监控"
onClick={() => onLink(integrationData['水质监控'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 水质监控 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['流量监控'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="流量监控"
onClick={() => onLink(integrationData['流量监控'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 流量监控 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['水位监控'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="水位监控"
onClick={() => onLink(integrationData['水位监控'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 水位监控 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['曝气监测'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="曝气监测"
onClick={() => onLink(integrationData['曝气监测'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 曝气监测 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['视频监控'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="视频监控"
onClick={() => onLink(integrationData['视频监控'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 视频监控 -</div>
</div>
<div
className={classNames(
styles.box1_cell_wrap,
integrationData['排口管控'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="排口管控"
onClick={() => onLink(integrationData['排口管控'], loginAction)}
>
<div className={classNames(styles.box1_cell)}>- 排口管控 -</div>
</div>
</div>
</div>
<div className={classNames(styles.integration_row2_box2)}>
<div className={classNames(styles.integration_row2_box2_title)} />
<div className={classNames(styles.integration_row2_box2_list)}>
<div
className={classNames(
styles.box2_cell_wrap,
integrationData['闸站格局'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="闸站格局"
onClick={() => onLink(integrationData['闸站格局'], loginAction)}
>
<div className={classNames(styles.box2_cell)}>- 闸站格局 -</div>
</div>
<div
className={classNames(
styles.box2_cell_wrap,
integrationData['闸站控制'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="闸站控制"
onClick={() => onLink(integrationData['闸站控制'], loginAction)}
>
<div className={classNames(styles.box2_cell)}>- 闸站控制 -</div>
</div>
<div
className={classNames(
styles.box2_cell_wrap,
integrationData['控制日志'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="控制日志"
onClick={() => onLink(integrationData['控制日志'], loginAction)}
>
<div className={classNames(styles.box2_cell)}>- 控制日志 -</div>
</div>
<div
className={classNames(
styles.box2_cell_wrap,
integrationData['运行记录'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="运行记录"
onClick={() => onLink(integrationData['运行记录'], loginAction)}
>
<div className={classNames(styles.box2_cell)}>- 运行记录 -</div>
</div>
</div>
</div>
<div className={classNames(styles.integration_row2_box3)}>
<div className={classNames(styles.integration_row2_box3_title)} />
<div className={classNames(styles.integration_row2_box3_list)}>
<div
className={classNames(
styles.box3_cell_wrap,
integrationData['河管巡检'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="河管巡检"
onClick={() => onLink(integrationData['河管巡检'], loginAction)}
>
<div className={classNames(styles.box3_cell)}>- 河管巡检 -</div>
</div>
<div
className={classNames(
styles.box3_cell_wrap,
integrationData['设备维保'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="设备维保"
onClick={() => onLink(integrationData['设备维保'], loginAction)}
>
<div className={classNames(styles.box3_cell)}>- 设备维保 -</div>
</div>
<div
className={classNames(
styles.box3_cell_wrap,
integrationData['运维工单'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="运维工单"
onClick={() => onLink(integrationData['运维工单'], loginAction)}
>
<div className={classNames(styles.box3_cell)}>- 运维工单 -</div>
</div>
<div
className={classNames(
styles.box3_cell_wrap,
integrationData['应急指挥'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="应急指挥"
onClick={() => onLink(integrationData['应急指挥'], loginAction)}
>
<div className={classNames(styles.box3_cell)}>- 应急指挥 -</div>
</div>
</div>
</div>
<div className={classNames(styles.integration_row2_box4)}>
<div className={classNames(styles.integration_row2_box4_title)} />
<div className={classNames(styles.integration_row2_box4_list)}>
<div
className={classNames(
styles.box4_cell_wrap,
integrationData['水质分析'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="水质分析"
onClick={() => onLink(integrationData['水质分析'], loginAction)}
>
<div className={classNames(styles.box4_cell)}>- 水质分析 -</div>
</div>
<div
className={classNames(
styles.box4_cell_wrap,
integrationData['设备运行'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="设备运行"
onClick={() => onLink(integrationData['设备运行'], loginAction)}
>
<div className={classNames(styles.box4_cell)}>- 设备运行 -</div>
</div>
<div
className={classNames(
styles.box4_cell_wrap,
integrationData['报表中心'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="报表中心"
onClick={() => onLink(integrationData['报表中心'], loginAction)}
>
<div className={classNames(styles.box4_cell)}>- 报表中心 -</div>
</div>
<div
className={classNames(
styles.box4_cell_wrap,
integrationData['绩效考核'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
name="绩效考核"
onClick={() => onLink(integrationData['绩效考核'], loginAction)}
>
<div className={classNames(styles.box4_cell)}>- 绩效考核 -</div>
</div>
</div>
</div>
</div>
<div className={classNames(styles.integration_row3)}>
<div
className={classNames(
styles.row3_cell,
integrationData['物联接入'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
onClick={() => onLink(integrationData['物联接入'], loginAction)}
>
<div className={classNames(styles.row3_text)} name="物联接入">
物联接入
</div>
</div>
<div
className={classNames(
styles.row3_cell,
integrationData['视频接入'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
onClick={() => onLink(integrationData['视频接入'], loginAction)}
>
<div className={classNames(styles.row3_text)} name="视频接入">
视频接入
</div>
</div>
<div
className={classNames(
styles.row3_cell,
integrationData['统一报警'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
onClick={() => onLink(integrationData['统一报警'], loginAction)}
>
<div className={classNames(styles.row3_text)} name="统一报警">
统一报警
</div>
</div>
<div
className={classNames(
styles.row3_cell,
integrationData['WEB组态'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
onClick={() => onLink(integrationData['WEB组态'], loginAction)}
>
<div className={classNames(styles.row3_text)} name="WEB组态">
WEB组态
</div>
</div>
<div
className={classNames(
styles.row3_cell,
integrationData['运维监管'] ? styles.integration_row_col_link : styles.integration_row_col_no,
)}
onClick={() => onLink(integrationData['运维监管'], loginAction)}
>
<div className={classNames(styles.row3_text)} name="运维监管">
运维监管
</div>
</div>
</div>
</div>
</div>
</div>
<div
className={classNames(styles.iframeBack, 'animate__animated', 'animate__fadeIn')}
onClick={() => props.logout()}
>
<div className={styles.iframeBackLeft}>
<img src={arrowLeftImg} alt="退出" />
</div>
<div className={styles.iframeBackIcon}>
<img src={backImg} alt="退出" />
退出
</div>
</div>
</div>
);
};
const mapStateToProps = state => ({
global: state.getIn(['global', 'globalConfig']),
integratedConfig: state.getIn(['global', 'integratedConfig']),
});
const mapDispatchToProps = dispatch => ({
updateConfig(config) {
dispatch(actionCreators.getConfig(config));
},
createContext(data) {
dispatch(actionCreators.createContext(data));
},
updateCurrentIndex(index) {
dispatch(actionCreators.updateCurrentIndex(index));
},
logout() {
dispatch(actionCreators.logout());
},
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(IntegrationSuzhou);
@imgSrc: '@/assets/images/integration/jianshi';
.integrationSuzhou {
width: 100%;
position: relative;
height: 100%;
overflow: hidden;
background: url('@/assets/images/integration/suzhou/背景.png') center/100% 100% no-repeat;
.integrationSuzhou_title {
display: flex;
align-items: flex-end;
justify-content: center;
margin-top: 0;
width: 1760px;
height: 160px;
position: relative;
.integrationSuzhou_title1 {
width: 100%;
}
.integrationSuzhou_subTitle {
width: 1500px;
height: 80px;
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
bottom: -40px;
}
}
.iframeBackIcon {
position: absolute;
top: 0;
right: -45px;
display: flex;
height: 44px;
width: 44px;
background: rgba(28, 94, 180, 0.95);
border-radius: 7px 0px 0px 7px;
flex-direction: column;
justify-content: space-around;
align-items: center;
font-size: 12px;
transition: all 0.2s;
padding: 3px 0;
img {
width: 17px;
height: 12px;
}
}
.iframeBack:hover {
.iframeBackIcon {
right: 0;
}
.iframeBackLeft {
right: -15px;
}
}
.iframeBackLeft {
position: absolute;
top: 0;
right: 0;
width: 14px;
height: 44px;
background: rgba(28, 94, 180, 0.95);
border-radius: 7px 0 0 7px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
img {
width: 6px;
height: 11px;
}
}
.iframeBack {
width: 44px;
height: 44px;
position: absolute;
top: 50px;
right: 0;
color: #FFF;
cursor: pointer;
user-select: none;
position: absolute;
z-index: 110;
}
.integrationSuzhou_exit {
position: absolute;
right: 10px;
top: 10px;
z-index: 100;
}
.integrationSuzhou_left {
position: absolute;
width: 173px;
height: 780px;
left: 30px;
top: 175px;
img {
width: 100%;
}
}
.integrationSuzhou_right {
position: absolute;
width: 173px;
height: 780px;
right: 30px;
top: 175px;
img {
width: 100%;
}
}
.integrationSuzhou_bottom {
position: absolute;
width: 100%;
bottom: 0;
left: 0;
display: flex;
justify-content: center;
pointer-events: none;
z-index: 99;
img {
width: 198px;
height: 180px;
}
.bottom3 {
margin-top: 43px;
}
.bottom2 {
margin: 53px 5px 0;
}
.bottom1 {
margin-top: 73px;
}
.bottom4 {
width: 362px;
height: 272px;
}
.bottom5 {
margin-top: 43px;
margin-left: 8px;
margin-right: 6px;
}
.bottom6 {
margin-top: 53px;
margin-right: 5px;
}
.bottom7 {
margin-top: 73px;
}
}
.integrationSuzhou_wrap {
position: absolute;
left: 50%;
top: 184px;
transform: translate(-50%, 0);
display: flex;
.integrationSuzhou_boxLeft {
width: 105px;
position: relative;
height: 658px;
padding-top: 14px;
&_icon1 {
width: 105px;
height: 193px;
top: 14px;
left: 0;
position: absolute;
}
&_icon2 {
width: 105px;
height: 387px;
position: absolute;
top: 142px;
left: 0;
}
&_icon3 {
width: 105px;
height: 193px;
position: absolute;
top: 465px;
left: 0;
}
}
}
.integration_row1 {
display: flex;
.cell1_box {
width: 328px;
height: 124px;
padding: 14px 5px;
transition: all 0.2s;
.cell1 {
width: 318px;
height: 96px;
line-height: 90px;
padding-left: 105px;
span {
font-weight: bold;
font-size: 22px;
color: #E9F6FF;
background: linear-gradient(0deg, #B5E2FF 20%, #FFFFFF 50%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 1px;
}
}
}
.cell1_box:hover {
.cell1 span {
filter: brightness(120%);
}
}
.integration_row_col_link:hover {
background: url('@/assets/images/integration/suzhou/运营中心hover.png') center/100% 100% no-repeat;
}
.cell1_box[name='数字流域驾驶舱'] {
.cell1 {
background: url('@/assets/images/integration/suzhou/数字流域驾驶舱.png') 36px 16px no-repeat, url('@/assets/images/integration/suzhou/运营中心bg.png') center center no-repeat;
background-size: 60px 70px, 100% 100%;
}
}
.cell1_box[name='河道信息专题'] {
.cell1 {
background: url('@/assets/images/integration/suzhou/河道信息专题.png') 36px 16px no-repeat, url('@/assets/images/integration/suzhou/运营中心bg.png') center center no-repeat;
background-size: 60px 70px, 100% 100%;
}
}
.cell1_box[name='河道监测专题'] {
.cell1 {
background: url('@/assets/images/integration/suzhou/河道监测专题.png') 36px 16px no-repeat, url('@/assets/images/integration/suzhou/运营中心bg.png') center center no-repeat;
background-size: 60px 70px, 100% 100%;
}
}
.cell1_box[name='河道水环境评价'] {
.cell1 {
background: url('@/assets/images/integration/suzhou/河道水环境评价.png') 36px 16px no-repeat, url('@/assets/images/integration/suzhou/运营中心bg.png') center center no-repeat;
background-size: 60px 70px, 100% 100%;
}
}
}
.integration_row2 {
display: flex;
font-weight: bold;
font-size: 18px;
color: #FFFFFF;
text-align: center;
&_box1 {
width: 521px;
&_title {
background: url('@/assets/images/integration/suzhou/河网监控.png') center top no-repeat;
background-size: auto 100%;
height: 71px;
}
&_list {
display: flex;
flex-wrap: wrap;
height: 350px;
width: 100%;
padding: 0 18px 10px 8px;
background: url('@/assets/images/integration/suzhou/河网监管.png') center bottom no-repeat;
background-size: 100% auto;
justify-content: space-between;
.box1_cell_wrap {
width: 244px;
height: 74px;
background: url('@/assets/images/integration/suzhou/河网监控bg.png') center center no-repeat;
background-size: 100% auto;
}
.box1_cell {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
letter-spacing: 2px;
}
.integration_row_col_link:hover {
background: url('@/assets/images/integration/suzhou/河道全景hover.png') center center no-repeat, url('@/assets/images/integration/suzhou/河网监控bg.png') center center no-repeat;
background-size: 100% 100%, 100% auto;
}
.box1_cell_wrap[name='排口管控'] {
width: 444px;
height: 68px;
background: url('@/assets/images/integration/suzhou/排口管控.png') center center no-repeat;
background-size: 100% auto;
margin: 0 auto;
}
.integration_row_col_link[name='排口管控']:hover {
background: url('@/assets/images/integration/suzhou/排口管控hover.png') center center no-repeat, url('@/assets/images/integration/suzhou/排口管控.png') center center no-repeat;
background-size: 100% 100%, 100% auto;
}
}
}
&_box2 {
width: 260px;
&_title {
background: url('@/assets/images/integration/suzhou/闸站调度.png') center top no-repeat;
background-size: auto 100%;
height: 71px;
}
&_list {
display: flex;
flex-direction: column;
height: 350px;
width: 100%;
padding: 0 18px 22px 8px;
background: url('@/assets/images/integration/suzhou/闸站调度bg.png') center bottom no-repeat;
background-size: 100% auto;
justify-content: space-between;
.box2_cell_wrap {
width: 235px;
height: 74px;
background: url('@/assets/images/integration/suzhou/闸站格局bg.png') center center no-repeat;
background-size: 100% auto;
}
.box2_cell {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
letter-spacing: 2px;
}
.integration_row_col_link:hover {
background: url('@/assets/images/integration/suzhou/闸站格局hover.png') center center no-repeat, url('@/assets/images/integration/suzhou/闸站格局bg.png') center center no-repeat;
background-size: 100% 100%, 100% auto;
}
}
}
&_box3 {
width: 260px;
&_title {
background: url('@/assets/images/integration/suzhou/业务中心.png') center top no-repeat;
background-size: auto 100%;
height: 71px;
}
&_list {
display: flex;
flex-direction: column;
height: 350px;
width: 100%;
padding: 0 18px 22px 8px;
background: url('@/assets/images/integration/suzhou/业务中心bg.png') center bottom no-repeat;
background-size: 100% auto;
justify-content: space-between;
.box3_cell_wrap {
width: 235px;
height: 74px;
background: url('@/assets/images/integration/suzhou/河管巡检bg.png') center center no-repeat;
background-size: 100% auto;
}
.box3_cell {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
letter-spacing: 2px;
}
.integration_row_col_link:hover {
background: url('@/assets/images/integration/suzhou/河管巡检hover.png') center center no-repeat, url('@/assets/images/integration/suzhou/河管巡检bg.png') center center no-repeat;
background-size: 100% 100%, 100% auto;
}
}
}
&_box4 {
width: 251px;
&_title {
background: url('@/assets/images/integration/suzhou/运营管理.png') center top no-repeat;
background-size: auto 100%;
height: 71px;
}
&_list {
display: flex;
flex-direction: column;
height: 350px;
width: 100%;
padding: 0 18px 22px 8px;
background: url('@/assets/images/integration/suzhou/运营管理bg.png') center bottom no-repeat;
background-size: 100% auto;
justify-content: space-between;
.box4_cell_wrap {
width: 235px;
height: 74px;
background: url('@/assets/images/integration/suzhou/水质分析bg.png') center center no-repeat;
background-size: 100% auto;
}
.box4_cell {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
letter-spacing: 2px;
}
.integration_row_col_link:hover {
background: url('@/assets/images/integration/suzhou/水质分析hover.png') center center no-repeat, url('@/assets/images/integration/suzhou/水质分析bg.png') center center no-repeat;
background-size: 100% 100%, 100% auto;
}
}
}
}
.integration_row3 {
display: flex;
justify-content: space-between;
padding-top: 18px;
padding: 18px 10px 0;
.row3_cell {
width: 230px;
height: 78px;
background: url('@/assets/images/integration/suzhou/支撑平台bg.png') center center no-repeat;
background-size: 100% 100%;
position: relative;
transition: all 0.3s;
top: 0;
.row3_text {
font-weight: bold;
font-size: 18px;
color: #DEEFFF;
padding: 30px 0 0 105px;
letter-spacing: 2px;
}
.row3_text[name="物联接入"] {
background: url('@/assets/images/integration/suzhou/物联接入.png') 37px 28px no-repeat;
background-size: 31px 34px;
}
.row3_text[name="视频接入"] {
background: url('@/assets/images/integration/suzhou/视频接入.png') 38px 29px no-repeat;
background-size: 31px 34px;
}
.row3_text[name="统一报警"] {
background: url('@/assets/images/integration/suzhou/统一报警.png') 37px 28px no-repeat;
background-size: 31px 34px;
}
.row3_text[name="WEB组态"] {
background: url('@/assets/images/integration/suzhou/WEB组态.png') 37px 30px no-repeat;
background-size: 31px 34px;
}
.row3_text[name="运维监管"] {
background: url('@/assets/images/integration/suzhou/运维监管.png') 37px 28px no-repeat;
background-size: 31px 34px;
}
}
.integration_row_col_link:hover {
top: -10px;
}
}
.integration_content {
display: flex;
flex-direction: column;
align-items: center;
transform-origin: left top;
position: absolute;
left: 50%;
top: 50%;
padding: 0px 20px 10px;
}
.integration_row_col_no {
// filter: grayscale(100%) brightness(90%);
cursor: not-allowed;
}
.integration_row_col_link {
cursor: pointer;
}
.integration_row_col_link:hover {
filter: brightness(120%);
}
}
.integrationJumpLoad {
width: 100%;
height: 100%;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
top: 0;
left: 0;
z-index: 1080;
padding-bottom: 50px;
background-color: rgba(0, 0, 0, 0.6);
}
.hide {
visibility: hidden;
}
@-webkit-keyframes scale-in-center {
0% {
-webkit-transform: scaleY(0);
transform: scaleY(0);
opacity: 1;
}
100% {
-webkit-transform: scaleY(1);
transform: scaleY(1);
opacity: 1;
}
}
@keyframes scale-in-center {
0% {
-webkit-transform: scaleY(0);
transform: scaleY(0);
opacity: 1;
}
100% {
-webkit-transform: scaleY(1);
transform: scaleY(1);
opacity: 1;
}
}
.scaleInCenter {
visibility: visible;
-webkit-animation: scale-in-center .3s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
animation: scale-in-center .3s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}
& :global {
.integrationSuzhou {
.anticon {
vertical-align: 0.125em;
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment