master
LiuJiaNan 2026-01-16 14:53:53 +08:00
parent ed51c0ad42
commit 518449613a
27 changed files with 1272 additions and 1711 deletions

View File

@ -1,39 +0,0 @@
import { RightOutlined } from "@ant-design/icons";
import closeIcon from "../../../../assets/images/public/bigScreen/close.png";
const Bubble = ({ id, title, description, onClose }) => {
const close = () => {
onClose && onClose();
};
const handleViewMore = () => {
// navigate({
// pathname: '/map',
// search: `?id=${id}&CORP_INFO_ID=${data.CORP_INFO_ID}&mapType=${data.type}&name=${data.name}&longitude=${data.position.x}&latitude=${data.position.y}`
// });
};
return (
<div className="bubble-wrap">
<div className="bubble-box">
<div className="bubble-wrap__header">
<div className="bubble-wrap__title">{title}</div>
<div className="bubble-wrap__close" style={{ backgroundImage: `url(${closeIcon})` }} onClick={close} />
</div>
<div className="bubble-wrap__content">
<div className="content__label">简介:</div>
<p className="content__text">{description}</p>
</div>
<div className="bubble-wrap__footer">
<p className="footer__text" onClick={handleViewMore}>
查看更多
<RightOutlined />
</p>
</div>
</div>
</div>
);
};
export default Bubble;

View File

@ -1,161 +0,0 @@
.bottom-container_con{
width: 1120px;
height: 240px;
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
.top_container{
width: 100%;
display: flex;
color: #ffffff;
font-size: 12px;
margin-bottom: 10px;
.title{
background: #074abe;
color: #ffffff;
padding: 5px 10px;
border-radius: 2px;
}
.con{
display: flex;
background: rgba(1,50,115,0.5);
line-height: 30px;
margin-left: 2px;
.item{
padding: 0 10px;
&:hover{
cursor: pointer;
background: #011d41;
}
}
.active{
background: #011d41;
}
}
}
.bottom-container{
display: flex;
justify-content: space-between;
.left{
width: 670px;
.title{
width: 360px;
height: 30px;
background-size: 100% 100%;
padding-left: 20px;
color: #ffffff;
font-weight: bold;
}
.main{
width: 670px;
height: 160px;
background-size: 100% 100%;
margin-top: 10px;
color: #ffffff;
.table{
width: 100%;
margin-top: 10px;
.head{
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr ;
color: #ffffff;
padding:10px 5px;
font-size: 12px;
text-align: center;
font-weight: bold;
}
.table-container{
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr ;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 0px auto;
text-align: center;
.fc1{
color: #0c90ff;
}
.fc2{
color: #62b13f;
}
.fc3{
color: #ffa105;
}
&:hover{
background-color: rgba(14,197,208,0.1);
box-shadow: 0 0 1px #00e7ff;
}
}
}
}
}
.right{
width: 440px;
.title{
width: 360px;
height: 30px;
background-size: 100% 100%;
color: #ffffff;
font-weight: bold;
padding-left: 20px;
}
.main{
display: flex;
justify-content: space-between;
margin-top: 10px;
.menu{
width: 120px;
border-radius: 5px;
background-color: rgb(13, 56, 119);
box-shadow: inset 0px 2px 2px 0px rgba(35, 24, 21, 0.17);
height: 180px;
color: #ffffff;
text-align: center;
line-height: 30px;
padding: 5px;
.list{
width: 100%;
border-radius: 5px;
background-color: rgba(18, 96, 181, 0.4);
box-shadow: 0 2px 1px 0 rgba(2, 32, 95, 0.4);
margin-bottom: 5px;
&:hover{
border-radius: 5px;
background-color: rgb(18, 96, 181);
box-shadow: 0px 2px 1px 0px rgba(2, 32, 95, 0.4);
cursor: pointer;
}
}
.active{
border-radius: 5px;
background-color: rgb(18, 96, 181);
box-shadow: 0px 2px 1px 0px rgba(2, 32, 95, 0.4);
cursor: pointer;
}
}
.video-container{
flex: 1;
margin-left: 10px;
padding: 10px;
}
}
}
}
}

View File

@ -1,116 +0,0 @@
import { useMount } from "ahooks";
import { useContext, useState } from "react";
import { CSSTransition } from "react-transition-group";
import guangImg from "~/assets/images/map_bi/guang.png";
import backImg from "~/assets/images/public/bigScreen/back.png";
import imgOk from "~/assets/images/public/bigScreen/imgok.png";
import topImg from "~/assets/images/public/bigScreen/title.png";
import { Context } from "~/pages/Container/Map/js/context";
import mitt from "~/pages/Container/Map/js/mitt";
import {
changePeopleTrajectorySelectVisibleMittKey,
clickBackMittKey,
clickBranchOfficePointMittKey,
clickPortPointMittKey,
deletePeoplePositionPointMittKey,
resetAllBottomUtilsCheckMittKey,
resetBottomCurrentIndexMittKey,
} from "~/pages/Container/Map/js/mittKey";
import "./index.less";
function Header() {
const { currentPort, currentBranchOffice, mapMethods, area } = useContext(Context);
const [animationKey, setAnimationKey] = useState(0);
useMount(() => {
setAnimationKey(Math.random());
});
const onBack = () => {
mitt.emit(deletePeoplePositionPointMittKey);
if (currentPort !== "00003" && currentBranchOffice) {
mitt.emit(clickPortPointMittKey, { id: "" });
mitt.emit(clickBranchOfficePointMittKey, { id: "" });
mapMethods.current.removeWall();
mapMethods.current.removeFourColorDiagram();
mapMethods.current.removeBranchOfficePoint();
mapMethods.current.removeMarkPoint();
mapMethods.current.flyTo();
mapMethods.current.addPortPoint();
}
else if (currentBranchOffice) {
mitt.emit(clickBranchOfficePointMittKey, { id: "" });
mapMethods.current.removeBranchOfficePoint();
mapMethods.current.removeMarkPoint();
mapMethods.current.returnPreviousCenterPoint();
setTimeout(() => {
mapMethods.current.addBranchOfficePoint(area);
}, 2000);
}
else if (currentPort) {
mitt.emit(clickPortPointMittKey, { id: "" });
mapMethods.current.removeWall();
mapMethods.current.removeFourColorDiagram();
mapMethods.current.removeBranchOfficePoint();
mapMethods.current.removeMarkPoint();
mapMethods.current.flyTo();
mapMethods.current.addPortPoint();
}
mitt.emit(resetBottomCurrentIndexMittKey);
mitt.emit(resetAllBottomUtilsCheckMittKey);
mitt.emit(clickBackMittKey);
mitt.emit(changePeopleTrajectorySelectVisibleMittKey, false);
};
return (
<div className="header_container">
<CSSTransition
in={animationKey !== 0}
timeout={1000}
classNames={{
enter: "animate__animated",
enterActive: "animate__animated animate__fadeInDown",
exit: "animate__animated",
exitActive: "animate__animated animate__fadeOutUp",
}}
unmountOnExit
>
<header style={{ backgroundImage: `url(${topImg})` }}>
<CSSTransition
in={!!(currentPort || currentBranchOffice)}
timeout={1000}
classNames={{
enter: "animate__animated",
enterActive: "animate__animated animate__fadeInDown",
exit: "animate__animated",
exitActive: "animate__animated animate__fadeOutUp",
}}
unmountOnExit
>
</CSSTransition>
<div
className="back"
onClick={onBack}
>
{" "}
<img src={backImg} alt="返回" />
{" "}
返回
</div>
<div className="title">秦港股份安全监管平台</div>
<div style={{ backgroundImage: `url(${guangImg})` }} className="guang" />
<div className="time">
{" "}
<img src={imgOk} />
{" "}
企业已连续平安运行 1095
</div>
</header>
</CSSTransition>
</div>
);
}
export default Header;

