楼宇能效监测控制系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1348 lines
34 KiB

<template>
<div class="monitor" v-loading="loading">
<div class="monitor-top">
<img
class="title-left"
src="../../../assets/images/title-left.png"
alt=""
/>
<img
class="title-center"
@click="goSys"
src="../../../assets/images/title-center.png"
alt=""
/>
<img
class="title-right"
src="../../../assets/images/title-right.png"
alt=""
/>
<div class="sys-title" @click="goSys">铭汉空压热回收系统</div>
<!-- logo -->
<img src="../../../assets/images/logo-3.png" class="sys-logo" alt="" />
<div class="nowTime">{{ formattedDate }}</div>
<div class="monitor-time">已监测时长:{{ dayData }}</div>
<img
class="icon_warning"
src="../../../assets/images/warning.png"
title="报警记录"
@click="goWarning"
v-if="isShowWarning"
alt=""
/>
<img
class="icon_home"
src="../../../assets/images/icon_home.png"
title="首页"
@click="goSys"
alt=""
/>
<img
class="back-icon"
src="../../../assets/images/back-icon.png"
title="返回"
@click="goBack"
alt=""
/>
</div>
<div class="host-detail">
<!-- 流程底图 -->
<img
class="flowchart"
src="../../../assets/images/flowchart.png"
alt=""
/>
<!-- 热量数据 -->
<div class="hot-details">
<div class="hot-title">热量计量</div>
<div class="hot-li">
<img
src="../../../assets/images/hot-icon1.png"
class="hot-icon"
alt=""
/>
<div>热回收总量:</div>
<div class="hot-data">{{ hotData.totalHeatRecoverySum }}kwh</div>
</div>
<div class="hot-li">
<img
src="../../../assets/images/hot-icon2.png"
class="hot-icon"
alt=""
/>
<div>离心机热量回收:</div>
<div class="hot-data">
{{ hotData.centrifugalHeatRecoverySum }}kwh
</div>
</div>
<div class="hot-li">
<img
src="../../../assets/images/hot-icon3.png"
class="hot-icon"
alt=""
/>
<div>后处理及MD热量回收:</div>
<div class="hot-data">
{{ hotData.postProcessingAndMdHeatRecoverySum }}kwh
</div>
</div>
<div class="hot-li">
<img
src="../../../assets/images/hot-icon4.png"
class="hot-icon"
alt=""
/>
<div>水源热泵热量:</div>
<div class="hot-data">{{ hotData.waterSourceHeatPumpSum }}kwh</div>
</div>
</div>
<!-- 标题 -->
<div class="text text1">车间热水</div>
<div class="text text2">供水</div>
<div class="text text3">车间热水</div>
<div class="text text4">回水</div>
<div class="text text5">空调热水</div>
<div class="text text6">蓄热循环水箱</div>
<div class="text text7">中温水板换</div>
<div class="text text8">低温水板换</div>
<div class="text text9">冷却水板换</div>
<div class="text text10">二通阀</div>
<div class="text text11">三通阀</div>
<div class="text text12">后冷却器</div>
<div class="text text13">吸干机</div>
<div class="text text14">保障冷却器</div>
<div class="text text15">水源热泵</div>
<div class="text text16">冷却塔</div>
<div class="text text17">离心机</div>
<!-- 标志 -->
<div class="text p0">P0</div>
<div class="text p1">P1</div>
<div class="text p2">P2</div>
<div class="text p3">P3</div>
<div class="text p4">P4</div>
<div class="text p5">P5</div>
<div class="text p6">P6</div>
<div class="text p7">P7</div>
<div class="text p8">P8</div>
<div class="text p9">P9</div>
<div class="text p10">P10</div>
<div class="text p11">P11</div>
<div class="text p12">P12</div>
<div class="text t1">T1</div>
<div class="text t2">T2</div>
<div class="text t3">T3</div>
<div class="text t4">T4</div>
<div class="text t5">T5</div>
<div class="text t6">T6</div>
<div class="text t7">T7</div>
<div class="text h1">热量表1</div>
<div class="text h2">热量表2</div>
<div class="text h3">热量表3</div>
<div class="text h4">热量表4</div>
<div class="text h5">热量表5</div>
<div class="text h6">热量表6</div>
<div class="text h7">热量表7</div>
<!-- 可点击区域 -->
<div
class="text click2"
@click="controlValve(valveOneArr, '二通阀门')"
></div>
<div
class="text click1"
@click="controlValve(valveTwoArr, '三通阀门')"
></div>
<!-- 数据 -->
<!-- 压力传感器0-12号 -->
<div class="text pres0">
{{ getTemPreData(pressureArr, "0号压力传感器") }}bar
</div>
<div class="text pres1">
{{ getTemPreData(pressureArr, "1号压力传感器") }}bar
</div>
<div class="text pres2">
{{ getTemPreData(pressureArr, "2号压力传感器") }}bar
</div>
<div class="text pres3">
{{ getTemPreData(pressureArr, "3号压力传感器") }}bar
</div>
<div class="text pres4">
{{ getTemPreData(pressureArr, "4号压力传感器") }}bar
</div>
<div class="text pres5">
{{ getTemPreData(pressureArr, "5号压力传感器") }}bar
</div>
<div class="text pres6">
{{ getTemPreData(pressureArr, "6号压力传感器") }}bar
</div>
<div class="text pres7">
{{ getTemPreData(pressureArr, "7号压力传感器") }}bar
</div>
<div class="text pres8">
{{ getTemPreData(pressureArr, "8号压力传感器") }}bar
</div>
<div class="text pres9">
{{ getTemPreData(pressureArr, "9号压力传感器") }}bar
</div>
<div class="text pres10">
{{ getTemPreData(pressureArr, "10号压力传感器") }}bar
</div>
<div class="text pres11">
{{ getTemPreData(pressureArr, "11号压力传感器") }}bar
</div>
<div class="text pres12">
{{ getTemPreData(pressureArr, "12号压力传感器") }}bar
</div>
<!-- 温度传感器 1-7号 -->
<div class="text tem1">{{ getTemPreData(temArr, "1号温度传感器") }}℃</div>
<div class="text tem2">{{ getTemPreData(temArr, "2号温度传感器") }}℃</div>
<div class="text tem3">{{ getTemPreData(temArr, "3号温度传感器") }}℃</div>
<div class="text tem4">{{ getTemPreData(temArr, "4号温度传感器") }}℃</div>
<div class="text tem5">{{ getTemPreData(temArr, "5号温度传感器") }}℃</div>
<div class="text tem6">{{ getTemPreData(temArr, "6号温度传感器") }}℃</div>
<div class="text tem7">{{ getTemPreData(temArr, "7号温度传感器") }}℃</div>
<!-- 热量表1数据 -->
<div class="text intem1">
{{ getHotMeterTemp(hotArrOne, "进水温度") }}℃
</div>
<div class="text outtem1">
{{ getHotMeterTemp(hotArrOne, "出水温度") }}℃
</div>
<div class="text nowhot1">
{{ getHotMeterTemp(hotArrOne, "瞬时热量") }}kwh
</div>
<!-- 热量表2数据 -->
<div class="text intem2">
{{ getHotMeterTemp(hotArrTwo, "进水温度") }}℃
</div>
<div class="text outtem2">
{{ getHotMeterTemp(hotArrTwo, "出水温度") }}℃
</div>
<div class="text nowhot2">
{{ getHotMeterTemp(hotArrTwo, "瞬时热量") }}kwh
</div>
<!-- 热量表3数据 -->
<div class="text intem3">
{{ getHotMeterTemp(hotArrThree, "进水温度") }}℃
</div>
<div class="text outtem3">
{{ getHotMeterTemp(hotArrThree, "出水温度") }}℃
</div>
<div class="text nowhot3">
{{ getHotMeterTemp(hotArrThree, "瞬时热量") }}kwh
</div>
<!-- 热量表4数据 -->
<div class="text intem4">
{{ getHotMeterTemp(hotArrFour, "进水温度") }}℃
</div>
<div class="text outtem4">
{{ getHotMeterTemp(hotArrFour, "出水温度") }}℃
</div>
<div class="text nowhot4">
{{ getHotMeterTemp(hotArrFour, "瞬时热量") }}kwh
</div>
<!-- 热量表5数据 -->
<div class="text intem5">
{{ getHotMeterTemp(hotArrFive, "进水温度") }}℃
</div>
<div class="text outtem5">
{{ getHotMeterTemp(hotArrFive, "出水温度") }}℃
</div>
<div class="text nowhot5">
{{ getHotMeterTemp(hotArrFive, "瞬时热量") }}kwh
</div>
<!-- 热量表6数据 -->
<div class="text intem6">
{{ getHotMeterTemp(hotArrSix, "进水温度") }}℃
</div>
<div class="text outtem6">
{{ getHotMeterTemp(hotArrSix, "出水温度") }}℃
</div>
<div class="text nowhot6">
{{ getHotMeterTemp(hotArrSix, "瞬时热量") }}kwh
</div>
<!-- 热量表7数据 -->
<div class="text intem7">
{{ getHotMeterTemp(hotArrSix, "进水温度") }}℃
</div>
<div class="text outtem7">
{{ getHotMeterTemp(hotArrSix, "出水温度") }}℃
</div>
<div class="text nowhot7">
{{ getHotMeterTemp(hotArrSix, "瞬时热量") }}kwh
</div>
<!-- 二通阀门 -->
<div class="text valve1">
{{ getHotMeterTemp(valveOneArr, "开度反馈") }}%
</div>
<!-- 三通阀门 -->
<div class="text valve2">
{{ getHotMeterTemp(valveTwoArr, "开度反馈") }}%
</div>
</div>
</div>
</template>
<script>
import { runTime, operationConrol } from "@/api/centerairC/sysMonitor";
import { alarmRecordList } from "@/api/alarm/alarmRecord";
import {
monitorList,
monitorTotalDatas,
} from "@/api/heatRecoverySys/deviceMonitor";
import { getDay } from "@/utils/datetime";
export default {
data() {
return {
loading: false,
currentDate: new Date(),
nowTimer: null,
isShowWarning: false, //是否有报警
dayData: "", //监测天数
timer: null, // 用于存储定时器 ID
hotData: {}, //热量计量框
pressureArr: [], //压力传感器
temArr: [], //温度传感器
hotArrOne: [], //热量表1数据
hotArrTwo: [], //热量表2数据
hotArrThree: [], //热量表3数据
hotArrFour: [], //热量表4数据
hotArrFive: [], //热量表5数据
hotArrSix: [], //热量表6数据
hotArrSeven: [], //热量表7数据
valveOneArr: [], //二通阀门开度
valveTwoArr: [], //三通阀门开度
};
},
computed: {
formattedDate() {
const year = this.currentDate.getFullYear();
const month = String(this.currentDate.getMonth() + 1).padStart(2, "0");
const day = String(this.currentDate.getDate()).padStart(2, "0");
const hours = String(this.currentDate.getHours()).padStart(2, "0");
const minutes = String(this.currentDate.getMinutes()).padStart(2, "0");
const seconds = String(this.currentDate.getSeconds()).padStart(2, "0");
const weekDays = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
const weekDay = weekDays[this.currentDate.getDay()];
return `${year}${month}${day}${hours}:${minutes}:${seconds} ${weekDay}`;
},
},
mounted() {
this.getAlarnStatus();
this.getDayData();
this.getMonitorList();
this.getMonitorTotalData();
// 在组件挂载后尝试进入全屏
setTimeout(() => {
this.requestFullscreen();
}, 100); // 延迟 100 毫秒执行全屏操作
// 设置定时器,每 10 秒执行一次
this.timer = setInterval(() => {
this.getAlarnStatus();
this.getMonitorList();
this.getMonitorTotalData();
}, 10000);
// 每秒更新一次时间
this.nowTimer = setInterval(() => {
this.currentDate = new Date();
}, 1000);
},
beforeDestroy() {
// 组件销毁前清除定时器
if (this.timer) {
clearInterval(this.timer);
}
// 组件销毁前清除定时器
if (this.nowTimer) {
clearInterval(this.nowTimer);
}
},
methods: {
// 全屏操作
requestFullscreen() {
const element = document.documentElement;
console.log("全屏了吗");
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
// Firefox
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
// Chrome, Safari and Opera
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
// IE/Edge
element.msRequestFullscreen();
}
},
// 退出全屏
exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
// Firefox
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
// Chrome, Safari and Opera
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
// IE/Edge
document.msExitFullscreen();
}
},
// 进入系统首页
goSys() {
// this.exitFullscreen();
this.$router.push("/");
},
// 返回上一页
goBack() {
window.history.go(-2);
},
// 监测天数
getDayData() {
runTime().then((res) => {
if (res.code == 200) {
this.dayData = res.data.runTime;
}
});
},
// 报警列表
getAlarnStatus() {
let data = {
pageNum: 1,
pageSize: 10,
status: "0",
};
let timeArr = [getDay(0), getDay(0)];
alarmRecordList(this.addDateRange(data, timeArr)).then((res) => {
if (res.code == 200 && res.rows.length > 0) {
this.isShowWarning = true;
} else {
this.isShowWarning = false;
}
});
},
// 工艺流程图数据
getMonitorList() {
let data = {
systemType: "7",
};
monitorList(data).then((res) => {
if (res.code == 200) {
console.log("工艺流程图返回数据----------", res.rows);
// 初始化各个设备列表
this.pressureArr = [];
this.temArr = [];
this.hotArr = [];
this.valveOneArr = [];
this.valveTwoArr = [];
res.rows.forEach((row) => {
// 对 values 数组按照 orderNum 进行排序
const sortedValues = row.values
? [...row.values].sort((a, b) => {
// 确保 orderNum 是数字类型进行比较
const orderA = Number(a.orderNum) || 0;
const orderB = Number(b.orderNum) || 0;
return orderA - orderB;
})
: [];
switch (row.name) {
case "13":
this.pressureArr = sortedValues;
console.log("排序后的压力传感器数组", this.pressureArr);
break;
case "14":
this.temArr = sortedValues;
console.log("排序后的温度传感器数组", this.temArr);
break;
case "6":
// 处理热量表数据,按 orderNum 分配到不同数组
this.processHotMeters(sortedValues);
break;
case "26":
this.valveOneArr = sortedValues;
console.log("排序后的二通阀门开度数据", this.valveOneArr);
break;
case "27":
this.valveTwoArr = sortedValues;
console.log("排序后的三通阀门开度数据", this.valveTwoArr);
break;
default:
break;
}
});
}
});
},
// 处理热量表数据的方法
processHotMeters(sortedValues) {
// 清空所有热量表数组
this.hotArrOne = [];
this.hotArrTwo = [];
this.hotArrThree = [];
this.hotArrFour = [];
this.hotArrFive = [];
this.hotArrSix = [];
// 根据 orderNum 分配数据
sortedValues.forEach((item) => {
const orderNum = Number(item.orderNum);
switch (orderNum) {
case 1:
this.hotArrOne.push(item);
break;
case 2:
this.hotArrTwo.push(item);
break;
case 3:
this.hotArrThree.push(item);
break;
case 4:
this.hotArrFour.push(item);
break;
case 5:
this.hotArrFive.push(item);
break;
case 6:
this.hotArrSix.push(item);
break;
case 7:
this.hotArrSeven.push(item);
break;
default:
console.warn(`未知的 orderNum: ${orderNum},跳过该热量表数据`);
break;
}
});
// 打印各个热量表数组
console.log("热量表1数据:", this.hotArrOne);
console.log("热量表2数据:", this.hotArrTwo);
console.log("热量表3数据:", this.hotArrThree);
console.log("热量表4数据:", this.hotArrFour);
console.log("热量表5数据:", this.hotArrFive);
console.log("热量表6数据:", this.hotArrSix);
console.log("热量表7数据:", this.hotArrSeven);
},
// 获取热量表的温度值(进水温度/出水温度) 阀门开度反馈
getHotMeterTemp(arr, type) {
if (!arr || !Array.isArray(arr)) return null;
// 查找对应类型的温度数据
const item = arr.find((item) => {
if (!item || !item.collectName) return false;
return item.collectName.includes(type);
});
if (!item) return null;
// console.log("当前匹配名称和值", item.collectName, item.collectValue);
return item.collectValue;
},
// 获取其他的数据
getTemPreData(arr, type) {
if (!arr || !Array.isArray(arr)) return null;
// 查找对应类型的温度数据
const item = arr.find((item) => {
if (!item || !item.collectName) return false;
return item.collectName == type;
});
if (!item) return null;
// console.log("当前匹配名称和值", item.collectName, item.collectValue);
return item.collectValue;
},
// 控制开度
async controlValve(data, title) {
try {
// 获取当前开阀开度
await this.getCurrentValveOpening(data, title);
// 弹出设置框,并预填当前值
this.$prompt(`请输入${title}开度(0-100%)`, "开阀开度设置", {
confirmButtonText: "确定",
cancelButtonText: "取消",
inputType: "number",
inputValue: this.currentOpening, // 预填当前值
inputPlaceholder: "请输入0-100之间的数值",
inputValidator: (value) => {
// 检查是否为空
if (value === "" || value === null || value === undefined) {
return "请输入开阀开度";
}
// 转换为数字
const num = Number(value);
// 检查是否为有效数字
if (isNaN(num)) {
return "请输入有效的数字";
}
// 检查范围
if (num < 0 || num > 100) {
return "开阀开度必须在0-100之间";
}
// 验证通过
return true;
},
inputErrorMessage: "请输入有效的开阀开度",
})
.then(({ value }) => {
// 这里可以调用实际的控制函数
this.setValveOpening(data, value);
})
.catch(() => {
// 取消操作
});
} catch (error) {
console.error("获取当前开度失败:", error);
this.$message.error("获取当前开度失败,请重试");
} finally {
// this.loading = false;
}
},
// 获取当前开阀开度的函数
async getCurrentValveOpening(data, title) {
return new Promise((resolve, reject) => {
setTimeout(() => {
// 在data数组中查找deviceName等于title的对象
const device = data.find(
(item) =>
item.deviceName === title && item.collectName.includes("开度设置")
);
console.log("当前的对象", device);
if (device) {
// 找到设备,获取当前开度
this.currentOpening = device.collectValue;
console.log(`获取到${title}的当前开度:`, this.currentOpening);
resolve(this.currentOpening);
} else {
// 未找到设备
const errorMsg = `未找到设备: ${title}`;
console.error(errorMsg);
reject(new Error(errorMsg));
}
}, 500);
});
},
// 实际设置开阀开度的函数
async setValveOpening(data, value) {
try {
console.log("正在设置开阀开度为:", value);
let id = "";
// 在data数组中查找deviceName等于title的对象
const device = data.find((item) =>
item.collectName.includes("开度设置")
);
console.log("当前的对象", device);
if (device) {
id = device.id;
} else {
id = "";
}
// 准备请求参数
const params = {
id: id,
param: value,
};
console.log("params", params);
// 调用operationConrol接口
const result = await operationConrol([params]);
if (result.code == 200) {
this.$modal.msgSuccess("指令下发成功!");
this.getMonitorList();
this.getMonitorTotalData();
}
// 更新当前开度值
this.currentOpening = Number(value);
console.log("设置成功,当前开度更新为:", this.currentOpening);
} catch (error) {
console.error("设置开阀开度失败:", error);
// this.$message.error("设置开阀开度失败,请重试");
}
},
// 积累热量数据
getMonitorTotalData() {
let data = {
systemType: "7",
};
monitorTotalDatas(data).then((res) => {
if (res.code == 200) {
console.log("累计热量返回数据----------", res.rows);
this.hotData = res.rows[0];
}
});
},
goWarning() {
// this.exitFullscreen();
this.$router.push("/alarm/alarmRecord");
},
},
};
</script>
<style lang="scss" scoped>
.monitor {
width: 100%;
min-height: 100vh;
background-color: black;
color: #fff;
.monitor-top {
width: 100%;
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
flex-wrap: nowrap;
padding: 0.1rem 0.2rem;
position: relative;
.title-left {
width: 3.41rem;
height: 0.8rem;
}
.title-center {
width: 9.46rem;
height: 0.8rem;
}
.title-right {
width: 5.04rem;
height: 0.78rem;
}
.sys-title {
position: absolute;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 0.28rem;
color: #ffffff;
font-weight: bold;
z-index: 100;
cursor: pointer;
}
.nowTime {
position: absolute;
top: 0.37rem;
right: 0.6rem;
font-size: 0.18rem;
color: #ffffff;
font-weight: bold;
z-index: 100;
}
.sys-logo {
width: 1.8rem;
height: 0.5rem;
position: absolute;
top: 0.26rem;
left: 0.8rem;
z-index: 10;
}
.monitor-time {
position: absolute;
top: 0.44rem;
left: 4.2rem;
z-index: 10;
font-size: 0.18rem;
color: #ffffff;
font-weight: bold;
}
.icon_warning {
position: absolute;
top: 0.39rem;
right: 4.4rem;
z-index: 10;
width: 0.35rem;
height: 0.32rem;
margin: 0 0.25rem 0 0.27rem;
cursor: pointer;
/* 添加闪烁动画 */
animation: blink 1s infinite;
}
@keyframes blink {
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.icon_home {
position: absolute;
top: 0.39rem;
right: 4rem;
z-index: 10;
width: 0.35rem;
height: 0.32rem;
margin: 0 0.2rem 0 0.27rem;
cursor: pointer;
}
.back-icon {
position: absolute;
top: 0.39rem;
right: 3.7rem;
z-index: 10;
width: 0.35rem;
height: 0.32rem;
cursor: pointer;
}
}
.host-detail {
margin: 0 0.2rem;
width: calc(100% - 0.4rem);
height: 9.6rem;
position: relative;
background-image: url(../../../assets/images/monitor-border.png);
background-size: 100% 100%;
background-repeat: no-repeat;
.flowchart {
width: 16.806rem;
height: 8.245rem;
position: absolute;
top: 0.5rem;
left: 1.1rem;
}
.hot-details {
width: 4.6rem;
padding: 0.1rem;
height: 3.05rem;
background-image: url(../../../assets/images/monitor-hot.png);
background-size: 100% 100%;
background-repeat: no-repeat;
position: absolute;
top: 0.4rem;
right: 0.8rem;
display: flex;
flex-direction: column;
.hot-title {
font-size: 0.18rem;
color: #ffffff;
font-weight: bold;
padding: 0.05rem 0 0 0.5rem;
margin-bottom: 0.4rem;
}
.hot-li {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
font-size: 0.16rem;
color: #b8bbb7;
position: relative;
padding-left: 1rem;
margin-bottom: 0.3rem;
text-align: center;
letter-spacing: 0.1em;
.hot-icon {
width: 1rem;
height: 1rem;
position: absolute;
left: 0.2rem;
}
.hot-data {
color: #ffffff;
font-weight: bold;
margin-left: 0.1rem;
}
}
}
.text {
font-size: 0.18rem;
color: #ffffff;
position: absolute;
letter-spacing: 0.1em;
}
.text1 {
top: 1.2rem;
left: 2.5rem;
}
.text2 {
top: 1.5rem;
left: 2.5rem;
}
.text3 {
top: 2.6rem;
left: 2.5rem;
}
.text4 {
top: 2.9rem;
left: 2.5rem;
}
.text5 {
top: 4.3rem;
left: 0.5rem;
}
.text6 {
top: 2.55rem;
left: 4.4rem;
}
.text7 {
top: 3.35rem;
left: 7.9rem;
}
.text8 {
top: 5.02rem;
left: 7.9rem;
}
.text9 {
top: 6.7rem;
left: 2rem;
}
.text10 {
top: 5.45rem;
left: 4.1rem;
font-size: 0.14rem;
}
.text11 {
top: 5.59rem;
left: 11.5rem;
font-size: 0.14rem;
}
.text12 {
top: 7.7rem;
left: 6.4rem;
}
.text13 {
top: 7.7rem;
left: 8.6rem;
}
.text14 {
top: 7.27rem;
left: 11.65rem;
}
.text15 {
top: 7.57rem;
left: 14.1rem;
}
.text16 {
top: 7.27rem;
left: 16.3rem;
}
.text17 {
top: 5.05rem;
left: 14.1rem;
}
.pres0 {
top: 1.57rem;
left: 8.1rem;
color: #eaf12a;
}
.pres1 {
top: 2.35rem;
left: 9.6rem;
color: #eaf12a;
}
.pres2 {
top: 4rem;
left: 9.6rem;
color: #eaf12a;
}
.pres3 {
top: 5rem;
left: 10.6rem;
color: #eaf12a;
}
.pres4 {
top: 5.1rem;
left: 12.5rem;
color: #eaf12a;
}
.pres5 {
top: 2.9rem;
left: 12.5rem;
color: #eaf12a;
}
.pres6 {
top: 2.35rem;
left: 6.8rem;
color: #eaf12a;
}
.pres7 {
top: 3.9rem;
left: 6.8rem;
color: #eaf12a;
}
.pres8 {
top: 7.5rem;
left: 2.8rem;
color: #eaf12a;
}
.pres9 {
top: 7.5rem;
left: 1.2rem;
color: #eaf12a;
}
.pres10 {
top: 4.92rem;
left: 2.8rem;
color: #eaf12a;
}
.pres11 {
top: 4.9rem;
left: 1.15rem;
color: #eaf12a;
}
.pres12 {
top: 8rem;
left: 12.75rem;
color: #eaf12a;
}
.tem1 {
top: 2.33rem;
left: 10.4rem;
color: #ef4317;
}
.tem2 {
top: 3.97rem;
left: 10.4rem;
color: #ef4317;
}
.tem3 {
top: 5.27rem;
left: 10.6rem;
color: #ef4317;
}
.tem4 {
top: 5.5rem;
left: 12.5rem;
color: #16cb64;
}
.tem5 {
top: 7.49rem;
left: 3.55rem;
color: #ef4317;
}
.tem6 {
top: 8.78rem;
left: 13.25rem;
color: #16cb64;
}
.tem7 {
top: 7.98rem;
left: 13.55rem;
color: #ef4317;
}
.intem1 {
top: 0.25rem;
left: 7.2rem;
color: #ef4317;
}
.outtem1 {
top: 1.55rem;
left: 7.2rem;
color: #16cb64;
}
.nowhot1 {
top: 1rem;
left: 7.2rem;
color: #ffffff;
}
.intem2 {
top: 3.25rem;
left: 6.1rem;
color: #16cb64;
}
.outtem2 {
top: 2.35rem;
left: 6.1rem;
color: #ef4317;
}
.nowhot2 {
top: 2.85rem;
left: 6.1rem;
color: #ffffff;
}
.intem3 {
top: 4.7rem;
left: 6.1rem;
color: #16cb64;
}
.outtem3 {
top: 3.9rem;
left: 6.1rem;
color: #ef4317;
}
.nowhot3 {
top: 4.3rem;
left: 6.1rem;
color: #ffffff;
}
.intem4 {
top: 5.3rem;
left: 3rem;
color: #16cb64;
}
.outtem4 {
top: 5.3rem;
left: 1.2rem;
color: #ef4317;
}
.nowhot4 {
top: 5.33rem;
left: 2.05rem;
color: #ffffff;
}
.intem5 {
top: 7.7rem;
left: 12.75rem;
color: #16cb64;
}
.outtem5 {
top: 7.7rem;
left: 11.2rem;
color: #ef4317;
}
.nowhot5 {
top: 7.7rem;
left: 11.9rem;
color: #ffffff;
}
.intem6 {
top: 8.8rem;
left: 10.5rem;
color: #16cb64;
}
.outtem6 {
top: 8rem;
left: 10.5rem;
color: #ef4317;
}
.nowhot6 {
top: 8.4rem;
left: 10.5rem;
color: #ffffff;
}
.intem7 {
top: 6rem;
left: 13.5rem;
color: #16cb64;
}
.outtem7 {
top: 6rem;
left: 15.1rem;
color: #ef4317;
}
.nowhot7 {
top: 6rem;
left: 14.15rem;
color: #ffffff;
}
.valve1 {
top: 5.57rem;
left: 10.6rem;
color: #ffffff;
cursor: pointer;
}
.valve2 {
top: 5.37rem;
left: 4.9rem;
color: #ffffff;
cursor: pointer;
}
.click1 {
width: 0.8rem;
height: 0.8rem;
top: 5rem;
left: 11.32rem;
// background: #eaf12a;
cursor: pointer;
z-index: 999;
}
.click2 {
width: 0.8rem;
height: 0.8rem;
top: 4.9rem;
left: 3.95rem;
// background: #eaf12a;
cursor: pointer;
z-index: 999;
}
.p0 {
top: 1.35rem;
left: 8.3rem;
color: #ffffff;
}
.p1 {
top: 2.15rem;
left: 9.75rem;
color: #ffffff;
}
.p2 {
top: 3.75rem;
left: 9.75rem;
color: #ffffff;
}
.p3 {
top: 5rem;
left: 10.15rem;
color: #ffffff;
}
.p4 {
top: 5.12rem;
left: 13.25rem;
color: #ffffff;
}
.p5 {
top: 2.67rem;
left: 12.7rem;
color: #ffffff;
}
.p6 {
top: 2.15rem;
left: 6.9rem;
color: #ffffff;
}
.p7 {
top: 3.68rem;
left: 6.9rem;
color: #ffffff;
}
.p8 {
top: 7.72rem;
left: 2.9rem;
color: #ffffff;
}
.p9 {
top: 7.72rem;
left: 1.3rem;
color: #ffffff;
}
.p10 {
top: 4.93rem;
left: 3.55rem;
color: #ffffff;
}
.p11 {
top: 4.9rem;
left: 0.7rem;
color: #ffffff;
}
.p12 {
top: 8.34rem;
left: 12.9rem;
color: #ffffff;
}
.t1 {
top: 2.15rem;
left: 10.45rem;
color: #ffffff;
}
.t2 {
top: 3.75rem;
left: 10.45rem;
color: #ffffff;
}
.t3 {
top: 5.3rem;
left: 10.15rem;
color: #ffffff;
}
.t4 {
top: 5.53rem;
left: 13.25rem;
color: #ffffff;
}
.t5 {
top: 7.72rem;
left: 3.65rem;
color: #ffffff;
}
.t6 {
top: 8.82rem;
left: 12.9rem;
color: #ffffff;
}
.t7 {
top: 8.34rem;
left: 13.7rem;
color: #ffffff;
}
.h1 {
top: 1rem;
left: 6.2rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h2 {
top: 3.15rem;
left: 5.2rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h3 {
top: 4.25rem;
left: 5.2rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h4 {
top: 5.0rem;
left: 2rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h5 {
top: 7.9rem;
left: 11.82rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h6 {
top: 8.35rem;
left: 9.55rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
.h7 {
top: 5.5rem;
left: 14.15rem;
color: #cecece;
font-size: 0.16rem;
padding: 0.06rem;
border: 0.01rem dashed #646866;
}
}
}
</style>