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
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>
|
|
|