View File

@ -1,75 +0,0 @@
.header_container {
header {
width: 100%;
height: 70px;
background-size: 100% 100%;
background-repeat: no-repeat;
font-size: 40px;
color: #fff;
text-align: center;
padding-top: 10px;
font-weight: bold;
position: absolute;
.back {
position: absolute;
top: 10px;
left: 10px;
cursor: pointer;
font-size: 14px;
font-weight: normal;
}
.title {
background-image: linear-gradient(to bottom, #5bb4f7, #ffffff);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 34px;
}
.guang {
background-size: 100% 100%;
background-repeat: no-repeat;
width: 707px;
height: 85px;
position: absolute;
top: 25px;
left: 50%;
animation: headerContainerScale 2s infinite;
@keyframes headerContainerScale {
0% {
transform: translateX(-50%) scale(1);
}
50% {
transform: translateX(-50%) scale(0.5);
}
100% {
transform: translateX(-50%) scale(1);
}
}
}
.time{
position: absolute;
right: 20px;
top: 20px;
font-size: 14px;
border-style: solid;
border-width: 1px;
border-color: rgba(12,108,177,0.2);
background-image: -moz-linear-gradient( 90deg, rgb(14,26,90) 0%, rgb(16,26,74) 100%);
background-image: -webkit-linear-gradient( 90deg, rgb(14,26,90) 0%, rgb(16,26,74) 100%);
background-image: -ms-linear-gradient( 90deg, rgb(14,26,90) 0%, rgb(16,26,74) 100%);
box-shadow: inset 0px 3px 7px 0px rgba(21, 50, 102, 0.35);
font-weight: normal;
padding: 5px 10px;
border-radius: 20px;
color: #ffffff;
z-index: 9999;
}
}
}

View File

@ -1,146 +0,0 @@
import * as echarts from "echarts";
import { textFormatter } from "~/pages/Container/Map/js/utils";
export const initEcharts1 = (main1Ref, chartInstance, data) => {
const XAxisData = [];
const seriesData1 = [];
const seriesData2 = [];
data.forEach((e) => {
XAxisData.push(e.AREA_NAME);
seriesData1.push(Number(e.CAR_IN) + Number(e.PEOPLE_IN));
seriesData2.push(Number(e.CAR_OUT) + Number(e.PEOPLE_OUT));
});
chartInstance.current = echarts.init(main1Ref.current);
const option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
},
grid: {
left: "2%",
right: "4%",
bottom: "5%",
top: "10%",
containLabel: true,
},
dataZoom: [
{
type: "slider",
height: 6,
bottom: 0,
show: true,
start: 0,
end: 25,
handleSize: 3,
handleStyle: {
color: "#DCE2E8",
},
xAxisIndex: [0],
filterMode: "filter",
showDetail: false,
},
],
legend: {
top: "0%",
right: "0%",
textStyle: {
color: "#fff",
fontSize: 14,
},
itemWidth: 12,
itemHeight: 10,
},
xAxis: {
type: "category",
data: XAxisData,
axisLine: {
lineStyle: {
color: "#fff",
},
},
axisLabel: {
rotate: 0,
color: "#fff",
fontSize: 14,
interval: 0,
formatter(value) {
return textFormatter(value, 3);
},
},
},
yAxis: {
type: "value",
axisLine: {
show: false,
lineStyle: {
color: "#fff",
},
},
splitLine: {
show: true,
lineStyle: {
color: "#8c9493",
},
},
axisLabel: {
fontSize: 14,
color: "#fff",
},
},
series: [
{
name: "进",
type: "bar",
barWidth: "30%",
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "#00f0ff",
},
{
offset: 1,
color: "#0066ff",
},
],
false,
),
data: seriesData1,
},
{
name: "出",
type: "bar",
barWidth: "30%",
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "#003cff",
},
{
offset: 1,
color: "#00ff9c",
},
],
false,
),
data: seriesData2,
},
],
};
chartInstance.current.setOption(option);
};

View File

@ -1,173 +0,0 @@
import img9 from "~/assets/images/public/bigScreen/bg9.png";
import img8 from "~/assets/images/public/bigScreen/bg10.png";
import img7 from "~/assets/images/public/bigScreen/ico3.png";
import img1 from "~/assets/images/public/bigScreen/smalltitle.png";
import img5 from "~/assets/images/public/bigScreen/tablebg1.png";
import img6 from "~/assets/images/public/bigScreen/tablebg2.png";
import img3 from "~/assets/images/public/bigScreen/w_ico1.png";
import img4 from "~/assets/images/public/bigScreen/w_ico2.png";
import img2 from "~/assets/images/public/weather/1.png";
import "./index.less";
function LeftScreen() {
return (
<div className="left-container">
<div className="item">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
天气预报情况
</div>
<div className="main">
<div className="list1">
<img src={img2} alt="" className="img1" />
<div></div>
</div>
<div className="list1">
<img src={img3} alt="" className="img" />
<div className="info">
<div>温度</div>
<div className="temp">28.5°</div>
</div>
</div>
<div className="list1">
<img src={img4} alt="" className="img" />
<div className="info">
<div>风速</div>
<div className="temp">8</div>
</div>
</div>
</div>
<div className="info">
秦皇岛市气象台发布大风橙色预警[工级/严重]
</div>
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>处置状态</div>
<div>预防措施</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item fc1">未处置</div>
<div className="table-item">远离大树电线杆简易房等...</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item fc2">已处置</div>
<div className="table-item">远离大树电线杆简易房等...</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item fc3">处置中</div>
<div className="table-item">远离大树电线杆简易房等...</div>
</div>
</div>
</div>
<div className=" block2">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
重大危险源运行情况
</div>
<div className="main">
<div className="warning">
{" "}
<img src={img7} alt="" />
{" "}
北区二号罐液位过低
</div>
<div className="main_item">
<div className="list" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">二级重大危险源1</div>
<div className="main_con">
<div className="item">储罐数3</div>
<div className="item ">再用数3</div>
<div className="item ">
停用数
<span className="fcr">2</span>
</div>
</div>
</div>
<div className="list" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">三级重大危险源2</div>
<div className="main_con">
<div className="item">储罐数10</div>
<div className="item ">再用数10</div>
<div className="item ">
停用数
<span className="fcr">0</span>
</div>
</div>
</div>
</div>
<div className="main_item">
<div className="list" style={{ backgroundImage: `url(${img9})` }}>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state">正常</div>
</div>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state fcr">液位低</div>
</div>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state">正常</div>
</div>
</div>
<div className="list" style={{ backgroundImage: `url(${img9})` }}>
<div className="title fcb">报警处置情况</div>
<div className="main_con1">
<div className="item">温度待处置数/报警个数0/0 </div>
<div className="item ">压力待处置数/报警个数0/0</div>
<div className="item ">液位待处置数/报警个数1/1</div>
</div>
</div>
</div>
</div>
</div>
<div className=" block3">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
领域整改情况统计
</div>
<div className="main">
这里是echart
</div>
</div>
<div className="block4">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
当前各公司作业中情况
</div>
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>发现隐患数</div>
<div>整改隐患数</div>
<div>待整改</div>
<div>待验收</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
<div className="table-item">123</div>
</div>
</div>
</div>
</div>
</div>
);
}
export default LeftScreen;

View File

