修改
@@ -3,6 +3,7 @@ import EnterToFloorOne from "./videoComponents/EnterToFloor1";
|
||||
import EnterToFloorTwo from "./videoComponents/EnterToFloor2";
|
||||
import FloorOneToTwo from "./videoComponents/Floor1To2";
|
||||
import FloorTwoToOne from "./videoComponents/Floor2To1";
|
||||
import FloorToFour from "./videoComponents/FloorToFour";
|
||||
import { useRef, useEffect, useReducer } from "react";
|
||||
import { AnimatePresence } from "framer-motion";
|
||||
|
||||
@@ -47,6 +48,17 @@ const opacityReducer = (state, action) => {
|
||||
enterVideo: 0,
|
||||
};
|
||||
}
|
||||
case "to-4": {
|
||||
return {
|
||||
...initOpacity,
|
||||
// FloorToFour: 1,
|
||||
enterToFloorTwo: 0,
|
||||
floorOneToTwo: 0,
|
||||
enterVideo: 0,
|
||||
floorToFour:1,
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -61,7 +73,7 @@ function VideoContainer(props) {
|
||||
if (floor == 1) {
|
||||
if (lastFloor.current == 2 || lastFloor.current == 3) {
|
||||
dispatch({ type: "floor-2-to-1" });
|
||||
} else {
|
||||
} else if (lastFloor.current == 4) {
|
||||
dispatch({ type: "enter-to-1" });
|
||||
}
|
||||
} else if (floor == 2) {
|
||||
@@ -69,17 +81,19 @@ function VideoContainer(props) {
|
||||
dispatch({ type: "floor-1-to-2" });
|
||||
} else if (lastFloor.current == 3) {
|
||||
// 视频不变画面隐藏,通过判断floor的值隐藏3显示2
|
||||
} else {
|
||||
dispatch({ type: "enter-to-2" });
|
||||
} else if (lastFloor.current == 4) {
|
||||
dispatch({ type: "floor-1-to-2" });
|
||||
}
|
||||
} else if (floor == 3) {
|
||||
if (lastFloor.current == 1) {
|
||||
dispatch({ type: "floor-1-to-2" });
|
||||
} else if (lastFloor.current == 2) {
|
||||
// 视频不变画面隐藏,通过判断floor的值隐藏2显示3
|
||||
} else {
|
||||
dispatch({ type: "enter-to-2" });
|
||||
} else if (lastFloor.current == 4) {
|
||||
dispatch({ type: "floor-1-to-2" });
|
||||
}
|
||||
} else if (floor == 4) {
|
||||
dispatch({ type: "to-4" });
|
||||
}
|
||||
lastFloor.current = floor;
|
||||
}
|
||||
@@ -113,6 +127,7 @@ function VideoContainer(props) {
|
||||
preFloor={preFloor}
|
||||
/>
|
||||
<FloorTwoToOne key="2-to-1" opacity={opacity.floorTwoToOne} />
|
||||
<FloorToFour key="to-4" opacity={opacity.floorToFour} />
|
||||
</AnimatePresence>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,30 @@
|
||||
import { useState, useRef } from "react";
|
||||
import { useState, useRef, useEffect } from "react";
|
||||
import cls from "./index.module.css";
|
||||
import Chart2 from "../../../Common/TimeFireDir";
|
||||
import Chart1 from "../../../Common/ForecastTemperature";
|
||||
import VideoContainer from "./VideoContainer";
|
||||
|
||||
function KilnCenter() {
|
||||
const [floor, setFloor] = useState(0);
|
||||
function KilnCenter({ onFloorChange }) {
|
||||
const [floor, setFloor] = useState(1); // 初始值设置为 1
|
||||
const preFloor = useRef();
|
||||
|
||||
useEffect(() => {
|
||||
onFloorChange(floor);
|
||||
}, [floor, onFloorChange]);
|
||||
|
||||
function onFloorUpdate(flr) {
|
||||
preFloor.current = floor;
|
||||
setFloor(flr);
|
||||
onFloorChange(flr);
|
||||
}
|
||||
|
||||
const subMenuStyle = {
|
||||
marginLeft: floor === 4? "400px" : "0",
|
||||
};
|
||||
|
||||
const colorStyle = {
|
||||
right: floor === 4? "0px" : "400px",
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
className="bgKilnInner"
|
||||
@@ -23,12 +37,22 @@ function KilnCenter() {
|
||||
}}
|
||||
>
|
||||
{/* 时间火向数据 */}
|
||||
<div
|
||||
className="fireAndTime"
|
||||
style={{ position: "absolute", top: "-112px", height: "212px" }}
|
||||
>
|
||||
<Chart2 />
|
||||
</div>
|
||||
{floor === 4 && (
|
||||
<div
|
||||
className="fireAndTime"
|
||||
style={{ position: "absolute", top: "-112px", height: "400px" }}
|
||||
>
|
||||
<Chart1 />
|
||||
</div>
|
||||
)}
|
||||
{floor!== 4 && (
|
||||
<div
|
||||
className="fireAndTime"
|
||||
style={{ position: "absolute", top: "-112px", height: "212px" }}
|
||||
>
|
||||
<Chart2 />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* menu */}
|
||||
<div
|
||||
@@ -36,10 +60,11 @@ function KilnCenter() {
|
||||
style={{
|
||||
display: "flex",
|
||||
marginBottom: "24px",
|
||||
justifyContent: "center",
|
||||
...subMenuStyle,
|
||||
justifyContent: "center"
|
||||
}}
|
||||
>
|
||||
<div
|
||||
<div
|
||||
className={
|
||||
"flr flr1 " + cls.menuItem + " " + (floor === 1 ? cls.active : "")
|
||||
}
|
||||
@@ -49,7 +74,7 @@ function KilnCenter() {
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"flr flr2 " + cls.menuItem + " " + (floor === 2 ? cls.active : "")
|
||||
"flr flr2 " + cls.menuItem + " " + (floor === 2? cls.active : "")
|
||||
}
|
||||
onClick={() => onFloorUpdate(2)}
|
||||
>
|
||||
@@ -57,12 +82,20 @@ function KilnCenter() {
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"flr flr2 " + cls.menuItem + " " + (floor === 3 ? cls.active : "")
|
||||
"flr flr2 " + cls.menuItem + " " + (floor === 3? cls.active : "")
|
||||
}
|
||||
onClick={() => onFloorUpdate(3)}
|
||||
>
|
||||
溶液速度
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"flr flr1 " + cls.menuItem + " " + (floor === 4? cls.active : "")
|
||||
}
|
||||
onClick={() => onFloorUpdate(4)}
|
||||
>
|
||||
窑炉预测
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 颜色指示图 */}
|
||||
@@ -70,7 +103,7 @@ function KilnCenter() {
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "30px",
|
||||
right: "450px",
|
||||
...colorStyle,
|
||||
width: "300px",
|
||||
height: "41px",
|
||||
}}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
|
||||
.menuItem:not(:first-child) {
|
||||
margin-left: 50px;
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
.videoLayer2 {
|
||||
@@ -43,4 +43,4 @@
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-27 08:38:07
|
||||
* @LastEditTime: 2024-08-28 15:28:39
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import { motion, AnimatePresence } from "framer-motion";
|
||||
import { useRef, useEffect, useMemo, useState } from "react";
|
||||
import FeederStatus from "../../../../Common/Feeder";
|
||||
import TemperatureBottom from "../../../../Common/TemperatureBottom";
|
||||
import TemperatureTop from "../../../../Common/TemperatureTop/forecastIndex";
|
||||
import { useSelector, useDispatch } from "react-redux";
|
||||
import TopColorBlock from "../../components/forecastTopColorBlock";
|
||||
import myImage from '../../../../../assets/toFourBack.png';
|
||||
function FloorToFour(props) {
|
||||
const fireInfo = useSelector((state) => state.fireInfo);
|
||||
const fireDir = fireInfo?.fireDirection || null;
|
||||
const [fireCanPlay, setFireCanPlay] = useState(false);
|
||||
|
||||
// const vd = useRef(null);
|
||||
const show = props.opacity || 0;
|
||||
|
||||
// useEffect(() => {
|
||||
// if (show) {
|
||||
// vd.current.play();
|
||||
// setTimeout(() => {
|
||||
// // console.log("开启2-1的火播放");
|
||||
// setFireCanPlay(true);
|
||||
// }, 1800);
|
||||
// }
|
||||
// if (!show) setFireCanPlay(false);
|
||||
// return () => {
|
||||
// // console.log("关闭2-1的火播放");
|
||||
// setFireCanPlay(false);
|
||||
// };
|
||||
// }, [show]);
|
||||
|
||||
return (
|
||||
<AnimatePresence>
|
||||
{show && (
|
||||
<motion.div
|
||||
className="video-wrapper"
|
||||
style={{
|
||||
position: "fixed",
|
||||
top: "0px",
|
||||
left: "0px",
|
||||
width: "calc(100% - 50px)",
|
||||
height: "calc(100% - 7px)",
|
||||
zIndex: -998,
|
||||
overflow: "clip",
|
||||
}}
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0, transition: { duration: 0.2, delay: 0.2 } }}
|
||||
>
|
||||
<div>
|
||||
<img src={myImage} style={{ width: '1726px', height: '695px',position: "absolute",
|
||||
top: "300px",
|
||||
left: "950px",
|
||||
|
||||
zIndex: -9, }} alt="Example" />
|
||||
</div>
|
||||
{/* <video ref={vd} muted>
|
||||
<source src="/video/2to1.webm" type="video/mp4" />
|
||||
</video>
|
||||
|
||||
{fireCanPlay && fireDir == "东火" && (
|
||||
// {fireCanPlay && (
|
||||
<video
|
||||
src="/video/fire_top.webm"
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
width={3800}
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "10px",
|
||||
left: "0px",
|
||||
zIndex: 9,
|
||||
}}
|
||||
></video>
|
||||
)}
|
||||
{fireCanPlay && fireDir == "西火" && (
|
||||
// {fireCanPlay && (
|
||||
<video
|
||||
src="/video/fire_down.webm"
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
width={3800}
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "-12px",
|
||||
left: "-10px",
|
||||
zIndex: 9,
|
||||
}}
|
||||
></video>
|
||||
)} */}
|
||||
|
||||
<TopColorBlock />
|
||||
|
||||
<TemperatureTop
|
||||
style={{
|
||||
top: "200px",
|
||||
left: "652px",
|
||||
width: "2380px",
|
||||
zIndex: 10,
|
||||
}}
|
||||
/>
|
||||
<FeederStatus style={{ left: "680px" }} />
|
||||
</motion.div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
);
|
||||
}
|
||||
|
||||
export default FloorToFour;
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-28 15:27:46
|
||||
* @LastEditTime: 2024-08-29 09:46:32
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import { motion, AnimatePresence } from "framer-motion";
|
||||
import { useRef, useEffect, useMemo, useState } from "react";
|
||||
import FeederStatus from "../../../../Common/Feeder";
|
||||
import TemperatureBottom from "../../../../Common/TemperatureBottom";
|
||||
import TemperatureTop from "../../../../Common/TemperatureTop/forecastIndex";
|
||||
import { useSelector, useDispatch } from "react-redux";
|
||||
// import TopColorBlock from "../../components/TopColorBlock";
|
||||
import TopColorBlock from "../../components/forecastTopColorBlock";
|
||||
function FloorTwoToOne(props) {
|
||||
const fireInfo = useSelector((state) => state.fireInfo);
|
||||
const fireDir = fireInfo?.fireDirection || null;
|
||||
const [fireCanPlay, setFireCanPlay] = useState(false);
|
||||
|
||||
const vd = useRef(null);
|
||||
const show = props.opacity || 0;
|
||||
|
||||
useEffect(() => {
|
||||
if (show) {
|
||||
vd.current.play();
|
||||
setTimeout(() => {
|
||||
// console.log("开启2-1的火播放");
|
||||
setFireCanPlay(true);
|
||||
}, 1800);
|
||||
}
|
||||
if (!show) setFireCanPlay(false);
|
||||
return () => {
|
||||
// console.log("关闭2-1的火播放");
|
||||
setFireCanPlay(false);
|
||||
};
|
||||
}, [show]);
|
||||
|
||||
return (
|
||||
<AnimatePresence>
|
||||
{show && (
|
||||
<motion.div
|
||||
className="video-wrapper"
|
||||
style={{
|
||||
position: "fixed",
|
||||
top: "0px",
|
||||
left: "0px",
|
||||
width: "calc(100% - 500px)",
|
||||
height: "calc(100% - 7px)",
|
||||
zIndex: -998,
|
||||
overflow: "clip",
|
||||
}}
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0, transition: { duration: 0.2, delay: 0.2 } }}
|
||||
>
|
||||
<video style={{
|
||||
position: "fixed",
|
||||
top: "10px",
|
||||
left: "70px",
|
||||
width: "calc(100% - 600px)",
|
||||
height: "calc(100% - 7px)",
|
||||
zIndex: -998,
|
||||
overflow: "clip",
|
||||
}} ref={vd} muted>
|
||||
<source src="/video/2to1.webm" type="video/mp4" />
|
||||
</video>
|
||||
|
||||
{fireCanPlay && fireDir == "东火" && (
|
||||
// {fireCanPlay && (
|
||||
<video
|
||||
src="/video/fire_top.webm"
|
||||
muted
|
||||
|
||||
autoPlay
|
||||
loop
|
||||
width={3800}
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "10px",
|
||||
width: "calc(100% - 500px)",
|
||||
height: "calc(100% - 7px)",
|
||||
left: "240px",
|
||||
zIndex: 9,
|
||||
}}
|
||||
></video>
|
||||
)}
|
||||
{fireCanPlay && fireDir == "西火" && (
|
||||
// {fireCanPlay && (
|
||||
<video
|
||||
src="/video/fire_down.webm"
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
width={3800}
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "-12px",
|
||||
left: "-100px",
|
||||
width: "calc(100% - 500px)",
|
||||
height: "calc(100% - 7px)",
|
||||
left: "240px",
|
||||
zIndex: 9,
|
||||
}}
|
||||
></video>
|
||||
)}
|
||||
|
||||
<TopColorBlock />
|
||||
|
||||
<TemperatureTop
|
||||
style={{
|
||||
top: "200px",
|
||||
left: "652px",
|
||||
width: "2380px",
|
||||
zIndex: 10,
|
||||
}}
|
||||
/>
|
||||
<FeederStatus style={{ left: "680px" }} />
|
||||
</motion.div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
);
|
||||
}
|
||||
|
||||
export default FloorTwoToOne;
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-21 16:31:53
|
||||
* @LastEditTime: 2024-08-30 14:45:54
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React from 'react';
|
||||
import KilnPress from '../components/paramsInput';
|
||||
// import LiquidTrend from '../components/LiquidTrend';
|
||||
|
||||
import { motion } from 'framer-motion';
|
||||
|
||||
import cls from './index.module.scss';
|
||||
export default function Index({ onGetValueFromGrandChild }) {
|
||||
return (
|
||||
<motion.div
|
||||
className={cls.leftBar}
|
||||
initial={{ opacity: 0, position: 'absolute' }}
|
||||
animate={{ opacity: 1, position: 'relative' }}
|
||||
exit={{ opacity: 0, position: 'relative' }}
|
||||
transition={{ type: 'tween' }}
|
||||
>
|
||||
<KilnPress onSendValueToParent={onGetValueFromGrandChild} style={{ flex: 1, width: '100%', marginTop: '24px' }} />
|
||||
{/* <LiquidTrend style={{ flex: 1, width: '100%', marginTop: '24px' }} /> */}
|
||||
</motion.div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 14:44:30
|
||||
* @LastEditTime: 2024-08-30 17:14:19
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉压力
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecast";
|
||||
import CommonChart from "../forecastRightChart/yield"
|
||||
import { useSelector } from "react-redux";
|
||||
import moment from "moment";
|
||||
import React, { useContext,useEffect,useState} from 'react'
|
||||
import { HomeContext } from '../../../../../pages/Home';
|
||||
function KilnBottomForecast(props) {
|
||||
const value = useContext(HomeContext);
|
||||
const kilnInfo = useSelector((state) => state.cutting);
|
||||
|
||||
console.log('forecastWeeklyChart', kilnInfo.forecastWeeklyChart);
|
||||
|
||||
let data = [];
|
||||
let xData = [];
|
||||
|
||||
kilnInfo.forecastWeeklyChart.forEach((ele) => {
|
||||
data.push(ele.sum);
|
||||
xData.push(moment(ele.dataTime).format('MM-DD'));
|
||||
});
|
||||
const [dataSource, setDataSource] = useState({
|
||||
color1: '#146CFF',
|
||||
color:'rgba(255, 194, 20, 1)',
|
||||
yName:'℃',
|
||||
// areaColor0:'rgba(18, 255, 245, 0.4)',
|
||||
areaColor1:'rgba(18, 255, 245, 0)',
|
||||
// msg: kilnOptimize.topTempAvgFor1h,
|
||||
xData,
|
||||
data: data? data : [],
|
||||
range:[-10,10],
|
||||
modelFlag: false
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
setDataSource(prevDataSource => ({
|
||||
...prevDataSource,
|
||||
modelFlag: value
|
||||
}));
|
||||
}, [value]);
|
||||
|
||||
return (
|
||||
<BottomBarItem
|
||||
icon="yieldRate"
|
||||
title="综合良品率趋势"
|
||||
style={props.style}
|
||||
>
|
||||
{/* legend */}
|
||||
<div className={cls.legend}>
|
||||
<span className={cls.item}>
|
||||
实际值
|
||||
</span>
|
||||
<span className={cls.block}>
|
||||
预测值
|
||||
</span>
|
||||
</div>
|
||||
<div className={cls.chart}>
|
||||
<CommonChart dataSource={dataSource}/>
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
)
|
||||
}
|
||||
export default KilnBottomForecast;
|
||||
@@ -0,0 +1,73 @@
|
||||
.chart {
|
||||
height: 100%;
|
||||
}
|
||||
.legend {
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
top: 30px;
|
||||
}
|
||||
.item{
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
.item:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.item:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
.block{
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
/* .block {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
margin-right: 4px;
|
||||
} */
|
||||
.block:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
transform: translateY(-50%);
|
||||
background-color: #146CFF
|
||||
}
|
||||
.block:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
background-color: #146CFF;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 14:44:30
|
||||
* @LastEditTime: 2024-08-30 17:03:44
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉压力
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecast";
|
||||
import CommonChart from "../forecastRightChart"
|
||||
import { useSelector } from "react-redux";
|
||||
import React, { useContext,useEffect,useState} from 'react'
|
||||
import { HomeContext } from '../../../../../pages/Home';
|
||||
function KilnMiddleForecast(props) {
|
||||
const value = useContext(HomeContext);
|
||||
const kilnOptimize = useSelector((state) => state.kilnOptimize);
|
||||
|
||||
const [dataSource, setDataSource] = useState({
|
||||
color1: 'rgba(0, 255, 245, 1)',
|
||||
color:'rgba(255, 194, 20, 1)',
|
||||
yName:'℃',
|
||||
// areaColor0:'rgba(18, 255, 245, 0.4)',
|
||||
areaColor1:'rgba(18, 255, 245, 0)',
|
||||
msg: kilnOptimize.topTempAvgFor1h,
|
||||
modelFlag: null,
|
||||
data: kilnOptimize.topTempAvgFor1h? kilnOptimize.topTempAvgFor1h.topTempAvgFor1h : [],
|
||||
range: [-10, 10]
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
setDataSource(prevDataSource => ({
|
||||
...prevDataSource,
|
||||
modelFlag: value
|
||||
}));
|
||||
}, [value]);
|
||||
return (
|
||||
<BottomBarItem
|
||||
icon="kilnBottom"
|
||||
title="池底加权温度趋势"
|
||||
style={props.style}
|
||||
>
|
||||
{/* legend */}
|
||||
<div className={cls.legend}>
|
||||
<span className={cls.item}>
|
||||
实际值
|
||||
</span>
|
||||
<span className={cls.block}>
|
||||
预测值
|
||||
</span>
|
||||
</div>
|
||||
<div className={cls.chart}>
|
||||
<CommonChart dataSource={dataSource}/>
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
)
|
||||
}
|
||||
export default KilnMiddleForecast;
|
||||
@@ -0,0 +1,73 @@
|
||||
.chart {
|
||||
height: 100%;
|
||||
}
|
||||
.legend {
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
top: 30px;
|
||||
}
|
||||
.item{
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
.item:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.item:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
.block{
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
/* .block {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
margin-right: 4px;
|
||||
} */
|
||||
.block:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
transform: translateY(-50%);
|
||||
background-color: rgba(0, 255, 245, 1);
|
||||
}
|
||||
.block:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
background-color: rgba(0, 255, 245, 1);
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-20 14:09:17
|
||||
* @LastEditTime: 2024-08-22 08:51:03
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉压力
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "./../../../../../components/Common/BottomItemBackground";
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-20 14:09:17
|
||||
* @LastEditTime: 2024-08-23 14:45:08
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉压力
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "./../../../../../components/Common/BottomItemBackground";
|
||||
@@ -35,4 +42,4 @@ function KilnTop(props) {
|
||||
</BottomBarItem>
|
||||
)
|
||||
}
|
||||
export default KilnTop;
|
||||
export default KilnTop;
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 14:44:30
|
||||
* @LastEditTime: 2024-08-30 16:56:21
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉压力
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecast";
|
||||
import CommonChart from "../forecastRightChart"
|
||||
import { useSelector } from "react-redux";
|
||||
import React, { useContext,useEffect,useState} from 'react'
|
||||
import { HomeContext } from '../../../../../pages/Home';
|
||||
function LeftTopForecast(props) {
|
||||
const value = useContext(HomeContext);
|
||||
const kilnOptimize = useSelector((state) => state.kilnOptimize);
|
||||
|
||||
const [dataSource, setDataSource] = useState({
|
||||
color1: 'rgba(0, 187, 255, 1)',
|
||||
color:'rgba(255, 194, 20, 1)',
|
||||
yName:'℃',
|
||||
// areaColor0:'rgba(18, 255, 245, 0.4)',
|
||||
areaColor1:'rgba(18, 255, 245, 0)',
|
||||
msg: kilnOptimize.topTempAvgFor1h,
|
||||
modelFlag: null,
|
||||
data: kilnOptimize.topTempAvgFor1h? kilnOptimize.topTempAvgFor1h.topTempAvgFor1h : [],
|
||||
range: [-10, 10]
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
setDataSource(prevDataSource => ({
|
||||
...prevDataSource,
|
||||
modelFlag: value
|
||||
}));
|
||||
}, [value]);
|
||||
return (
|
||||
<BottomBarItem
|
||||
icon="kilnTop"
|
||||
title="碹顶加权温度趋势"
|
||||
style={props.style}
|
||||
>
|
||||
{/* legend */}
|
||||
<div className={cls.legend}>
|
||||
<span className={cls.item}>
|
||||
实际值
|
||||
</span>
|
||||
<span className={cls.block}>
|
||||
预测值
|
||||
</span>
|
||||
</div>
|
||||
<div className={cls.chart}>
|
||||
<CommonChart dataSource={dataSource}/>
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
)
|
||||
}
|
||||
export default LeftTopForecast;
|
||||
@@ -0,0 +1,80 @@
|
||||
.chart {
|
||||
height: 100%;
|
||||
}
|
||||
.legend {
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
top: 30px;
|
||||
}
|
||||
.item{
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
/* .block {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
margin-right: 4px;
|
||||
} */
|
||||
.item:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.item:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
background-color: rgba(255, 194, 20, 1);
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
.block{
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
font-size: 11px;
|
||||
position: relative;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
/* .block {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
margin-right: 4px;
|
||||
} */
|
||||
.block:before {
|
||||
content: "";
|
||||
width: 1vw;
|
||||
height: 0.1064vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.2vw;
|
||||
transform: translateY(-50%);
|
||||
background-color: rgba(0, 187, 255, 1);
|
||||
}
|
||||
.block:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 0.4vw;
|
||||
height: 0.4vw;
|
||||
background-color: rgba(0, 187, 255, 1);
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
left: -1.1vw;
|
||||
transform: translateY(-50%) translateX(50%);
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-22 09:09:25
|
||||
* @LastEditTime: 2024-08-22 14:39:13
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React, { useState } from'react';
|
||||
import cls from "./index.module.css";
|
||||
|
||||
function DayNightToggle() {
|
||||
const [day, setDay] = useState(1);
|
||||
// const preFloor = useRef();
|
||||
function onDayUpdate(day) {
|
||||
// preFloor.current = floor;
|
||||
setDay(day);
|
||||
// onFloorChange(flr);
|
||||
}
|
||||
return (
|
||||
<div
|
||||
className="subMenu"
|
||||
style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className={
|
||||
"day day1 " + cls.menuItem + " " + (day === 1 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onDayUpdate(1)}
|
||||
>
|
||||
白天
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"day day2 " + cls.menuItem + " " + (day === 2 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onDayUpdate(2)}
|
||||
>
|
||||
夜晚
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default DayNightToggle;
|
||||
@@ -0,0 +1,26 @@
|
||||
.menuItem {
|
||||
/* transition: all 0.3s ease-out; */
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
padding:5px 40px;
|
||||
font-size: 32px;
|
||||
line-height: 48px;
|
||||
letter-spacing: 6px;
|
||||
background: url(../../../../../assets/dayNight.png) no-repeat;
|
||||
background-size: 100% 90%;
|
||||
background-position: bottom;
|
||||
color: #00fff788;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
|
||||
'PingFang SC', 'Microsoft YaHei', '微软雅黑', 'Microsoft YaHei UI',
|
||||
'Source Han Sans SC', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', sans-serif;
|
||||
}
|
||||
|
||||
.menuItem.active,
|
||||
.menuItem:hover {
|
||||
background: url(../../../../../assets/dayNightChange.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.menuItem:not(:first-child) {
|
||||
margin-left:20px;
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-28 09:25:58
|
||||
* @LastEditTime: 2024-08-28 10:22:34
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// import * as echarts from "echarts";
|
||||
|
||||
export default function getOptions(data, times, range, yName,forecastList,color,color1,areaStyle,areaStyle1) {
|
||||
return {
|
||||
grid: { top: 38, right: 44, bottom: 20, left: 48 },
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data:times,
|
||||
axisLabel: {
|
||||
color: "#fff",
|
||||
fontSize: 12,
|
||||
},
|
||||
axisTick: { show: false },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
color: "#213259",
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
name: "单位: "+yName,
|
||||
nameTextStyle: {
|
||||
color: "#fff",
|
||||
fontSize: 10,
|
||||
align: "right",
|
||||
},
|
||||
type: "value",
|
||||
axisLabel: {
|
||||
color: "#fff",
|
||||
fontSize: 12,
|
||||
formatter: "{value}",
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "#213259",
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: "#213259a0",
|
||||
},
|
||||
},
|
||||
min:range[0],
|
||||
max:range[1]
|
||||
},
|
||||
// visualMap: {
|
||||
// show: false,
|
||||
// dimension: 1,
|
||||
// pieces: pieces
|
||||
// },
|
||||
series: [
|
||||
{
|
||||
type: 'line',
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
color:'inherit'
|
||||
},
|
||||
symbol: 'circle',
|
||||
symbolSize: 6,
|
||||
// prettier-ignore
|
||||
lineStyle:{
|
||||
color:color
|
||||
},
|
||||
data: data,
|
||||
// markLine: {
|
||||
// symbol: 'none',
|
||||
// label:{
|
||||
// show:true,
|
||||
// position:'end',
|
||||
// formatter:'标准线',
|
||||
// color:'#FFCB59',
|
||||
// fontSize: 12,
|
||||
// },
|
||||
// lineStyle:{
|
||||
// color:'#FFCB59'
|
||||
// },
|
||||
// data: seriesData.markLineData
|
||||
// },
|
||||
areaStyle:areaStyle
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
color:'inherit'
|
||||
},
|
||||
symbol: 'circle',
|
||||
symbolSize: 6,
|
||||
lineStyle:{
|
||||
color:color1
|
||||
},
|
||||
areaStyle:areaStyle1,
|
||||
// prettier-ignore
|
||||
data: forecastList,
|
||||
// markLine: {
|
||||
// symbol: 'none',
|
||||
// label:{
|
||||
// show:true,
|
||||
// position:'end',
|
||||
// formatter:'标准线',
|
||||
// color:'#FFCB59',
|
||||
// fontSize: 12,
|
||||
// },
|
||||
|
||||
// data: seriesData.markLineData
|
||||
// },
|
||||
// areaStyle: seriesData.areaStyle
|
||||
}
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
type: 'cross'
|
||||
},
|
||||
className: "xc-chart-tooltip",
|
||||
// backgroundColor: ''
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-28 09:25:58
|
||||
* @LastEditTime: 2024-08-30 16:57:38
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import cls from "./index.module.css";
|
||||
import ReactECharts from "echarts-for-react";
|
||||
import getOptions from "./chart.config";
|
||||
import * as echarts from "echarts";
|
||||
import { useState } from "react";
|
||||
|
||||
function CommonChart(props) {
|
||||
const { dataSource } = props;
|
||||
|
||||
const data = dataSource.data || [];
|
||||
const modelFlag = dataSource.modelFlag || false;
|
||||
const color1 = dataSource.color1 || [];
|
||||
const color = dataSource.color || [];
|
||||
const yName = dataSource.yName;
|
||||
const currentTime = new Date();
|
||||
const times = [];
|
||||
// }
|
||||
let forecastList = []
|
||||
if (modelFlag === true) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let item = data[i];
|
||||
let min = item - 5;
|
||||
let max = item + 5;
|
||||
let randomValue = Math.random() * (max - min) + min;
|
||||
forecastList.push(randomValue.toFixed(1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(let i = 0; i < 7; i++) {
|
||||
currentTime.setMinutes(currentTime.getMinutes() - 10);
|
||||
const timeString = `${currentTime.getHours()}:${currentTime.getMinutes().toString().padStart(2, '0')}`;
|
||||
times.unshift(timeString);
|
||||
}
|
||||
let areaStyle= {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: color,
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: dataSource.areaColor1,
|
||||
},
|
||||
]),
|
||||
origin: "start",
|
||||
}
|
||||
let areaStyle1 = {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color:color1,
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: dataSource.areaColor1,
|
||||
},
|
||||
]),
|
||||
origin: "start",
|
||||
}
|
||||
// let pieces = [
|
||||
// {
|
||||
// lte: dataSource.msg ? dataSource.msg.lte : 0,
|
||||
// color: "#FFCB59",
|
||||
// },
|
||||
// {
|
||||
// gt: dataSource.msg ? dataSource.msg.lte : 0,
|
||||
// lte: dataSource.msg ? dataSource.msg.gt : 0,
|
||||
// color: dataSource.color,
|
||||
// },
|
||||
// {
|
||||
// gt: dataSource.msg ? dataSource.msg.gt : 0,
|
||||
// color: "#FFCB59",
|
||||
// },
|
||||
// ];
|
||||
|
||||
const [yRange] = useState([]);
|
||||
// useEffect(() => {
|
||||
// if (data.length > 0) {
|
||||
// var standardValue = dataSource.msg.sp;
|
||||
// var maxY = (standardValue * 100 + dataSource.range[1] * 100) / 100;
|
||||
// var minY = (standardValue * 100 + dataSource.range[0] * 100) / 100;
|
||||
// // 计算最大最小值是否超标
|
||||
// const maxValue = Math.max(...data);
|
||||
// const minValue = Math.min(...data);
|
||||
// if (maxValue > maxY) {
|
||||
// maxY = Math.ceil(maxValue);
|
||||
// }
|
||||
// if (minValue < minY) {
|
||||
// minY = Math.floor(minValue);
|
||||
// }
|
||||
// setYRange([minY, maxY]);
|
||||
// }
|
||||
// }, [dataSource, data]);
|
||||
|
||||
return (
|
||||
<div className={cls.commonChart}>
|
||||
{data.length > 0 && (
|
||||
<ReactECharts
|
||||
option={getOptions(data, times, yRange, yName,forecastList,color,color1,areaStyle,areaStyle1)}
|
||||
style={{ height: "100%" }}
|
||||
/>
|
||||
)}
|
||||
{data.length <= 0 && (
|
||||
<p
|
||||
style={{
|
||||
paddingTop: "88px",
|
||||
color: "#fffc",
|
||||
textAlign: "center",
|
||||
fontSize: "24px",
|
||||
userSelect: "none",
|
||||
}}
|
||||
>
|
||||
暂无数据
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default CommonChart;
|
||||
@@ -0,0 +1,3 @@
|
||||
.commonChart {
|
||||
height: 100%;
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
|
||||
import cls from "./index.module.css";
|
||||
import ReactECharts from "echarts-for-react";
|
||||
import getOptions from "./chart.config";
|
||||
import * as echarts from "echarts";
|
||||
import { useState } from "react";
|
||||
|
||||
function CommonChart(props) {
|
||||
const { dataSource } = props;
|
||||
const data = dataSource.data || [];
|
||||
const modelFlag = dataSource.modelFlag || false
|
||||
const color1 = dataSource.color1 || [];
|
||||
const color = dataSource.color || [];
|
||||
const yName = dataSource.yName;
|
||||
const xData = dataSource.xData || [];
|
||||
console.log('xData',xData);
|
||||
let forecastList = [];
|
||||
if (modelFlag === true) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let item = data[i];
|
||||
let min = item - 5;
|
||||
let max = item + 5;
|
||||
let randomValue = Math.random() * (max - min) + min;
|
||||
forecastList.push(randomValue.toFixed(1));
|
||||
}
|
||||
}
|
||||
let areaStyle= {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: color,
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: dataSource.areaColor1,
|
||||
},
|
||||
]),
|
||||
origin: "start",
|
||||
}
|
||||
let areaStyle1 = {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color:color1,
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: dataSource.areaColor1,
|
||||
},
|
||||
]),
|
||||
origin: "start",
|
||||
}
|
||||
// let pieces = [
|
||||
// {
|
||||
// lte: dataSource.msg ? dataSource.msg.lte : 0,
|
||||
// color: "#FFCB59",
|
||||
// },
|
||||
// {
|
||||
// gt: dataSource.msg ? dataSource.msg.lte : 0,
|
||||
// lte: dataSource.msg ? dataSource.msg.gt : 0,
|
||||
// color: dataSource.color,
|
||||
// },
|
||||
// {
|
||||
// gt: dataSource.msg ? dataSource.msg.gt : 0,
|
||||
// color: "#FFCB59",
|
||||
// },
|
||||
// ];
|
||||
|
||||
const [yRange] = useState([]);
|
||||
// useEffect(() => {
|
||||
// if (data.length > 0) {
|
||||
// var standardValue = dataSource.msg.sp;
|
||||
// var maxY = (standardValue * 100 + dataSource.range[1] * 100) / 100;
|
||||
// var minY = (standardValue * 100 + dataSource.range[0] * 100) / 100;
|
||||
// // 计算最大最小值是否超标
|
||||
// const maxValue = Math.max(...data);
|
||||
// const minValue = Math.min(...data);
|
||||
// if (maxValue > maxY) {
|
||||
// maxY = Math.ceil(maxValue);
|
||||
// }
|
||||
// if (minValue < minY) {
|
||||
// minY = Math.floor(minValue);
|
||||
// }
|
||||
// setYRange([minY, maxY]);
|
||||
// }
|
||||
// }, [dataSource, data]);
|
||||
|
||||
return (
|
||||
<div className={cls.commonChart}>
|
||||
{data.length > 0 && (
|
||||
<ReactECharts
|
||||
option={getOptions(data, xData, yRange, yName,forecastList,color,color1,areaStyle,areaStyle1)}
|
||||
style={{ height: "100%" }}
|
||||
/>
|
||||
)}
|
||||
{data.length <= 0 && (
|
||||
<p
|
||||
style={{
|
||||
paddingTop: "88px",
|
||||
color: "#fffc",
|
||||
textAlign: "center",
|
||||
fontSize: "24px",
|
||||
userSelect: "none",
|
||||
}}
|
||||
>
|
||||
暂无数据
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default CommonChart;
|
||||
@@ -0,0 +1,366 @@
|
||||
import { useSelector } from "react-redux";
|
||||
import React from "react";
|
||||
import { motion, AnimatePresence } from "framer-motion";
|
||||
import { ReactComponent as B1 } from "./pic/b1.svg";
|
||||
import { ReactComponent as B2 } from "./pic/b2.svg";
|
||||
import { ReactComponent as B3 } from "./pic/b3.svg";
|
||||
import { ReactComponent as B4 } from "./pic/b4.svg";
|
||||
import { ReactComponent as B5 } from "./pic/b5.svg";
|
||||
import { ReactComponent as B6 } from "./pic/b6.svg";
|
||||
import { ReactComponent as B7 } from "./pic/b7.svg";
|
||||
import { ReactComponent as B8 } from "./pic/b8.svg";
|
||||
import { ReactComponent as T1 } from "./pic/t1.svg";
|
||||
import { ReactComponent as T2 } from "./pic/t2.svg";
|
||||
import { ReactComponent as T3 } from "./pic/t3.svg";
|
||||
import { ReactComponent as T4 } from "./pic/t4.svg";
|
||||
import { ReactComponent as T5 } from "./pic/t5.svg";
|
||||
import { ReactComponent as T6 } from "./pic/t6.svg";
|
||||
import { ReactComponent as T7 } from "./pic/t7.svg";
|
||||
import { ReactComponent as T8 } from "./pic/t8.svg";
|
||||
|
||||
const TopColorBlock = ({ condition }) => {
|
||||
const tempTop = useSelector((state) => state.temperature.top);
|
||||
function returnColor(n) {
|
||||
let num = Number(tempTop[n].slice(0, tempTop[n].length - 1));
|
||||
if (num <= 100) {
|
||||
return "rgba(96, 0, 189, 0.7)";
|
||||
} else if (num > 100 && num <= 200) {
|
||||
return "rgba(102, 7, 255, 0.7)";
|
||||
} else if (num > 200 && num <= 300) {
|
||||
return "rgba(10, 20, 255, 0.7)";
|
||||
} else if (num > 300 && num <= 400) {
|
||||
return "rgba(7, 89, 255, 0.7)";
|
||||
} else if (num > 400 && num <= 500) {
|
||||
return "rgba(7, 139, 255, 0.7)";
|
||||
} else if (num > 500 && num <= 600) {
|
||||
return "rgba(7, 194, 255, 0.7)";
|
||||
} else if (num > 600 && num <= 700) {
|
||||
return "rgba(7, 255, 253, 0.7)";
|
||||
} else if (num > 700 && num <= 800) {
|
||||
return "rgba(7, 255, 205, 0.7)";
|
||||
} else if (num > 800 && num <= 900) {
|
||||
return "rgba(20, 237, 127, 0.7)";
|
||||
} else if (num > 900 && num <= 1000) {
|
||||
return "rgba(0, 193, 39, 0.7)";
|
||||
} else if (num > 1000 && num <= 1100) {
|
||||
return "rgba(147, 210, 1, 0.7)";
|
||||
} else if (num > 1100 && num <= 1200) {
|
||||
return "rgba(206, 206, 0, 0.7)";
|
||||
} else if (num > 1200 && num <= 1300) {
|
||||
return "rgba(255, 226, 13, 0.7)";
|
||||
} else if (num > 1300 && num <= 1400) {
|
||||
return "rgba(249, 240, 146, 0.7)";
|
||||
} else if (num > 1400 && num <= 1500) {
|
||||
return "rgba(250, 204, 93, 0.7)";
|
||||
} else if (num > 1500 && num <= 1600) {
|
||||
return "rgba(240, 139, 32, 0.7)";
|
||||
} else if (num > 1600 && num <= 1700) {
|
||||
return "rgba(241, 88, 26, 0.7)";
|
||||
} else if (num > 1700 && num <= 1800) {
|
||||
return "rgba(255, 0, 0, 0.7)";
|
||||
} else if (num > 1800 && num <= 1900) {
|
||||
return "rgba(182, 0, 0, 0.7)";
|
||||
} else if (num > 1900) {
|
||||
return "rgba(140, 0, 33, 0.7)";
|
||||
}
|
||||
}
|
||||
function returnColor2(n) {
|
||||
let num = Number(tempTop[n].slice(0, tempTop[n].length - 1));
|
||||
if (num <= 100) {
|
||||
return "rgba(96, 0, 189, 0.9)";
|
||||
} else if (num > 100 && num <= 200) {
|
||||
return "rgba(102, 7, 255, 0.9)";
|
||||
} else if (num > 200 && num <= 300) {
|
||||
return "rgba(10, 20, 255, 0.9)";
|
||||
} else if (num > 300 && num <= 400) {
|
||||
return "rgba(7, 89, 255, 0.9)";
|
||||
} else if (num > 400 && num <= 500) {
|
||||
return "rgba(7, 139, 255, 0.9)";
|
||||
} else if (num > 500 && num <= 600) {
|
||||
return "rgba(7, 194, 255, 0.9)";
|
||||
} else if (num > 600 && num <= 700) {
|
||||
return "rgba(7, 255, 253, 0.9)";
|
||||
} else if (num > 700 && num <= 800) {
|
||||
return "rgba(7, 255, 205, 0.9)";
|
||||
} else if (num > 800 && num <= 900) {
|
||||
return "rgba(20, 237, 127, 0.9)";
|
||||
} else if (num > 900 && num <= 1000) {
|
||||
return "rgba(0, 193, 39, 0.9)";
|
||||
} else if (num > 1000 && num <= 1100) {
|
||||
return "rgba(147, 210, 1, 0.9)";
|
||||
} else if (num > 1100 && num <= 1200) {
|
||||
return "rgba(206, 206, 0, 0.9)";
|
||||
} else if (num > 1200 && num <= 1300) {
|
||||
return "rgba(255, 226, 13, 0.9)";
|
||||
} else if (num > 1300 && num <= 1400) {
|
||||
return "rgba(249, 240, 146, 0.9)";
|
||||
} else if (num > 1400 && num <= 1500) {
|
||||
return "rgba(250, 204, 93, 0.9)";
|
||||
} else if (num > 1500 && num <= 1600) {
|
||||
return "rgba(240, 139, 32, 0.9)";
|
||||
} else if (num > 1600 && num <= 1700) {
|
||||
return "rgba(241, 88, 26, 0.9)";
|
||||
} else if (num > 1700 && num <= 1800) {
|
||||
return "rgba(255, 0, 0, 0.9)";
|
||||
} else if (num > 1800 && num <= 1900) {
|
||||
return "rgba(182, 0, 0, 0.9)";
|
||||
} else if (num > 1900) {
|
||||
return "rgba(140, 0, 33, 0.9))";
|
||||
}
|
||||
}
|
||||
// 窑炉内部svg变色
|
||||
function BigSvg() {
|
||||
return (
|
||||
<svg
|
||||
width="2050px"
|
||||
height="700px"
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: "320px",
|
||||
left: "970px",
|
||||
zIndex: 0,
|
||||
}}
|
||||
>
|
||||
<defs>
|
||||
<linearGradient id="Gradient1" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0%" stopColor={returnColor2("TE201")} />
|
||||
<stop offset="9%" stopColor={returnColor2("TE202")} />
|
||||
<stop offset="18%" stopColor={returnColor2("TE203")} />
|
||||
<stop offset="27%" stopColor={returnColor2("TE204")} />
|
||||
<stop offset="36%" stopColor={returnColor2("TE205")} />
|
||||
<stop offset="45%" stopColor={returnColor2("TE206")} />
|
||||
<stop offset="54%" stopColor={returnColor2("TE208")} />
|
||||
<stop offset="63%" stopColor={returnColor2("TE210")} />
|
||||
<stop offset="72%" stopColor={returnColor2("TE211")} />
|
||||
<stop offset="81%" stopColor={returnColor2("TE212")} />
|
||||
<stop offset="90%" stopColor={returnColor2("TE213")} />
|
||||
<stop offset="100%" stopColor={returnColor2("TE213")} />
|
||||
</linearGradient>
|
||||
<linearGradient id="Gradient2" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0%" stopColor={returnColor2("TE216")} />
|
||||
<stop offset="33%" stopColor={returnColor2("TE221")} />
|
||||
<stop offset="66%" stopColor={returnColor2("TE225")} />
|
||||
<stop offset="100%" stopColor={returnColor2("TE225")} />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<polygon
|
||||
points="27 238,1310 238,1320 310,1330 310,1330 351,1320 361,1320 395,1076 395,1076 400,1020 400,1020 400,958 400,958 400,900 400,900 400,832 400,775 400,775 400,170 400,170 380,12 380"
|
||||
fill="url(#Gradient1)"
|
||||
/>
|
||||
<polygon
|
||||
points="1345 300,1410 296,1420 290,1390 76,1434 76,1434 83,1434 90,1530 88,1528 88,1530 120,1438 120,1446 178,1616 178,1620 210,1450 210,1462 300,1720 300,1726 333,1470 336,1480 415,1652 414,1658 444,1480 448,1490 523,1590 520, 1593 553,1448 553,1425 335,1424 342,1345 344"
|
||||
fill="url(#Gradient2)"
|
||||
/>
|
||||
{/* <polygon
|
||||
points="1350 300,1355 460,1670 290,1640 50,1688 50,1688 58,1800 58,1804 93,1692 93,1700 168,1900 168,1906 201,1706 200,1718 312,2024 311,2029 343,1724 344,1736 445,1940 444,1946 478,1740 478,1753 573,1874 573, 1878 608,1710 608,1678 349,1668 360,1590 360"
|
||||
fill="url(#Gradient2)"
|
||||
/> */}
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
animate={{
|
||||
opacity: [0, 0, 0, 0.6, 1],
|
||||
transition: { duration: 0.3, delay: 1.5 },
|
||||
}}
|
||||
>
|
||||
<BigSvg />
|
||||
<B1
|
||||
style={{
|
||||
fill: returnColor("TE228"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "56px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B2
|
||||
style={{
|
||||
fill: returnColor("TE230"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "48px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B3
|
||||
style={{
|
||||
fill: returnColor("TE232"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "29px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B4
|
||||
style={{
|
||||
fill: returnColor("TE234"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "21px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B5
|
||||
style={{
|
||||
fill: returnColor("TE236"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "16px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B6
|
||||
style={{
|
||||
fill: returnColor("TE238"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "10px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B7
|
||||
style={{
|
||||
fill: returnColor("TE240"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "3px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<B8
|
||||
style={{
|
||||
fill: returnColor("TE242"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "100px",
|
||||
left: "-8px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T1
|
||||
style={{
|
||||
fill: returnColor("TE227"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "48px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T2
|
||||
style={{
|
||||
fill: returnColor("TE229"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "44px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T3
|
||||
style={{
|
||||
fill: returnColor("TE231"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "36px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T4
|
||||
style={{
|
||||
fill: returnColor("TE233"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "20px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T5
|
||||
style={{
|
||||
fill: returnColor("TE235"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "16px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T6
|
||||
style={{
|
||||
fill: returnColor("TE237"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "10px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T7
|
||||
style={{
|
||||
fill: returnColor("TE239"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "4px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.66,0.64)",
|
||||
}}
|
||||
/>
|
||||
<T8
|
||||
style={{
|
||||
fill: returnColor("TE241"),
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: "110px",
|
||||
left: "-10px",
|
||||
zIndex: 0,
|
||||
transform: "scale(0.68,0.64)",
|
||||
}}
|
||||
/>
|
||||
</motion.div>
|
||||
);
|
||||
};
|
||||
|
||||
export default TopColorBlock;
|
||||
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM421.92,703.81c-2.21-.15-4-.39-5.76-.37-26.5.16-53,.46-79.48.44-4.48,0-5.5,1.52-5.71,5.7-.59,11.58-.8,11.57-12.2,11.61-1,0-2,.09-3,0-2.63-.22-3.4,1.09-3.54,3.56-.57,10-1.28,19.93-2,29.9-1.54,22.09-3.13,44.17-4.65,66.26-.56,8.08-1,16.16-1.46,24.91h6.08l60-.14c13.16,0,26.33-.19,39.49,0,3.89,0,5.23-1.25,5.21-5.17,0-5.82.55-11.64.86-17.46q1.85-34.66,3.69-69.34C420.3,737.36,421.07,721.06,421.92,703.81Z" transform="translate(277 -158)"/><path d="M421.92,703.81c-.85,17.25-1.62,33.55-2.46,49.84q-1.8,34.67-3.69,69.34c-.31,5.82-.9,11.64-.86,17.46,0,3.92-1.32,5.21-5.21,5.17-13.16-.14-26.33,0-39.49,0l-60,.14h-6.08c.5-8.75.9-16.83,1.46-24.91,1.52-22.09,3.11-44.17,4.65-66.26.7-10,1.41-19.93,2-29.9.14-2.47.91-3.78,3.54-3.56,1,.09,2,0,3,0,11.4,0,11.61,0,12.2-11.61.21-4.18,1.23-5.71,5.71-5.7,26.49,0,53-.28,79.48-.44C417.93,703.42,419.71,703.66,421.92,703.81Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM544.59,703.38q-53.33,0-106.49,0c-2.87,0-3.72,1.28-3.8,3.94-.17,5.65-.58,11.3-.87,17-2,38.74-3.87,77.48-5.95,116.21-.21,3.84,1.08,5,4.69,5q51.72-.4,103.43-.61c2.88,0,4.18-.76,4.23-3.91.1-7.15.55-14.3.85-21.46,1.31-30.6,2.68-61.21,3.86-91.82C544.85,719.69,544.59,711.75,544.59,703.38Z" transform="translate(277 -158)"/><path d="M544.59,703.38c0,8.37.26,16.31-.05,24.24-1.18,30.61-2.55,61.22-3.86,91.82-.3,7.16-.75,14.31-.85,21.46-.05,3.15-1.35,3.89-4.23,3.91q-51.71.2-103.43.61c-3.61,0-4.9-1.14-4.69-5,2.08-38.73,4-77.47,5.95-116.21.29-5.65.7-11.3.87-17,.08-2.66.93-3.94,3.8-3.94Q491.3,703.43,544.59,703.38Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 872 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM558.89,703.13a13,13,0,0,0-.55,1.88q-2.9,68.16-5.8,136.31c-.11,2.69,1,3.48,3.53,3.43,6.33-.12,12.66,0,19-.08,29.5-.18,59-.44,88.49-.51,3.93,0,5.81-1,5.65-5.28-.18-4.65.31-9.32.41-14q1-48.24,2-96.46c.15-8.43,0-16.87,0-25.31Z" transform="translate(277 -158)"/><path d="M558.89,703.13H671.6c0,8.44.13,16.88,0,25.31q-.9,48.22-2,96.46c-.1,4.66-.59,9.33-.41,14,.16,4.3-1.72,5.27-5.65,5.28-29.49.07-59,.33-88.49.51-6.33,0-12.66,0-19,.08-2.53,0-3.64-.74-3.53-3.43q2.94-68.15,5.8-136.31A13,13,0,0,1,558.89,703.13Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 770 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM799.81,702.69a17.56,17.56,0,0,0-2.32-.43c-36,0-72,.14-107.93.1-3.94,0-4.13,2-4.18,5q-1,65.19-2.27,130.37c-.09,4.72,1,6.33,6,6.28q52-.46,103.93-.34c4.29,0,5.72-1,5.75-5.53.21-43.3.66-86.6,1-129.9C799.83,706.5,799.81,704.71,799.81,702.69Z" transform="translate(277 -158)"/><path d="M799.81,702.69c0,2,0,3.81,0,5.6-.37,43.3-.82,86.6-1,129.9,0,4.5-1.46,5.53-5.75,5.53q-52-.09-103.93.34c-5,.05-6.08-1.56-6-6.28q1.35-65.17,2.27-130.37c0-3,.24-5.06,4.18-5,36,0,72-.06,107.93-.1A17.56,17.56,0,0,1,799.81,702.69Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 770 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM812.91,702.15a15.47,15.47,0,0,0-.55,2.23q-.57,67.73-1.18,135.46c0,3.33,1.61,3.79,4.34,3.77q52-.43,104-.7c3.43,0,4.28-1.39,4.16-4.48q-.42-11-.52-22-.5-54.74-.9-109.46c0-3.3-.12-5.49-4.73-5.44-32.82.38-65.65.44-98.47.6Z" transform="translate(277 -158)"/><path d="M812.91,702.15H819c32.82-.16,65.65-.22,98.47-.6,4.61,0,4.71,2.14,4.73,5.44q.4,54.74.9,109.46.11,11,.52,22c.12,3.09-.73,4.47-4.16,4.48q-52,.23-104,.7c-2.73,0-4.37-.44-4.34-3.77q.68-67.73,1.18-135.46A15.47,15.47,0,0,1,812.91,702.15Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 758 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM1049,701.25h-5.47c-33.82.06-67.64.21-101.47.07-5,0-6.07,1.61-6,6.32q.85,65,1.21,129.94c0,4.25,1.39,5.3,5.44,5.27,34.83-.23,69.65-.25,104.47-.37,1.77,0,3.54-.24,5.76-.4C1051.66,795,1050.36,748.47,1049,701.25Z" transform="translate(277 -158)"/><path d="M1049,701.25c1.32,47.22,2.62,93.77,3.93,140.83-2.22.16-4,.4-5.76.4-34.82.12-69.64.14-104.47.37-4,0-5.41-1-5.44-5.27q-.37-65-1.21-129.94c-.06-4.71,1.06-6.34,6-6.32,33.83.14,67.65,0,101.47-.07Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 709 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197ZM1064.31,778.29c.47,14.73,1.29,36.54,1.76,58.35.1,4.49,1.63,5.57,5.87,5.53q49.23-.4,98.47-.33c4.88,0,5.77-1.64,5.58-6.05q-2.76-65.14-5.13-130.32c-.15-4.41-2.31-4.67-5.7-4.65-32.49.18-65,.35-97.48.27-4.51,0-5.63,1.33-5.47,5.68C1063,728.24,1063.51,749.73,1064.31,778.29Z" transform="translate(277 -158)"/><path d="M1064.31,778.29c-.8-28.56-1.31-50-2.1-71.52-.16-4.35,1-5.69,5.47-5.68,32.49.08,65-.09,97.48-.27,3.39,0,5.55.24,5.7,4.65q2.36,65.17,5.13,130.32c.19,4.41-.7,6.06-5.58,6.05q-49.23-.15-98.47.33c-4.24,0-5.77-1-5.87-5.53C1065.6,814.83,1064.78,793,1064.31,778.29Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 834 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M2197,922H-277V158H2197Zm-957.31-80.35v-.58c14.66,0,29.33,0,44,0,6.49,0,6.37-.09,6-6.4q-2.54-44.4-4.93-88.81-1.08-20-2.1-39.92c-.17-3.37-.58-5.82-5.3-5.76q-43.48.55-87,.44c-4.84,0-6.29,1.43-6.06,6.27,1.25,25.62,2.18,51.26,3.28,76.88.75,17.48,1.77,34.94,2.3,52.42.14,4.78,2,5.64,6.29,5.57C1210.69,841.5,1225.19,841.65,1239.69,841.65Z" transform="translate(277 -158)"/><path d="M1239.69,841.65c-14.5,0-29-.15-43.49.1-4.3.07-6.15-.79-6.29-5.57-.53-17.48-1.55-34.94-2.3-52.42-1.1-25.62-2-51.26-3.28-76.88-.23-4.84,1.22-6.28,6.06-6.27q43.48.09,87-.44c4.72-.06,5.13,2.39,5.3,5.76q1,20,2.1,39.92,2.43,44.42,4.93,88.81c.35,6.31.47,6.38-6,6.4-14.66,0-29.33,0-44,0Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 897 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM447.62,225.07h-5.18c-29.8,0-59.61.19-89.41-.13-5.6-.06-7.34,1.6-7,6.89.18,3.46-.48,7-.72,10.45q-2.34,33.61-4.66,67.22c-.84,12.29-1.53,24.58-2.46,36.86-.26,3.46.79,5,4.38,4.66,2.48-.21,5,.1,7.48-.08,3.39-.24,4.84.88,4.5,4.53s-.07,7.58-.07,11.49a8.13,8.13,0,0,0,2,.57c26.8,0,53.61,0,80.42,0,3.26,0,3.72-1.73,3.87-4.41,2.26-40.38,4.63-80.75,6.87-121.13C447.88,236.59,447.62,231.14,447.62,225.07Z" transform="translate(277 -158)"/><path d="M447.62,225.07c0,6.07.26,11.52,0,16.94-2.24,40.38-4.61,80.75-6.87,121.13-.15,2.68-.61,4.42-3.87,4.41-26.81-.05-53.62,0-80.42,0a8.13,8.13,0,0,1-2-.57c0-3.91-.27-7.73.07-11.49s-1.11-4.77-4.5-4.53c-2.48.18-5-.13-7.48.08-3.59.3-4.64-1.2-4.38-4.66.93-12.28,1.62-24.57,2.46-36.86q2.29-33.62,4.66-67.22c.24-3.49.9-7,.72-10.45-.29-5.29,1.45-7,7-6.89,29.8.32,59.61.14,89.41.13Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM562.48,225.44H460.77a10,10,0,0,0-.48,1.8q-2.06,35.67-4.06,71.34c-1.2,21.13-2.28,42.26-3.69,63.36-.29,4.21.77,5.67,5,5.64q48.24-.34,96.49-.39c3.27,0,4.74-.86,4.79-4.5.13-10.83.58-21.65,1-32.47.86-22.14,1.94-44.28,2.59-66.43C562.79,251.18,562.48,238.55,562.48,225.44Z" transform="translate(277 -158)"/><path d="M562.48,225.44c0,13.11.31,25.74-.06,38.35-.65,22.15-1.73,44.29-2.59,66.43-.42,10.82-.87,21.64-1,32.47-.05,3.64-1.52,4.49-4.79,4.5q-48.24.07-96.49.39c-4.24,0-5.3-1.43-5-5.64,1.41-21.1,2.49-42.23,3.69-63.36q2-35.67,4.06-71.34a10,10,0,0,1,.48-1.8Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 819 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM683.28,225.41a26.54,26.54,0,0,0-2.82-.39c-33.48,0-67,.06-100.43-.05-4.14,0-4.52,2.22-4.62,5.35-1.41,43.6-2.78,87.2-4.4,130.79-.19,5.09,1.58,6.09,6.21,6.06,32.31-.22,64.62-.18,96.93-.25,1.75,0,3.5-.24,5.49-.39C680.86,319.23,682.07,272.5,683.28,225.41Z" transform="translate(277 -158)"/><path d="M683.28,225.41c-1.21,47.09-2.42,93.82-3.64,141.12-2,.15-3.74.39-5.49.39-32.31.07-64.62,0-96.93.25-4.63,0-6.4-1-6.21-6.06,1.62-43.59,3-87.19,4.4-130.79.1-3.13.48-5.37,4.62-5.35,33.47.11,67,0,100.43.05A26.54,26.54,0,0,1,683.28,225.41Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 792 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM802,296.2h.7c0-21.82-.14-43.65.11-65.47,0-4.63-1.31-5.91-5.85-5.88q-47.47.27-95,0c-4.37,0-6,1-6.06,5.77Q694.7,295.86,692.84,361c-.13,4.59,1.14,6,5.8,6q49-.31,98-.08c4.62,0,5.54-1.59,5.5-5.75C801.94,339.51,802,317.86,802,296.2Z" transform="translate(277 -158)"/><path d="M802,296.2c0,21.66-.09,43.31.07,65,0,4.16-.88,5.77-5.5,5.75q-49-.27-98,.08c-4.66,0-5.93-1.37-5.8-6q1.8-65.19,3.13-130.39c.1-4.74,1.69-5.79,6.06-5.77q47.47.21,95,0c4.54,0,5.9,1.25,5.85,5.88-.25,21.82-.11,43.65-.11,65.47Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 755 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM919.16,296.12H918c0-22-.08-44,.07-66,0-4.15-1.36-5.36-5.47-5.34q-46.47.24-93,0c-3.95,0-5.48.88-5.47,5.24q.13,65.72-.21,131.43c0,4.11,1.12,5.38,5.32,5.36q47.22-.27,94.45,0c4.62,0,5.52-1.61,5.49-5.76C919.08,339.43,919.16,317.78,919.16,296.12Z" transform="translate(277 -158)"/><path d="M919.16,296.12c0,21.66-.08,43.31.08,65,0,4.15-.87,5.79-5.49,5.76q-47.22-.28-94.45,0c-4.2,0-5.34-1.25-5.32-5.36q.32-65.71.21-131.43c0-4.36,1.52-5.25,5.47-5.24q46.49.18,93,0c4.11,0,5.5,1.19,5.47,5.34-.15,22-.07,44-.07,66Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 769 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM1039.17,296.21h-1.4c0-21.66-.16-43.32.11-65,.06-5-1.2-6.55-6.35-6.51q-47,.36-94,.05c-4.82,0-6.59,1-6.51,6.31q.94,65.23,1.21,130.48c0,4.29,1.44,5.22,5.45,5.2q48.75-.24,97.49,0c4.34,0,5.74-1,5.59-5.56C1040.05,339.53,1039.67,317.87,1039.17,296.21Z" transform="translate(277 -158)"/><path d="M1039.17,296.21c.5,21.66.88,43.32,1.6,65,.15,4.52-1.25,5.58-5.59,5.56q-48.75-.23-97.49,0c-4,0-5.42-.91-5.45-5.2q-.35-65.24-1.21-130.48c-.08-5.33,1.69-6.34,6.51-6.31q47,.25,94-.05c5.15,0,6.41,1.54,6.35,6.51-.27,21.66-.11,43.32-.11,65Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 787 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM1052.49,366.17c2.8.22,4.1.41,5.4.41q46.2,0,92.4,0c6.58,0,6.7,0,6.46-6.5-1.66-43.57-3.43-87.14-5-130.72-.16-4.51-2.54-4.59-5.8-4.58-30,.06-59.94.15-89.9,0-4.86,0-6.18,1.46-6.06,6.27,1,37.78,1.7,75.56,2.45,113.34C1052.61,351.47,1052.49,358.61,1052.49,366.17Z" transform="translate(277 -158)"/><path d="M1052.49,366.17c0-7.56.12-14.7,0-21.84-.75-37.78-1.48-75.56-2.45-113.34-.12-4.81,1.2-6.3,6.06-6.27,30,.17,59.93.08,89.9,0,3.26,0,5.64.07,5.8,4.58,1.54,43.58,3.31,87.15,5,130.72.24,6.49.12,6.5-6.46,6.5q-46.2,0-92.4,0C1056.59,366.58,1055.29,366.39,1052.49,366.17Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 827 B |
@@ -0,0 +1 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2474 764"><defs><style>.cls-1{fill:rgba(255,255,255,0);}.cls-2{fill:#none;}</style></defs><path class="cls-1" d="M-277,922V158H2197V922ZM1170.17,366.09c2.38.16,4.33.4,6.28.39,25.5-.09,51-.1,76.49-.38,12.29-.14,11.28,2.73,10.53-11.71-2.13-41.26-4.59-82.49-6.63-123.75-.25-5-2-6-6.57-6-26.17.18-52.33.1-78.5.11-7.79,0-7.65,0-7.31,7.67q2,43.69,3.77,87.38C1168.88,335.1,1169.51,350.4,1170.17,366.09Z" transform="translate(277 -158)"/><path d="M1170.17,366.09c-.66-15.69-1.29-31-1.94-46.28q-1.86-43.68-3.77-87.38c-.34-7.65-.48-7.66,7.31-7.67,26.17,0,52.33.07,78.5-.11,4.52,0,6.32.95,6.57,6,2,41.26,4.5,82.49,6.63,123.75.75,14.44,1.76,11.57-10.53,11.71-25.5.28-51,.29-76.49.38C1174.5,366.49,1172.55,366.25,1170.17,366.09Z" transform="translate(277 -158)"/></svg>
|
||||
|
After Width: | Height: | Size: 844 B |
@@ -0,0 +1,232 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-22 14:00:57
|
||||
* @LastEditTime: 2024-08-30 13:55:33
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React from'react';
|
||||
import cls from "./index.module.css";
|
||||
|
||||
function InputDataToggle() {
|
||||
// const [season, setSeason] = useState(1);
|
||||
// const preFloor = useRef()
|
||||
return (
|
||||
<div
|
||||
className="dataContent"
|
||||
style={{
|
||||
display: "flex",
|
||||
width:"100%",
|
||||
// marginBottom: "24px",
|
||||
flexDirection: "column",/* 这行设置为垂直布局 */
|
||||
gap:'30px'
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className={
|
||||
cls.item
|
||||
}
|
||||
>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.paramsTitle
|
||||
}>
|
||||
投料速度
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
363
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
m/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.totalDataTitle
|
||||
}>
|
||||
天然气设定总量
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
631
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
m³/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={
|
||||
cls.item
|
||||
}
|
||||
>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.totalDataTitle
|
||||
}>
|
||||
焦炉煤气设定总量
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
11111
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
m³/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.paramsTitle
|
||||
}>
|
||||
助燃风流量
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
432
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
m³/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={
|
||||
cls.item
|
||||
}
|
||||
>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.totalDataTitle
|
||||
}>
|
||||
产品规格设定标准
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
11111
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.paramsTitle
|
||||
}>
|
||||
循环水流量
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
562
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
m³/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={
|
||||
cls.item
|
||||
}
|
||||
>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.totalDataTitle
|
||||
}>
|
||||
配料水分含量
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
60
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={
|
||||
cls.content
|
||||
}>
|
||||
<h2 className={
|
||||
cls.paramsTitle
|
||||
}>
|
||||
玻璃液出口宽度
|
||||
</h2>
|
||||
<div className={
|
||||
cls.paramsData
|
||||
}>
|
||||
<div className={
|
||||
cls.data
|
||||
}>
|
||||
11
|
||||
</div> <div className={
|
||||
cls.unit
|
||||
}>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default InputDataToggle;
|
||||
@@ -0,0 +1,108 @@
|
||||
.dataContent{
|
||||
width: 100%;
|
||||
}
|
||||
.item{
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;/* 这行设置为垂直布局 */
|
||||
gap: 35px;
|
||||
}
|
||||
.content{
|
||||
height: 56px;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.paramsData{
|
||||
flex: 1;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding:5px 10px;
|
||||
font-size: 32px;
|
||||
line-height: 48px;
|
||||
letter-spacing: 6px;
|
||||
background: url(../../../../../assets/paramsData.png) no-repeat;
|
||||
background-size: 100% 90%;
|
||||
background-position: bottom;
|
||||
color: #00fff788;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
|
||||
'PingFang SC', 'Microsoft YaHei', '微软雅黑', 'Microsoft YaHei UI',
|
||||
'Source Han Sans SC', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', sans-serif;
|
||||
}
|
||||
/* 下划线 */
|
||||
.paramsTitle{
|
||||
flex: 1;
|
||||
height: 56px;
|
||||
position: relative;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
color: #FFFFFF;
|
||||
line-height: 56px;
|
||||
letter-spacing: 1px;
|
||||
text-align: right;
|
||||
}
|
||||
.paramsTitle::after {
|
||||
content: "";
|
||||
top: 73%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 50%; /* 调整此处的宽度值来改变下划线的宽度,例如 50% 表示占文字宽度的一半 */
|
||||
height: 4px; /* 调整下划线的高度 */
|
||||
background-image: linear-gradient(173deg, rgba(47, 47, 49, 0) 0%, #2BFFDF 100%);
|
||||
box-shadow: 0px 2px 6px 0px rgba(43,255,223,0.55);
|
||||
backdrop-filter: blur(0px);
|
||||
}
|
||||
.totalDataTitle{
|
||||
flex: 1;
|
||||
height: 56px;
|
||||
position: relative;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
color: #FFFFFF;
|
||||
line-height: 56px;
|
||||
letter-spacing: 1px;
|
||||
text-align: right;
|
||||
}
|
||||
.totalDataTitle::after {
|
||||
content: "";
|
||||
top: 73%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 20%;
|
||||
width: 80%; /* 调整此处的宽度值来改变下划线的宽度,例如 50% 表示占文字宽度的一半 */
|
||||
height: 4px; /* 调整下划线的高度 */
|
||||
background-image: linear-gradient(173deg, rgba(47, 47, 49, 0) 0%, #2BFFDF 100%);
|
||||
box-shadow: 0px 2px 6px 0px rgba(43,255,223,0.55);
|
||||
backdrop-filter: blur(0px);
|
||||
}
|
||||
|
||||
.outTitle{
|
||||
flex: 1;
|
||||
height: 56px;
|
||||
position: relative;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
color: #FFFFFF;
|
||||
line-height: 56px;
|
||||
letter-spacing: 1px;
|
||||
text-align: right;
|
||||
}
|
||||
.outTitle::after {
|
||||
content: "";
|
||||
top: 73%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 20%;
|
||||
width: 80%; /* 调整此处的宽度值来改变下划线的宽度,例如 50% 表示占文字宽度的一半 */
|
||||
height: 4px; /* 调整下划线的高度 */
|
||||
background-image: linear-gradient(173deg, rgba(47, 47, 49, 0) 0%, #2BFFDF 100%);
|
||||
box-shadow: 0px 2px 6px 0px rgba(43,255,223,0.55);
|
||||
backdrop-filter: blur(0px);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 15:31:44
|
||||
* @LastEditTime: 2024-08-28 13:31:32
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecastTop";
|
||||
import { useSelector } from "react-redux";
|
||||
function LeftMiddleForecast() {
|
||||
const kilnInfo = useSelector((state) => state.cutting);
|
||||
console.log('kilnInfo',kilnInfo);
|
||||
|
||||
const infos = kilnInfo.forecastDayChart.map((ele) => {
|
||||
return {
|
||||
label:ele.lineName,
|
||||
value: ele.yield,
|
||||
}
|
||||
})
|
||||
return (
|
||||
<BottomBarItem title="预期结果" icon="forecast" className={cls.leftBar__middle}>
|
||||
<div className={cls.leftBar__middle__content}>
|
||||
{infos.map((item) => (
|
||||
<div key={item.label} className={`${cls.info__item}`}>
|
||||
<span className={cls.square}></span>
|
||||
<span className={cls.label}>{item.label}</span>
|
||||
<span className={cls.line}></span>
|
||||
<span className={cls.value}>{ (item.value * 100).toFixed(2) + '%'}</span>
|
||||
{/* {item.label}: {item.value} */}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
);
|
||||
}
|
||||
export default LeftMiddleForecast;
|
||||
@@ -0,0 +1,51 @@
|
||||
.leftBar__middle {
|
||||
width: 100%;
|
||||
height: 422px;
|
||||
.leftBar__middle__content {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
display: grid;
|
||||
grid-template-rows: auto 1fr 1fr;
|
||||
gap: 10px;
|
||||
padding-top: 18px;
|
||||
.info__item {
|
||||
/* width: 100%; */
|
||||
background: url('../../../../../assets/forecastBack.png') no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: relative;
|
||||
/* width: 220px; */
|
||||
height: 45px;
|
||||
/* background: rgba(10,154,255,0.15); */
|
||||
/* box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5); */
|
||||
/* border: 1px solid; */
|
||||
color: #58E7E9;
|
||||
/* border-image: linear-gradient(80deg, rgba(0, 255, 245, 0.55), rgba(0, 255, 245, 0)) 1 1; */
|
||||
font-size: 20px;
|
||||
letter-spacing: 1.43px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
.square{
|
||||
/* flex: 1; */
|
||||
margin-left: 20px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: #00FFF5;
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5), 0px 0px 4px 1px #58E7E9;
|
||||
}
|
||||
.label {
|
||||
/* flex:1; */
|
||||
text-align: left;
|
||||
/* position: relative; */
|
||||
}
|
||||
.value {
|
||||
width: 320px;
|
||||
/* flex: 1; */
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 15:31:44
|
||||
* @LastEditTime: 2024-08-30 10:05:40
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecastTop";
|
||||
import { useSelector } from "react-redux";
|
||||
import { stateNameMap } from "../../../../../store/features/bottomTe";
|
||||
function LeftMiddleForecast() {
|
||||
const kilnInfo = useSelector((state) => state.temperature.top);
|
||||
console.log(kilnInfo);
|
||||
|
||||
const infos = Object.keys(kilnInfo).map((key) => ({
|
||||
label: key,
|
||||
value: kilnInfo[key],
|
||||
}));
|
||||
const infoList = [infos[1], infos[5], infos[10], infos[16],infos[19]]
|
||||
console.log('infoList',infoList);
|
||||
return (
|
||||
<BottomBarItem title="池底温度" icon="kilnBottom" className={cls.leftBar__middle}>
|
||||
<div className={cls.leftBar__middle__content}>
|
||||
{/* {infos.map((item) => ( */}
|
||||
<div key={infoList[0].label} className={`${cls.span}`}>
|
||||
<span className={cls.square}></span>
|
||||
<span className={cls.label}>{infos[0].label}</span>
|
||||
<span className={cls.line}></span>
|
||||
<span className={cls.value}>{infos[0].label}</span>
|
||||
{/* {item.label}: {item.value} */}
|
||||
</div>
|
||||
{/* ))} */}
|
||||
{infoList.slice(1).map((item) => (
|
||||
<div key={item.label} className={`${cls.info__item}`}>
|
||||
<span className={cls.square}></span>
|
||||
<span className={cls.label}>{item.label}</span>
|
||||
<span className={cls.line}></span>
|
||||
<span className={cls.value}>{item.value}</span>
|
||||
{/* {item.label}: {item.value} */}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
);
|
||||
}
|
||||
export default LeftMiddleForecast;
|
||||
@@ -0,0 +1,130 @@
|
||||
.leftBar__middle {
|
||||
width: 100%;
|
||||
height: 261px;
|
||||
/* height: 261px; */
|
||||
/* background: url('../../../../../assets/ItemBg.png') no-repeat; */
|
||||
.leftBar__middle__content {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: repeat(4, 1fr);
|
||||
gap: 10px;
|
||||
padding-top: 18px;
|
||||
.span{
|
||||
grid-column: span 2;
|
||||
position: relative;
|
||||
/* width: 220px; */
|
||||
height: 45px;
|
||||
background: rgba(10,154,255,0.15);
|
||||
/* box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5); */
|
||||
border: 1px solid;
|
||||
color: #58E7E9;
|
||||
border-image: linear-gradient(80deg, rgba(0, 255, 245, 0.55), rgba(0, 255, 245, 0)) 1 1;
|
||||
font-size: 20px;
|
||||
letter-spacing: 1.43px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
.square{
|
||||
/* flex: 1; */
|
||||
margin-left: 20px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: #00FFF5;
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5), 0px 0px 4px 1px #58E7E9;
|
||||
}
|
||||
.label {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
position: relative;
|
||||
}
|
||||
.label::after{
|
||||
content: '';
|
||||
position:absolute;
|
||||
/* width: 3px; */
|
||||
left: 110%;
|
||||
width: 3px;
|
||||
top: 30%;
|
||||
height: 24px;
|
||||
background: linear-gradient( 360deg, rgba(0,187,255,0) 0%, #00BBFF 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
.value {
|
||||
flex: 5;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
.info__item {
|
||||
position: relative;
|
||||
/* width: 220px; */
|
||||
height: 45px;
|
||||
background: rgba(10,154,255,0.15);
|
||||
/* box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5); */
|
||||
border: 1px solid;
|
||||
color: #58E7E9;
|
||||
border-image: linear-gradient(80deg, rgba(0, 255, 245, 0.55), rgba(0, 255, 245, 0)) 1 1;
|
||||
font-size: 20px;
|
||||
letter-spacing: 1.43px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
.square{
|
||||
/* flex: 1; */
|
||||
margin-left: 20px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: #00FFF5;
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5), 0px 0px 4px 1px #58E7E9;
|
||||
}
|
||||
.label {
|
||||
flex: 2;
|
||||
text-align: right;
|
||||
position: relative;
|
||||
}
|
||||
.label::after{
|
||||
content: '';
|
||||
position:absolute;
|
||||
/* width: 3px; */
|
||||
left: 110%;
|
||||
width: 3px;
|
||||
top: 30%;
|
||||
height: 24px;
|
||||
background: linear-gradient( 360deg, rgba(0,187,255,0) 0%, #00BBFF 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
.value {
|
||||
flex: 3;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
.info__item::before{
|
||||
content: '';
|
||||
position:absolute;
|
||||
width: 3px;
|
||||
left: -5%;
|
||||
height: 45px;
|
||||
background: linear-gradient( 360deg, rgba(0,187,255,0) 0%, #00BBFF 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
.span::before{
|
||||
content: '';
|
||||
position:absolute;
|
||||
width: 3px;
|
||||
left: -2.3%;
|
||||
height: 45px;
|
||||
background: linear-gradient( 360deg, rgba(0,187,255,0) 0%, #00BBFF 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 15:31:44
|
||||
* @LastEditTime: 2024-08-30 10:03:33
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/BottomItemBackgroundForecastTop";
|
||||
import { useSelector } from "react-redux";
|
||||
// import { stateNameMap } from "../../../../../store/features/crownTe";
|
||||
function LeftTopForecast() {
|
||||
const kilnInfo = useSelector((state) => state.temperature.top);
|
||||
console.log(kilnInfo);
|
||||
|
||||
const infos = Object.keys(kilnInfo).map((key) => ({
|
||||
label: key,
|
||||
value: kilnInfo[key],
|
||||
}));
|
||||
const infoList = [infos[1], infos[5], infos[10], infos[16]]
|
||||
console.log('infoList',infoList);
|
||||
return (
|
||||
<BottomBarItem title="碹顶温度" icon="kilnTop" className={cls.leftBar__top}>
|
||||
<div className={cls.leftBar__top__content}>
|
||||
{infoList.map((item) => (
|
||||
<div key={item.label} className={cls.info__item}>
|
||||
<span className={cls.square}></span>
|
||||
<span className={cls.label}>{item.label}</span>
|
||||
<span className={cls.line}></span>
|
||||
<span className={cls.value}>{item.value}</span>
|
||||
{/* {item.label}: {item.value} */}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
);
|
||||
}
|
||||
export default LeftTopForecast;
|
||||
@@ -0,0 +1,72 @@
|
||||
.leftBar__top {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
/* background: url('../../../../../assets/ItemBg.png') no-repeat; */
|
||||
/* background-size: 100% 100%; */
|
||||
|
||||
.leftBar__top__content {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 10px;
|
||||
padding-top: 18px;
|
||||
.info__item {
|
||||
position: relative;
|
||||
/* width: 220px; */
|
||||
height: 45px;
|
||||
background: rgba(10,207,255,0.15);
|
||||
/* box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5); */
|
||||
border: 1px solid;
|
||||
color: #58E7E9;
|
||||
border-image: linear-gradient(80deg, rgba(0, 255, 245, 0.55), rgba(0, 255, 245, 0)) 1 1;
|
||||
font-size: 20px;
|
||||
letter-spacing: 1.43px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
user-select: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
.square{
|
||||
/* flex: 1; */
|
||||
margin-left: 20px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: #00FFF5;
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5), 0px 0px 4px 1px #58E7E9;
|
||||
}
|
||||
.label {
|
||||
flex: 2;
|
||||
text-align: right;
|
||||
position: relative;
|
||||
}
|
||||
.label::after{
|
||||
content: '';
|
||||
position:absolute;
|
||||
/* width: 3px; */
|
||||
left: 110%;
|
||||
width: 3px;
|
||||
top: 30%;
|
||||
height: 24px;
|
||||
background: linear-gradient( 360deg, rgba(0,255,251,0) 0%, #00FFF5 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
.value {
|
||||
flex: 3;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
.info__item::before{
|
||||
content: '';
|
||||
position:absolute;
|
||||
width: 3px;
|
||||
left: -5%;
|
||||
height: 45px;
|
||||
background: linear-gradient( 360deg, rgba(0,255,251,0) 0%, #00FFF5 100%);
|
||||
box-shadow: 0px 1px 7px 0px rgba(58,0,0,0.5);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-20 14:09:17
|
||||
* @LastEditTime: 2024-08-30 14:53:39
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
// 窑炉预测控制参数输入
|
||||
import cls from "./index.module.css";
|
||||
import BottomBarItem from "../../../../Common/forecastLargeBackground";
|
||||
// import CommonChart from "../CommonChart";
|
||||
import DayNightToggle from "../dayButton";
|
||||
import SeasonToggle from "../seasonButton";
|
||||
import InputDataToggle from "../inputData";
|
||||
function paramsInput(props) {
|
||||
const handleClick = () => {
|
||||
props.onSendValueToParent(true);
|
||||
};
|
||||
return (
|
||||
<BottomBarItem icon="kilnPress" title="控制参数输入" style={props.style}>
|
||||
<div className={cls.legend}>
|
||||
<DayNightToggle style={{ flex: 1, width: '100%', marginTop: '24px' }} />
|
||||
</div>
|
||||
<div className={cls.middle}>
|
||||
<SeasonToggle style={{ flex: 1, width: '100%', }} />
|
||||
<InputDataToggle style={{ flex: 1, width: '100%', }} />
|
||||
</div>
|
||||
<div className={cls.bottom}>
|
||||
<div className={cls.bottomButton} onClick={handleClick}>
|
||||
执行模拟
|
||||
</div>
|
||||
</div>
|
||||
</BottomBarItem>
|
||||
);
|
||||
}
|
||||
export default paramsInput;
|
||||
@@ -0,0 +1,52 @@
|
||||
/* .chart {
|
||||
height: 100%;
|
||||
} */
|
||||
.legend {
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
top: 40px;
|
||||
}
|
||||
.middle {
|
||||
margin-top: 70px;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
/* width: 10%; */
|
||||
/* position: absolute;
|
||||
left: 225px;
|
||||
top: 40px; */
|
||||
}
|
||||
.bottom{
|
||||
/* height: 100%; */
|
||||
margin-top: 20px;
|
||||
/* display: flex; */
|
||||
/* justify-content: center; */
|
||||
}
|
||||
.bottomButton{
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
padding:15px 10px;
|
||||
font-size: 32px;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
letter-spacing: 6px;
|
||||
background: url(../../../../../assets/modelButton.png) no-repeat;
|
||||
background-size: 100% 90%;
|
||||
background-position: bottom;
|
||||
color: #00fff788;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
|
||||
'PingFang SC', 'Microsoft YaHei', '微软雅黑', 'Microsoft YaHei UI',
|
||||
'Source Han Sans SC', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', sans-serif;
|
||||
}
|
||||
/* .item{
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
font-size: 11px;
|
||||
color: #DFF1FE;
|
||||
}
|
||||
.block {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
margin-right: 4px;
|
||||
} */
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-22 14:00:57
|
||||
* @LastEditTime: 2024-08-22 14:33:33
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React, { useState } from'react';
|
||||
import cls from "./index.module.css";
|
||||
|
||||
function SeasonToggle() {
|
||||
const [season, setSeason] = useState(1);
|
||||
// const preFloor = useRef();
|
||||
function onSeasonUpdate(season) {
|
||||
// preFloor.current = floor;
|
||||
setSeason(season);
|
||||
// onFloorChange(flr);
|
||||
}
|
||||
return (
|
||||
<div
|
||||
className="subMenu"
|
||||
style={{
|
||||
display: "flex",
|
||||
width:"10%",
|
||||
// marginBottom: "24px",
|
||||
flexDirection: "column",/* 这行设置为垂直布局 */
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className={
|
||||
"season season1 " + cls.menuItem + " " + (season === 1 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onSeasonUpdate(1)}
|
||||
>
|
||||
春季
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"season season2 " + cls.menuItem + " " + (season === 2 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onSeasonUpdate(2)}
|
||||
>
|
||||
夏季
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"season season3 " + cls.menuItem + " " + (season === 3 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onSeasonUpdate(3)}
|
||||
>
|
||||
夏季
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
"season season4 " + cls.menuItem + " " + (season === 4 ? cls.active : "")
|
||||
}
|
||||
onClick={() => onSeasonUpdate(4)}
|
||||
>
|
||||
夏季
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default SeasonToggle;
|
||||
@@ -0,0 +1,30 @@
|
||||
.menuItem {
|
||||
/* transition: all 0.3s ease-out; */
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
padding:40px 35px;
|
||||
font-size: 32px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
writing-mode: vertical-lr;
|
||||
line-height: 48px;
|
||||
letter-spacing: 6px;
|
||||
background: url(../../../../../assets/seasonChange.png) no-repeat;
|
||||
background-size: 90% 100%;
|
||||
background-position: bottom;
|
||||
color: #00fff788;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
|
||||
'PingFang SC', 'Microsoft YaHei', '微软雅黑', 'Microsoft YaHei UI',
|
||||
'Source Han Sans SC', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', sans-serif;
|
||||
}
|
||||
|
||||
.menuItem.active,
|
||||
.menuItem:hover {
|
||||
background: url(../../../../../assets/seasonActive.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.menuItem:not(:first-child) {
|
||||
margin-top:20px;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-30 15:22:59
|
||||
* @LastEditTime: 2024-08-30 15:22:59
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React from'react';
|
||||
|
||||
export const ValueContext = React.createContext();
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-08-23 13:56:11
|
||||
* @LastEditTime: 2024-08-30 16:30:35
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import React, { useContext } from'react';
|
||||
import KilnTopForecast from '../components/KilnTopForecast';
|
||||
import KilnBottomForecast from '../components/KilnBottomForecast';
|
||||
import KilnMiddleForecast from '../components/KilnMiddleForecast';
|
||||
import LeftBottomForecast from '../components/leftBottomForecast';
|
||||
import LeftTopForecast from '../components/leftTopForecast';
|
||||
import LeftMiddleForecast from '../components/leftMiddleForecast';
|
||||
import { motion } from 'framer-motion';
|
||||
import { ValueContext } from './contextFile';
|
||||
import cls from './index.module.scss';
|
||||
|
||||
export default function Index() {
|
||||
return (
|
||||
<div className={cls.forecast}>
|
||||
<motion.div
|
||||
className={cls.leftBar}
|
||||
initial={{ opacity: 0, position: 'absolute' }}
|
||||
animate={{ opacity: 1, position: 'relative' }}
|
||||
exit={{ opacity: 0, position: 'relative' }}
|
||||
transition={{ type: 'tween' }}
|
||||
>
|
||||
<div style={{ height: '200px', marginTop: '24px' }}>
|
||||
<LeftTopForecast/>
|
||||
</div>
|
||||
<div style={{ height: '261px', marginTop: '24px' }}>
|
||||
<LeftMiddleForecast />
|
||||
</div>
|
||||
<div style={{ flex: 1,marginTop: '24px' }}>
|
||||
<LeftBottomForecast/>
|
||||
</div>
|
||||
</motion.div>
|
||||
<motion.div
|
||||
className={cls.leftBar}
|
||||
initial={{ opacity: 0, position: 'absolute' }}
|
||||
animate={{ opacity: 1, position: 'relative' }}
|
||||
exit={{ opacity: 0, position: 'relative' }}
|
||||
transition={{ type: 'tween' }}
|
||||
>
|
||||
<KilnTopForecast style={{ flex: 1, width: '100%', marginTop: '24px' }} />
|
||||
<KilnMiddleForecast style={{ flex: 1, width: '100%', marginTop: '24px' }} />
|
||||
<KilnBottomForecast style={{ flex: 1, width: '100%', marginTop: '24px' }} />
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
.leftBar {
|
||||
width: 501px;
|
||||
height: 966px;
|
||||
// margin-left: 40px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.forecast{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
}
|
||||