@ -1,261 +0,0 @@
.left-container{
width: 360px;
height: calc(100vh - 80px);
position: absolute;
left: 20px;
top: 60px;
.item{
width: 100%;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 100%;
display: flex;
align-items: center;
margin-top: 10px;
.list1{
display: flex;
color: #ffffff;
align-items: center;
width: 33%;
text-align: center;
.img1{
width: 40px;
height: 40px;
}
.img{
width: 42px;
height: 42px;
margin-right: 5px;
}
.temp{
font-size: 18px;
color: #00e7ff;
}
}
}
.info{
color: #fe9e00;
font-weight: bold;
margin-top: 10px;
}
.table{
width: 360px;
margin-top: 10px;
.head{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 2fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
}
.table-container{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 2fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
.fc1{
color: #0c90ff;
}
.fc2{
color: #62b13f;
}
.fc3{
color: #ffa105;
}
}
}
}
.block2{
width: 100%;
margin-top: 10px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
.warning{
width: 100%;
border-style: solid;
border-width: 1px;
border-color: rgb(255, 0, 0,0.5);
border-radius: 2px;
background-color: rgba(16, 36, 93, 0.659);
color: #ffffff;
padding: 5px;
vertical-align: middle;
font-weight: bold;
margin: 10px auto;
}
.mt10{
margin-top: 10px;
}
.main_item{
width: 100%;
display: flex;
justify-content: space-between;
.list{
width: 48%;
height: 91px;
background-size: 100% 100%;
padding: 5px;
color: #ffffff;
.title{
font-weight: bold;
}
.main_con{
width: 100%;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.item{
width: 50%;
margin: 2px 0;
font-size: 12px;
.fcr{
color: #f90102;
}
}
}
.fcb{
color: #00aeff;
}
.main_con1{
.item{
width: 100%;
margin: 2px 0;
font-size: 12px;
line-height: 22px;
.fcr{
color: #f90102;
}
}
}
.item_list{
width: 100%;
display: flex;
justify-content: space-between;
border-bottom: 1px solid #163682;
font-size: 12px;
line-height: 30px;
.info{
width: 60%;
}
.state{
width: 40%;
text-align: right;
color: #7ccf41;
}
.fcr{
color: #f90102;
}
}
}
}
}
}
.block3{
width: 100%;
margin-top: 20px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 360px;
height: 100px;
}
}
.block4{
width: 100%;
margin-top: 20px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 360px;
.table{
width: 360px;
margin-top: 10px;
.head{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39,101,175,0.5);
text-align: center;
}
.table-container{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17,51,122,0.5);
text-align: center;
.fc1{
color: #0c90ff;
}
.fc2{
color: #62b13f;
}
.fc3{
color: #ffa105;
}
}
}
}
}
}

View File

@ -1,209 +0,0 @@
import img8 from "~/assets/images/public/bigScreen/bg11.png";
import img9 from "~/assets/images/public/bigScreen/bg12.png";
import img2 from "~/assets/images/public/bigScreen/ico6.png";
import img3 from "~/assets/images/public/bigScreen/ico7.png";
import img4 from "~/assets/images/public/bigScreen/ico8.png";
import img7 from "~/assets/images/public/bigScreen/ico9.png";
import img1 from "~/assets/images/public/bigScreen/smalltitle.png";
import img5 from "~/assets/images/public/bigScreen/tablebg1.png";
import img6 from "~/assets/images/public/bigScreen/tablebg2.png";
import "./index.less";
function RightScreen() {
return (
<div className="right-container">
<div className="block1">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
相关方申请审批管理
</div>
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>单位名称</div>
<div>待审批项目数</div>
<div>待提交培训人员数</div>
<div>待培训人数</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">方宇物业</div>
<div className="table-item">2</div>
<div className="table-item">3</div>
<div className="table-item">4</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">方宇物业</div>
<div className="table-item">2</div>
<div className="table-item">3</div>
<div className="table-item">4</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">方宇物业</div>
<div className="table-item">2</div>
<div className="table-item">3</div>
<div className="table-item">4</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">方宇物业</div>
<div className="table-item">2</div>
<div className="table-item">3</div>
<div className="table-item">4</div>
</div>
</div>
</div>
</div>
<div className=" block2">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
当前重点作业统计
</div>
<div className="main">
<div className="item">
<div className="img">
<img src={img2} alt="" />
</div>
<div className="info">
<div className="title">三人以上作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img3} alt="" />
</div>
<div className="info">
<div className="title">危险作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img4} alt="" />
</div>
<div className="info">
<div className="title">夜间作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img7} alt="" />
</div>
<div className="info">
<div className="title">四新作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
</div>
</div>
<div className=" block3">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
当前口门封闭区情况
</div>
<div className="main">
<div className="item" style={{ backgroundImage: `url(${img9})` }}>
<div className="title">一级口门进出统计</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img9})` }}>
<div className="title">进入申请待审批</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">封闭区域人员情况</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">封闭区域作业情况</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
</div>
</div>
<div className="block4">
<div className="top" style={{ backgroundImage: `url(${img1})` }}>
物联网设备报警情况
</div>
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>检测系统</div>
<div>报警原因</div>
<div>处置状态</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
<div className="table-container" style={{ backgroundImage: `url(${img6})` }}>
<div className="table-item">新益公司</div>
<div className="table-item">火灾检测系统</div>
<div className="table-item">燃气泄露</div>
<div className="table-item">未处置</div>
</div>
</div>
</div>
</div>
</div>
);
}
export default RightScreen;

View File

@ -1,205 +0,0 @@
.right-container{
width: 360px;
height: calc(100vh - 80px);
position: absolute;
right: 20px;
top: 60px;
.block1{
width: 100%;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 100%;
display: flex;
align-items: center;
.table{
width: 360px;
margin-top: 10px;
.head{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1.5fr 1fr ;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39,101,175,0.5);
text-align: center;
}
.table-container{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1.5fr 1fr ;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17,51,122,0.5);
text-align: center;
.fc1{
color: #0c90ff;
}
.fc2{
color: #62b13f;
}
.fc3{
color: #ffa105;
}
}
}
}
}
.block2{
width: 100%;
margin-top: 10px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.item{
width: 50%;
display: flex;
align-items: center;
margin-top: 10px;
.title{
font-weight: bold;
}
.info{
padding-left: 10px;
width: 100%;
color: #ffffff;
font-size: 12px;
p{
margin: 0;
}
}
}
}
}
.block3{
width: 100%;
margin-top: 20px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 360px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.item{
width: 49%;
text-align: center;
background-size: 100% 100%;
color: #ffffff;
padding:5px 10px;
font-size: 12px;
margin-top: 10px;
.title{
font-weight: bold;
}
.num{
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 5px;
}
}
}
}
.block4{
width: 100%;
margin-top: 20px;
.top{
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 360px;
height: 30px;
background-size: 100% 100%;
}
.main{
width: 360px;
.table{
width: 360px;
margin-top: 10px;
.head{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr ;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39,101,175,0.5);
text-align: center;
}
.table-container{
width: 360px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr ;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17,51,122,0.5);
text-align: center;
.fc1{
color: #0c90ff;
}
.fc2{
color: #62b13f;
}
.fc3{
color: #ffa105;
}
}
}
}
}
}

View File

@ -1,83 +0,0 @@
.search_container{
width: 214px;
min-height: 200px;
position: absolute;
top: 100px;
left: 400px;
background: rgba(0,41,82,0.68);
border-radius: 4px;
border: 1px solid rgba(44,105,172,0.6);
.top{
width: 214px;
height: 37px;
background-size: 100% 100%;
display: flex;
padding: 5px;
position: relative;
.list{
color: #ffffff;
padding: 2px 8px;
cursor: pointer;
&:hover{
border-radius: 2px;
background-color: rgba(36, 115, 239, 0.549);
box-shadow: 0 1px 1px 0 rgba(2, 32, 95, 0.4);
}
}
.active{
border-radius: 2px;
background-color: rgba(36, 115, 239, 0.549);
box-shadow: 0 1px 1px 0 rgba(2, 32, 95, 0.4);
}
.close{
position: absolute;
top: 5px;
right: 10px;
cursor: pointer;
}
}
.search_con{
background: rgba(5,40,106,0.68);
height: 30px;
border: 1px solid rgba(23,86,168,0.68);
margin:5px;
border-radius: 4px;
color: #4371af;
line-height: 30px;
padding-left: 5px;
font-size: 12px;
.input{
border: none;
background: none;
width: 100%;
height: 30px;
outline: none;
color: #ffffff;
&::-webkit-input-placeholder{
color: #4371af;
}
}
}
.con{
width: 100%;
.item{
width: 100%;
display: flex;
justify-content: space-between;
font-size: 12px;
color: #ffffff;
padding: 5px;
box-sizing: border-box;
border-bottom: 1px dashed #205376;
align-items: center;
.btn{
border-radius: 4px;
background-color: rgba(36, 115, 239, 0.2);
padding:2px 5px;
border: 1px solid rgba(42,86,158,0.58);
cursor: pointer;
}
}
}
}

View File

@ -1,23 +0,0 @@
import Bottom from "~/pages/Container/Bi/components/Bottom/index";
import LeftPanel from "~/pages/Container/Bi/components/LeftPanel/index";
import RightPanel from "~/pages/Container/Bi/components/RightPanel/index";
import Search from "~/pages/Container/Bi/components/Search/index";
import backgroundimg from "../../../assets/images/public/bigScreen/backgroundimg.jpg";
import Header from "../Bi/components/Header/index";
import "./index.less";
function BiScreen() {
return (
<div className="screen-container" style={{ backgroundImage: `url(${backgroundimg})` }}>
<Header />
<div className="screen-content">
<LeftPanel />
<RightPanel />
<Bottom />
<Search />
</div>
</div>
);
}
export default BiScreen;

View File

@ -1,9 +0,0 @@
.screen-container{
width: 100vw;
height: 100vh;
.screen-content{
width: 100%;
display: flex;
justify-content: space-between;
}
}

View File

@ -1,7 +1,8 @@
import AliPlayer from "zy-react-library/components/Video/AliPlayer";
import img2 from "~/assets/images/public/bigScreen/bg13.png";
import img3 from "~/assets/images/public/bigScreen/bg14.png";
import img4 from "~/assets/images/public/bigScreen/more1.png";
import img1 from "~/assets/images/public/bigScreen/smalltitle.png";
import Title from "~/pages/Container/Map/components/Content/IndexInfo/Title";
import "./index.less";
function BottomScreen() {
@ -26,7 +27,7 @@ function BottomScreen() {
</div>
<div className="bottom-container">
<div className="left">
<div className="title" style={{ backgroundImage: `url(${img1})` }}>分子公司考核情况</div>
<Title title="分子公司考核情况" />
<div className="main" style={{ backgroundImage: `url(${img2})` }}>
<div className="table">
<div className="head">
@ -69,7 +70,7 @@ function BottomScreen() {
</div>
</div>
<div className="right">
<div className="title" style={{ backgroundImage: `url(${img1})` }}>视频巡屏</div>
<Title title="视频巡屏" />
<div className="main">
<div className="menu">
<div className="list active">新益公司</div>
@ -79,13 +80,12 @@ function BottomScreen() {
<div className="list">九公司</div>
</div>
<div className="video-container" style={{ backgroundImage: `url(${img3})` }}>
这里是视频
<AliPlayer source="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4" height="100%" isLive />
</div>
</div>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,157 @@
.index_info_container {
.bottom-container_con {
width: 1120px;
height: 240px;
position: absolute;
bottom: 35px;
left: 50%;
transform: translateX(-50%);
.top_container {
display: flex;
color: #ffffff;
font-size: 12px;
margin-bottom: 10px;
.title {
background: #074abe;
color: #ffffff;
padding: 5px 10px;
border-radius: 2px;
}
.con {
display: flex;
background: rgba(1, 50, 115, 0.5);
line-height: 30px;
margin-left: 2px;
.item {
padding: 0 10px;
&:hover {
cursor: pointer;
background: #011d41;
}
}
.active {
background: #011d41;
}
}
}
.bottom-container {
display: flex;
justify-content: space-between;
.left {
width: 670px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
width: 670px;
height: 160px;
background-size: 100% 100%;
margin-top: 10px;
color: #ffffff;
.table {
margin-top: 10px;
.head {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 10px 5px;
font-size: 12px;
text-align: center;
font-weight: bold;
}
.table-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 0px auto;
text-align: center;
.fc1 {
color: #0c90ff;
}
.fc2 {
color: #62b13f;
}
.fc3 {
color: #ffa105;
}
&:hover {
background-color: rgba(14, 197, 208, 0.1);
box-shadow: 0 0 1px #00e7ff;
}
}
}
}
}
.right {
width: 440px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
display: flex;
justify-content: space-between;
margin-top: 10px;
.menu {
width: 120px;
border-radius: 5px;
background-color: rgb(13, 56, 119);
box-shadow: inset 0px 2px 2px 0px rgba(35, 24, 21, 0.17);
height: 180px;
color: #ffffff;
text-align: center;
line-height: 30px;
padding: 5px;
.list {
border-radius: 5px;
background-color: rgba(18, 96, 181, 0.4);
box-shadow: 0 2px 1px 0 rgba(2, 32, 95, 0.4);
margin-bottom: 5px;
&:hover {
border-radius: 5px;
background-color: rgb(18, 96, 181);
box-shadow: 0px 2px 1px 0px rgba(2, 32, 95, 0.4);
cursor: pointer;
}
}
.active {
border-radius: 5px;
background-color: rgb(18, 96, 181);
box-shadow: 0px 2px 1px 0px rgba(2, 32, 95, 0.4);
cursor: pointer;
}
}
.video-container {
flex: 1;
margin-left: 10px;
padding: 10px;
}
}
}
}
}
}

View File

@ -0,0 +1,165 @@
import * as echarts from "echarts";
export const initEcharts1 = (main1Ref, chartInstance, data) => {
chartInstance.current = echarts.init(main1Ref.current);
const companyNames = data.map(item => item.name);
const hazardCounts = data.map(item => item.hazardCount);
const unrectifiedCounts = data.map(item => item.unrectifiedCount);
const rectificationRates = data.map(item => item.rectificationRate);
const option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
},
grid: {
left: "10%",
top: "28%",
right: "10%",
bottom: "25%",
},
legend: {
data: ["隐患数量", "未整改数量", "整改率"],
top: "0%",
right: "3%",
textStyle: {
color: "#FFFFFF",
fontSize: 12,
},
},
dataZoom: [
{
type: "slider",
height: 6,
bottom: "7%",
show: true,
start: 0,
end: 40,
handleSize: 5,
handleStyle: {
color: "#DCE2E8",
},
xAxisIndex: [0],
filterMode: "filter",
showDetail: false,
},
],
xAxis: {
data: companyNames,
axisLine: {
show: false,
},
axisTick: {
show: false,
alignWithLabel: true,
},
axisLabel: {
show: true,
color: "#FFFFFF",
fontSize: 12,
margin: 12,
interval: 0,
},
},
yAxis: [
{
type: "value",
name: "数量",
nameTextStyle: {
color: "#FFFFFF",
fontSize: 12,
},
splitLine: {
show: true,
lineStyle: {
color: "#000000",
type: "solid",
},
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
axisLabel: {
show: true,
color: "#FFFFFF",
fontSize: 12,
},
},
{
type: "value",
name: "整改率(%)",
nameTextStyle: {
color: "#FFFFFF",
fontSize: 12,
},
min: 0,
max: 100,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: "#FFFFFF",
fontSize: 12,
},
},
],
series: [
{
name: "隐患数量",
type: "bar",
barWidth: 10,
yAxisIndex: 0,
itemStyle: {
color: "#C5993B",
},
data: hazardCounts,
},
{
name: "未整改数量",
type: "bar",
barWidth: 10,
yAxisIndex: 0,
itemStyle: {
color: "#FF0606",
},
data: unrectifiedCounts,
},
{
name: "整改率",
type: "line",
yAxisIndex: 1,
showAllSymbol: true,
symbol: "circle",
symbolSize: 10,
itemStyle: {
color: "#33FFFF",
},
label: {
show: true,
position: "top",
formatter: "{c}%",
color: "#FFFFCC",
fontSize: 12,
},
lineStyle: {
color: "#33FFFF",
shadowBlur: 1,
},
z: 18,
data: rectificationRates,
},
],
};
chartInstance.current.setOption(option);
};

View File

@ -0,0 +1,209 @@
import { useMount } from "ahooks";
import { useRef, useState } from "react";
import SeamlessScroll from "zy-react-library/components/SeamlessScroll";
import img9 from "~/assets/images/public/bigScreen/bg9.png";
import img8 from "~/assets/images/public/bigScreen/bg10.png";
import img7 from "~/assets/images/public/bigScreen/ico3.png";
import img5 from "~/assets/images/public/bigScreen/tablebg1.png";
import img6 from "~/assets/images/public/bigScreen/tablebg2.png";
import img3 from "~/assets/images/public/bigScreen/w_ico1.png";
import img4 from "~/assets/images/public/bigScreen/w_ico2.png";
import img2 from "~/assets/images/public/weather/1.png";
import Title from "~/pages/Container/Map/components/Content/IndexInfo/Title";
import { initEcharts1 } from "./echarts";
import "./index.less";
function LeftScreen() {
const [block1List, setBlock1List] = useState([
{ id: 1, companyName: "新益公司", status: 0, preventiveMeasures: "远离大树、电线杆、简易房等..." },
{ id: 2, companyName: "华泰化工", status: 1, preventiveMeasures: "加固设备、检查管道连接..." },
{ id: 3, companyName: "宏达制造", status: 2, preventiveMeasures: "暂停户外作业、检查电气设备..." },
{ id: 4, companyName: "金鼎能源", status: 0, preventiveMeasures: "关闭通风设备、加强监测..." },
{ id: 5, companyName: "瑞丰新材料", status: 1, preventiveMeasures: "疏散人员、设置警戒线..." },
{ id: 6, companyName: "恒通物流", status: 2, preventiveMeasures: "暂停运输作业、固定货物..." },
{ id: 7, companyName: "天成建筑", status: 0, preventiveMeasures: "停止高空作业、加固脚手架..." },
{ id: 8, companyName: "绿源环保", status: 1, preventiveMeasures: "启动应急预案、检测环境指标..." },
{ id: 9, companyName: "安泰消防", status: 2, preventiveMeasures: "配备消防器材、加强巡查..." },
{ id: 10, companyName: "创新科技", status: 0, preventiveMeasures: "断电保护、转移重要设备..." },
]);
const [block4List, setBlock4List] = useState([
{ id: 1, companyName: "新益公司", foundHazards: 123, resolvedHazards: 120, pendingResolution: 2, pendingAcceptance: 1 },
{ id: 2, companyName: "华泰化工", foundHazards: 85, resolvedHazards: 80, pendingResolution: 3, pendingAcceptance: 2 },
{ id: 3, companyName: "宏达制造", foundHazards: 67, resolvedHazards: 65, pendingResolution: 1, pendingAcceptance: 1 },
{ id: 4, companyName: "金鼎能源", foundHazards: 156, resolvedHazards: 145, pendingResolution: 8, pendingAcceptance: 3 },
{ id: 5, companyName: "瑞丰新材料", foundHazards: 42, resolvedHazards: 40, pendingResolution: 1, pendingAcceptance: 1 },
{ id: 6, companyName: "恒通物流", foundHazards: 78, resolvedHazards: 75, pendingResolution: 2, pendingAcceptance: 1 },
{ id: 7, companyName: "天成建筑", foundHazards: 93, resolvedHazards: 88, pendingResolution: 4, pendingAcceptance: 1 },
{ id: 8, companyName: "绿源环保", foundHazards: 56, resolvedHazards: 54, pendingResolution: 1, pendingAcceptance: 1 },
{ id: 9, companyName: "安泰消防", foundHazards: 112, resolvedHazards: 110, pendingResolution: 1, pendingAcceptance: 1 },
{ id: 10, companyName: "创新科技", foundHazards: 71, resolvedHazards: 69, pendingResolution: 1, pendingAcceptance: 1 },
]);
const chartInstance = useRef(null);
const main1Ref = useRef(null);
useMount(() => {
initEcharts1(main1Ref, chartInstance, [
{ name: "新益公司", hazardCount: 123, unrectifiedCount: 23, rectificationRate: 81.3 },
{ name: "华泰化工", hazardCount: 85, unrectifiedCount: 15, rectificationRate: 82.4 },
{ name: "宏达制造", hazardCount: 67, unrectifiedCount: 12, rectificationRate: 82.1 },
{ name: "金鼎能源", hazardCount: 156, unrectifiedCount: 32, rectificationRate: 79.5 },
{ name: "瑞丰新材料", hazardCount: 42, unrectifiedCount: 8, rectificationRate: 81.0 },
{ name: "恒通物流", hazardCount: 78, unrectifiedCount: 18, rectificationRate: 76.9 },
{ name: "天成建筑", hazardCount: 93, unrectifiedCount: 23, rectificationRate: 75.3 },
{ name: "绿源环保", hazardCount: 56, unrectifiedCount: 11, rectificationRate: 80.4 },
{ name: "安泰消防", hazardCount: 112, unrectifiedCount: 22, rectificationRate: 80.4 },
{ name: "创新科技", hazardCount: 71, unrectifiedCount: 16, rectificationRate: 77.5 },
]);
return () => {
if (chartInstance.current) {
chartInstance.current.dispose();
chartInstance.current = null;
}
};
});
return (
<div className="left-container">
<div className="block1">
<Title title="天气预报情况" />
<div className="main">
<div className="list1">
<img src={img2} alt="" className="img1" />
<div></div>
</div>
<div className="list1">
<img src={img3} alt="" className="img" />
<div className="info">
<div>温度</div>
<div className="temp">28.5°</div>
</div>
</div>
<div className="list1">
<img src={img4} alt="" className="img" />
<div className="info">
<div>风速</div>
<div className="temp">8</div>
</div>
</div>
</div>
<div className="info">
秦皇岛市气象台发布大风橙色预警[工级/严重]
</div>
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>处置状态</div>
<div>预防措施</div>
</div>
<div className="scroll">
<SeamlessScroll list={block1List} step={0.5}>
{block1List.map((item, index) => (
<div className="table-container" style={{ backgroundImage: `url(${img6})` }} key={index}>
<div className="table-item">{item.companyName}</div>
<div className={`table-item ${item.status === 0 ? "fc1" : ""} ${item.status === 1 ? "fc2" : ""} ${item.status === 2 ? "fc3" : ""} `}>
{item.status === 0 ? "未处置" : item.status === 1 ? "已处置" : "处置中"}
</div>
<div className="table-item">{item.preventiveMeasures}</div>
</div>
))}
</SeamlessScroll>
</div>
</div>
</div>
<div className="block2">
<Title title="重大危险源运行情况" />
<div className="main">
<div className="warning">
<img src={img7} alt="" />
北区二号罐液位过低
</div>
<div className="main_item">
<div className="list" style={{ backgroundImage: `url(${img8})`, height: 91 }}>
<div className="title">二级重大危险源1</div>
<div className="main_con">
<div className="item">储罐数3</div>
<div className="item ">再用数3</div>
<div className="item ">
停用数
<span className="fcr">2</span>
</div>
</div>
</div>
<div className="list" style={{ backgroundImage: `url(${img8})`, height: 91 }}>
<div className="title">三级重大危险源2</div>
<div className="main_con">
<div className="item">储罐数10</div>
<div className="item ">再用数10</div>
<div className="item ">
停用数
<span className="fcr">0</span>
</div>
</div>
</div>
</div>
<div className="main_item">
<div className="list" style={{ backgroundImage: `url(${img9})`, height: 117 }}>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state">正常</div>
</div>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state fcr">液位低</div>
</div>
<div className="item_list">
<div className="info">东罐区二号罐</div>
<div className="state">正常</div>
</div>
</div>
<div className="list" style={{ backgroundImage: `url(${img9})`, height: 117 }}>
<div className="title fcb">报警处置情况</div>
<div className="main_con1">
<div className="item">温度待处置数/报警个数0/0 </div>
<div className="item ">压力待处置数/报警个数0/0</div>
<div className="item ">液位待处置数/报警个数1/1</div>
</div>
</div>
</div>
</div>
</div>
<div className="block3">
<Title title="领域整改情况统计" />
<div className="main">
<div ref={main1Ref} style={{ width: "100%", height: "180px" }} />
</div>
</div>
<div className="block4">
<Title title="当前各公司作业中情况" />
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>发现隐患数</div>
<div>整改隐患数</div>
<div>待整改</div>
<div>待验收</div>
</div>
<div className="scroll">
<SeamlessScroll list={block4List} step={0.5}>
{block4List.map((item, index) => (
<div className="table-container" style={{ backgroundImage: `url(${img6})` }} key={index}>
<div className="table-item">{item.companyName}</div>
<div className="table-item">{item.foundHazards}</div>
<div className="table-item">{item.resolvedHazards}</div>
<div className="table-item">{item.pendingResolution}</div>
<div className="table-item">{item.pendingAcceptance}</div>
</div>
))}
</SeamlessScroll>
</div>
</div>
</div>
</div>
</div>
);
}
export default LeftScreen;

View File

@ -0,0 +1,244 @@
.index_info_container {
.left-container {
width: 360px;
position: absolute;
left: 20px;
top: 60px;
max-height: calc(100vh - 75px);
.block1 {
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
display: flex;
align-items: center;
margin-top: 10px;
.list1 {
display: flex;
color: #ffffff;
align-items: center;
width: 33%;
text-align: center;
.img1 {
width: 40px;
height: 40px;
}
.img {
width: 42px;
height: 42px;
margin-right: 5px;
}
.temp {
font-size: 18px;
color: #00e7ff;
}
}
}
.info {
color: #fe9e00;
font-weight: bold;
margin-top: 10px;
}
.table {
margin-top: 10px;
.head {
display: grid;
grid-template-columns: 1fr 1fr 2fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
}
.scroll {
height: 100px;
overflow-y: hidden;
.table-container {
display: grid;
grid-template-columns: 1fr 1fr 2fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
.fc1 {
color: #0c90ff;
}
.fc2 {
color: #62b13f;
}
.fc3 {
color: #ffa105;
}
}
}
}
}
.block2 {
margin-top: 10px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
.warning {
border-style: solid;
border-width: 1px;
border-color: rgb(255, 0, 0, 0.5);
border-radius: 2px;
background-color: rgba(16, 36, 93, 0.659);
color: #ffffff;
padding: 5px;
vertical-align: middle;
font-weight: bold;
margin: 10px auto;
}
.mt10 {
margin-top: 10px;
}
.main_item {
display: flex;
justify-content: space-between;
.list {
width: 48%;
background-size: 100% 100%;
padding: 5px;
color: #ffffff;
.title {
font-weight: bold;
}
.main_con {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.item {
width: 50%;
margin: 2px 0;
font-size: 12px;
.fcr {
color: #f90102;
}
}
}
.fcb {
color: #00aeff;
}
.main_con1 {
.item {
margin: 2px 0;
font-size: 12px;
line-height: 22px;
.fcr {
color: #f90102;
}
}
}
.item_list {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #163682;
font-size: 12px;
line-height: 30px;
.info {
width: 60%;
}
.state {
width: 40%;
text-align: right;
color: #7ccf41;
}
.fcr {
color: #f90102;
}
}
}
}
}
}
.block3 {
margin-top: 20px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
}
.block4 {
margin-top: 20px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
.table {
margin-top: 10px;
.head {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39, 101, 175, 0.5);
text-align: center;
}
.scroll {
height: 100px;
overflow-y: hidden;
.table-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17, 51, 122, 0.5);
text-align: center;
.fc1 {
color: #0c90ff;
}
.fc2 {
color: #62b13f;
}
.fc3 {
color: #ffa105;
}
}
}
}
}
}
}
}

View File

@ -0,0 +1,182 @@
import { useState } from "react";
import SeamlessScroll from "zy-react-library/components/SeamlessScroll";
import img8 from "~/assets/images/public/bigScreen/bg11.png";
import img9 from "~/assets/images/public/bigScreen/bg12.png";
import img2 from "~/assets/images/public/bigScreen/ico6.png";
import img3 from "~/assets/images/public/bigScreen/ico7.png";
import img4 from "~/assets/images/public/bigScreen/ico8.png";
import img7 from "~/assets/images/public/bigScreen/ico9.png";
import img5 from "~/assets/images/public/bigScreen/tablebg1.png";
import img6 from "~/assets/images/public/bigScreen/tablebg2.png";
import Title from "~/pages/Container/Map/components/Content/IndexInfo/Title";
import "./index.less";
function RightScreen() {
const [block1List, setBlock1List] = useState([
{ id: 1, companyName: "方宇物业", pendingApprovalProjects: 2, pendingTrainingSubmissions: 3, pendingTrainees: 4 },
{ id: 2, companyName: "华泰建设工程", pendingApprovalProjects: 5, pendingTrainingSubmissions: 8, pendingTrainees: 12 },
{ id: 3, companyName: "宏达设备维护", pendingApprovalProjects: 3, pendingTrainingSubmissions: 6, pendingTrainees: 9 },
{ id: 4, companyName: "金鼎安全服务", pendingApprovalProjects: 7, pendingTrainingSubmissions: 10, pendingTrainees: 15 },
{ id: 5, companyName: "瑞丰技术服务", pendingApprovalProjects: 4, pendingTrainingSubmissions: 5, pendingTrainees: 7 },
{ id: 6, companyName: "恒通物流运输", pendingApprovalProjects: 6, pendingTrainingSubmissions: 9, pendingTrainees: 11 },
{ id: 7, companyName: "天成环保科技", pendingApprovalProjects: 8, pendingTrainingSubmissions: 12, pendingTrainees: 18 },
{ id: 8, companyName: "绿源消防设施", pendingApprovalProjects: 2, pendingTrainingSubmissions: 4, pendingTrainees: 6 },
{ id: 9, companyName: "安泰检测评估", pendingApprovalProjects: 5, pendingTrainingSubmissions: 7, pendingTrainees: 10 },
{ id: 10, companyName: "创新信息技术", pendingApprovalProjects: 3, pendingTrainingSubmissions: 5, pendingTrainees: 8 },
]);
const [block4List, setBlock4List] = useState([
{ id: 1, companyName: "新益公司", detectionSystem: "火灾检测系统", alarmReason: "燃气泄露", dispositionStatus: "未处置" },
{ id: 2, companyName: "华泰化工", detectionSystem: "温度监控系统", alarmReason: "超温报警", dispositionStatus: "已处置" },
{ id: 3, companyName: "宏达制造", detectionSystem: "压力检测系统", alarmReason: "压力异常", dispositionStatus: "处置中" },
{ id: 4, companyName: "金鼎能源", detectionSystem: "气体检测系统", alarmReason: "有毒气体超标", dispositionStatus: "未处置" },
{ id: 5, companyName: "瑞丰新材料", detectionSystem: "液位监控系统", alarmReason: "液位过高", dispositionStatus: "已处置" },
{ id: 6, companyName: "恒通物流", detectionSystem: "烟雾探测系统", alarmReason: "烟雾浓度超标", dispositionStatus: "处置中" },
{ id: 7, companyName: "天成建筑", detectionSystem: "振动监测系统", alarmReason: "设备振动异常", dispositionStatus: "未处置" },
{ id: 8, companyName: "绿源环保", detectionSystem: "水质检测系统", alarmReason: "PH值异常", dispositionStatus: "已处置" },
{ id: 9, companyName: "安泰消防", detectionSystem: "火警联动系统", alarmReason: "火焰探测报警", dispositionStatus: "处置中" },
{ id: 10, companyName: "创新科技", detectionSystem: "电气监控系统", alarmReason: "电流过载", dispositionStatus: "未处置" },
]);
return (
<div className="right-container">
<div className="block1">
<Title title="相关方申请审批管理" />
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>单位名称</div>
<div>待审批项目数</div>
<div>待提交培训人员数</div>
<div>待培训人数</div>
</div>
<div className="scroll">
<SeamlessScroll list={block1List} step={0.5}>
{block1List.map((item, index) => (
<div className="table-container" style={{ backgroundImage: `url(${img6})` }} key={index}>
<div className="table-item">{item.companyName}</div>
<div className="table-item">{item.pendingApprovalProjects}</div>
<div className="table-item">{item.pendingTrainingSubmissions}</div>
<div className="table-item">{item.pendingTrainees}</div>
</div>
))}
</SeamlessScroll>
</div>
</div>
</div>
</div>
<div className="block2">
<Title title="当前重点作业统计" />
<div className="main">
<div className="item">
<div className="img">
<img src={img2} alt="" />
</div>
<div className="info">
<div className="title">三人以上作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img3} alt="" />
</div>
<div className="info">
<div className="title">危险作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img4} alt="" />
</div>
<div className="info">
<div className="title">夜间作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
<div className="item">
<div className="img">
<img src={img7} alt="" />
</div>
<div className="info">
<div className="title">四新作业</div>
<div>
<p> 当前作业数13</p>
<p>申请数14</p>
</div>
</div>
</div>
</div>
</div>
<div className="block3">
<Title title="当前口门、封闭区情况" />
<div className="main">
<div className="item" style={{ backgroundImage: `url(${img9})` }}>
<div className="title">一级口门进出统计</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img9})` }}>
<div className="title">进入申请待审批</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">封闭区域人员情况</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
<div className="item" style={{ backgroundImage: `url(${img8})` }}>
<div className="title">封闭区域作业情况</div>
<div className="num">
<div>人数2100</div>
<div>车数1125</div>
</div>
</div>
</div>
</div>
<div className="block4">
<Title title="物联网设备报警情况" />
<div className="main">
<div className="table">
<div className="head" style={{ backgroundImage: `url(${img5})` }}>
<div>公司名称</div>
<div>检测系统</div>
<div>报警原因</div>
<div>处置状态</div>
</div>
<div className="scroll">
<SeamlessScroll list={block4List} step={0.5}>
{block4List.map((item, index) => (
<div className="table-container" style={{ backgroundImage: `url(${img6})` }} key={index}>
<div className="table-item">{item.companyName}</div>
<div className="table-item">{item.detectionSystem}</div>
<div className="table-item">{item.alarmReason}</div>
<div className="table-item">{item.dispositionStatus}</div>
</div>
))}
</SeamlessScroll>
</div>
</div>
</div>
</div>
</div>
);
}
export default RightScreen;

View File

@ -0,0 +1,181 @@
.index_info_container {
.right-container {
width: 360px;
position: absolute;
right: 20px;
top: 60px;
max-height: calc(100vh - 75px);
.block1 {
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
display: flex;
align-items: center;
.table {
width: 100%;
margin-top: 10px;
.head {
display: grid;
grid-template-columns: 1fr 1fr 1.5fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39, 101, 175, 0.5);
text-align: center;
}
.scroll {
height: 180px;
overflow-y: hidden;
.table-container {
display: grid;
grid-template-columns: 1fr 1fr 1.5fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17, 51, 122, 0.5);
text-align: center;
.fc1 {
color: #0c90ff;
}
.fc2 {
color: #62b13f;
}
.fc3 {
color: #ffa105;
}
}
}
}
}
}
.block2 {
margin-top: 10px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.item {
width: 50%;
display: flex;
align-items: center;
margin-top: 10px;
.title {
font-weight: bold;
}
.info {
padding-left: 10px;
color: #ffffff;
font-size: 12px;
p {
margin: 0;
}
}
}
}
}
.block3 {
margin-top: 20px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.item {
width: 49%;
text-align: center;
background-size: 100% 100%;
color: #ffffff;
padding: 5px 10px;
font-size: 12px;
margin-top: 10px;
.title {
font-weight: bold;
}
.num {
display: flex;
justify-content: space-between;
margin-top: 5px;
}
}
}
}
.block4 {
margin-top: 20px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.main {
.table {
margin-top: 10px;
.head {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
background: rgba(39, 101, 175, 0.5);
text-align: center;
}
.scroll {
height: 300px;
overflow-y: hidden;
.table-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
color: #ffffff;
padding: 5px;
font-size: 12px;
margin: 5px auto;
background: rgba(17, 51, 122, 0.5);
text-align: center;
.fc1 {
color: #0c90ff;
}
.fc2 {
color: #62b13f;
}
.fc3 {
color: #ffa105;
}
}
}
}
}
}
}
}

View File

@ -0,0 +1,96 @@
.index_info_container {
.search_container {
width: 214px;
min-height: 200px;
position: absolute;
top: 100px;
left: 400px;
background: rgba(0, 41, 82, 0.68);
border-radius: 4px;
border: 1px solid rgba(44, 105, 172, 0.6);
.top {
width: 214px;
height: 37px;
background-size: 100% 100%;
display: flex;
padding: 5px;
position: relative;
.list {
color: #ffffff;
padding: 2px 8px;
cursor: pointer;
&:hover {
border-radius: 2px;
background-color: rgba(36, 115, 239, 0.549);
box-shadow: 0 1px 1px 0 rgba(2, 32, 95, 0.4);
}
}
.active {
border-radius: 2px;
background-color: rgba(36, 115, 239, 0.549);
box-shadow: 0 1px 1px 0 rgba(2, 32, 95, 0.4);
}
.close {
position: absolute;
top: 5px;
right: 10px;
cursor: pointer;
}
}
.search_con {
background: rgba(5, 40, 106, 0.68);
height: 30px;
border: 1px solid rgba(23, 86, 168, 0.68);
margin: 5px;
border-radius: 4px;
color: #4371af;
line-height: 30px;
padding-left: 5px;
font-size: 12px;
.input {
border: none;
background: none;
width: 100%;
height: 30px;
outline: none;
color: #ffffff;
&::-webkit-input-placeholder {
color: #4371af;
}
}
}
.con {
width: 100%;
.item {
width: 100%;
display: flex;
justify-content: space-between;
font-size: 12px;
color: #ffffff;
padding: 5px;
box-sizing: border-box;
border-bottom: 1px dashed #205376;
align-items: center;
.btn {
border-radius: 4px;
background-color: rgba(36, 115, 239, 0.2);
padding: 2px 5px;
border: 1px solid rgba(42, 86, 158, 0.58);
cursor: pointer;
}
}
}
}
}

View File

@ -0,0 +1,12 @@
import img1 from "~/assets/images/public/bigScreen/smalltitle.png";
import "./index.less";
function Title(props) {
return (
<div className="index_info_container_title" style={{ backgroundImage: `url(${img1})` }}>
{props.title}
</div>
);
}
export default Title;

View File

@ -0,0 +1,11 @@
.index_info_container {
&_title {
color: #ffffff;
font-weight: bold;
padding-left: 30px;
width: 100%;
height: 30px;
background-size: 100% 100%;
background-repeat: no-repeat;
}
}

View File

@ -1,69 +1,16 @@
import { useState } from "react";
import CountUp from "react-countup";
import icon1 from "~/assets/images/map_bi/content/icon1.png";
import icon2 from "~/assets/images/map_bi/content/icon2.png";
import icon3 from "~/assets/images/map_bi/content/icon3.png";
import icon4 from "~/assets/images/map_bi/content/icon4.png";
import icon5 from "~/assets/images/map_bi/content/icon5.png";
import icon6 from "~/assets/images/map_bi/content/icon6.png";
import img1 from "~/assets/images/map_bi/content/img1.png";
import img2 from "~/assets/images/map_bi/content/img2.png";
import Title from "~/pages/Container/Map/components/Content/port/Title";
import Bottom from "./Bottom";
import LeftPanel from "./LeftPanel";
import RightPanel from "./RightPanel";
import Search from "./Search";
import "./index.less";
function IndexInfo() {
const [block1OptionsList] = useState([
{ img: icon1, label: "股份公司部门数量", value: 0 },
{ img: icon2, label: "分子公司数", value: 0 },
{ img: icon3, label: "相关方单位数", value: 0 },
]);
const [block2OptionsList] = useState([
{ img: icon4, title: "监管端人员数", value: 0 },
{ img: icon5, title: "分子公司人数", value: 0 },
{ img: icon6, title: "相关方人员数", value: 0 },
]);
return (
<div className="index_info_container">
<div className="block1">
<Title title="企业统计" />
<div className="options">
{block1OptionsList.map((item, index) => (
<div key={index} className="option">
<img src={item.img} className="img_top" alt="" />
<img
className="img_bottom"
src={img1}
alt=""
/>
<div className="label">{item.label}</div>
<div className="value">
<CountUp end={+item.value} />
</div>
</div>
))}
</div>
</div>
<div className="block2">
<Title title="客户数据" />
<div className="options">
{block2OptionsList.map((item, index) => (
<div key={index} className="option">
<div className="img" style={{ backgroundImage: `url(${img2})` }}>
<img src={item.img} alt="" />
</div>
<div className="info">
<div className="label">{item.title}</div>
<div className="value">
<CountUp end={+item.value} />
</div>
</div>
</div>
))}
</div>
</div>
<LeftPanel />
<RightPanel />
<Bottom />
<Search />
</div>
);
}

View File

@ -1,146 +1,3 @@
.index_info_container {
.block1 {
background-image: linear-gradient(to bottom,
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8));
.options {
display: flex;
justify-content: space-between;
padding: 10px;
border: 1px solid;
border-image: linear-gradient(to bottom,
rgba(58, 122, 149, 0),
rgba(58, 122, 149, 1)) 1;
border-top: none;
.option {
flex-basis: 33.33%;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
.img_top {
position: absolute;
width: 70px;
height: 70px;
animation: indexInfoContainerSlideY 2s infinite;
}
.img_bottom {
position: absolute;
width: 75px;
height: 75px;
top: 0;
}
.label {
margin-top: 75px;
color: #fff;
font-size: 14px !important;
}
.value {
background-image: linear-gradient(to bottom, #5bb4f7, #ffffff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: bold;
margin-top: 10px;
font-family: "PingFang SC", "Helvetica Neue", "Hiragino Sans GB",
"Segoe UI", "Microsoft YaHei", "微软雅黑", sans-serif;
font-size: 26px;
}
}
}
}
.block2 {
background-image: linear-gradient(to bottom,
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8));
margin-top: 10px;
.options {
padding: 10px 15px;
border: 1px solid;
border-image: linear-gradient(to bottom,
rgba(58, 122, 149, 0),
rgba(58, 122, 149, 1)) 1;
border-top: none;
display: flex;
flex-wrap: wrap;
.option {
display: flex;
width: 50%;
align-items: center;
margin-top: 10px;
&:nth-child(-n + 2) {
margin-top: 0;
}
.img {
width: 50px;
height: 50px;
background-size: 100% 100%;
background-repeat: no-repeat;
text-align: center;
margin-left: 20px;
img {
width: 30px;
height: 30px;
animation: indexInfoContainerScale 2s infinite;
margin-top: 10px;
}
}
.info {
color: #ffffff;
margin-left: 10px;
.label {
height: 25px;
line-height: 25px;
}
.value {
background: linear-gradient(to top, #48bbf0, #ffffff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: bold;
font-family: "PingFang SC", "Helvetica Neue", "Hiragino Sans GB",
"Segoe UI", "Microsoft YaHei", "微软雅黑", sans-serif;
font-size: 24px;
}
}
}
}
}
@keyframes indexInfoContainerSlideY {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-5px);
}
100% {
transform: translateY(0);
}
}
@keyframes indexInfoContainerScale {
0% {
transform: scale(1);
}
50% {
transform: scale(0.8);
}
100% {
transform: scale(1);
}
}
}

View File

@ -115,13 +115,13 @@ function Content() {
const renderContent = () => {
return (
<>
{!leftDisplayedContent.currentPort && (<IndexInfo />)}
{isLeftVisible && (
<motion.div
animate={leftControls}
className={`map_content_container__content ${(!leftDisplayedContent.currentPort || (leftDisplayedContent.currentPort === "00003" && !leftDisplayedContent.currentBranchOffice)) ? "port" : "branch_office"}`}
style={{ left: 35 }}
>
{!leftDisplayedContent.currentPort && <IndexInfo />}
{(leftDisplayedContent.currentPort === "00003" && !leftDisplayedContent.currentBranchOffice) && renderPortContent()}
{leftDisplayedContent.currentBranchOffice && renderBranchOfficeContentLeft()}
</motion.div>

View File

@ -29,7 +29,7 @@ function RightUtils(props) {
displayedMode: rightUtilsDisplayedMode,
isVisible: rightUtilsIsVisible,
} = useRightUtilsAnimation(
!currentBranchOffice,
currentPort && !currentBranchOffice,
currentBranchOffice && bottomUtilsCurrentIndex !== -1,
);