From 01b9e7244825cac11146e3961cafa6525dad56f1 Mon Sep 17 00:00:00 2001 From: web <candymxq888@outlook.com> Date: 星期五, 25 四月 2025 17:24:33 +0800 Subject: [PATCH] fix:水温监控添加定时器 --- src/views/screen/temperature/monitor/index.vue | 157 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 103 insertions(+), 54 deletions(-) diff --git a/src/views/screen/temperature/monitor/index.vue b/src/views/screen/temperature/monitor/index.vue index aed73f9..89bec41 100644 --- a/src/views/screen/temperature/monitor/index.vue +++ b/src/views/screen/temperature/monitor/index.vue @@ -1,7 +1,7 @@ <script setup> -import {ref, onMounted} from "vue"; +import {ref, onMounted, onUnmounted} from "vue"; import {getUserType} from '@/utils/auth.js' -import {setTempMonitor} from '@/api/screen/monitor/index.js' +import {setTempMonitor, getTempMonitorConfig, editTempMonitorConfig} from '@/api/screen/monitor/index.js' import {getTemperaturePointList} from '@/api/screen/index.js' import pointApi from '@/api/facility/point.js' import {useRouter} from "vue-router"; @@ -11,15 +11,21 @@ const menuList = ref([]) const monitorList = ref([]) +const monitorConfig = ref({}) const userType = ref(getUserType()) const monitorRef = ref() const searchVal = ref('') +let timer = null; // 选择菜单 const handleSelectMenu = (id) => { - pointApi().get(id).then(res => { - monitorList.value = [res.data] - }) + clearInterval(timer) + getMonitorList(id) +} + +// 搜索 +const handleSearch = () => { + getMonitorList() } // 获取水温监控点菜单 @@ -30,13 +36,53 @@ } // 获取监控点列表 -const getMonitorList = () => { - pointApi().search({type: 1, page: 1, limit: 100, keywords: searchVal.value}).then(res => { - monitorList.value = res.data.list.filter(el => el.parentId !== 0) +const getMonitorList = (id) => { + clearInterval(timer) + const data = { + type: 1, + page: 1, + limit: 100, + keywords: searchVal.value, + pointId: id || '' + } + pointApi().search(data).then(res => { + //0-未报警, 1-下限报警, 2-上限报警 + monitorList.value = res.data.list.filter(el => el.parentId !== 0).map(item => { + return { + ...item, + errorType: Number(item.waterTemperature) < Number(item.lowWaterLevel) ? 1 : Number(item.waterTemperature) > Number(item.tallWaterLevel) ? 2 : 0 + } + }) + }) + + // 挂载定时器获取数据 + timer = setInterval(() => { + pointApi().search(data).then(res => { + monitorList.value = res.data.list.filter(el => el.parentId !== 0).map(item => { + return { + ...item, + errorType: Number(item.waterTemperature) < Number(item.lowWaterLevel) ? 1 : Number(item.waterTemperature) > Number(item.tallWaterLevel) ? 2 : 0 + } + }) + }) + }, 5000) +} + +// 获取监控点配置 +const getMonitorConfig = () => { + getTempMonitorConfig().then(res => { + monitorConfig.value = res.data }) } +// 设置监控点配置 +const setMonitorConfig = () => { + editTempMonitorConfig(monitorConfig.value).then(res => { + ElMessage.success('设置成功') + }) +} +// 监控点参数设置 const setMonitorData = (data) => { setTempMonitor(data).then(res => { if (res.code === 200) { @@ -54,6 +100,13 @@ onMounted(() => { getTempMonitor() getMonitorList() + getMonitorConfig() +}) + +onUnmounted(() => { + if(timer) { + clearInterval(timer) + } }) </script> @@ -84,7 +137,7 @@ <div class="monitor-tool"> <div class="tool-l"> <el-input v-model="searchVal" style="width: 20rem" placeholder="请输入监测点名称" clearable/> - <el-button @click="getMonitorList"> + <el-button @click="handleSearch"> <el-icon> <Search/> </el-icon> @@ -96,6 +149,21 @@ </el-icon> 新增 </el-button> + <div class="name">水位计采集间隔设置:</div> + <el-select v-model="monitorConfig.newIntervalTime"> + <el-option :value="1" label="一分钟"/> + <el-option :value="2" label="两分钟"/> + <el-option :value="5" label="五分钟"/> + <el-option :value="10" label="十分钟"/> + </el-select> + <div class="name">水位计采集及数据上报间隔设置:</div> + <el-select v-model="monitorConfig.historyIntervalTime"> + <el-option :value="1" label="一分钟"/> + <el-option :value="2" label="两分钟"/> + <el-option :value="5" label="五分钟"/> + <el-option :value="10" label="十分钟"/> + </el-select> + <el-button type="success" @click="setMonitorConfig">批量应用</el-button> </div> <div class="tool-r" @click="handleFullScreen"> <img src="@/assets/images/flow/fullscreen.png"/> @@ -142,40 +210,15 @@ <div class="name">水温下限设置:</div> <el-input v-model="item.lowWaterLevel"/> </div> - <div class="setbox"> - <div class="name">水位计采集间隔设置:</div> - <el-select v-model="item.gatherIntervalTime"> - <el-option :value="1" label="一分钟"/> - <el-option :value="2" label="两分钟"/> - <el-option :value="3" label="五分钟"/> - <el-option :value="10" label="十分钟"/> - </el-select> - </div> - <div class="setbox"> - <div class="name">记录上报间隔设置:</div> - <el-select v-model="item.historyIntervalTime"> - <el-option :value="1" label="一分钟"/> - <el-option :value="2" label="两分钟"/> - <el-option :value="3" label="五分钟"/> - <el-option :value="10" label="十分钟"/> - </el-select> - </div> - <div class="setbox"> - <div class="name">实时数据上报间隔设置:</div> - <el-select v-model="item.newIntervalTime"> - <el-option :value="1" label="一分钟"/> - <el-option :value="2" label="两分钟"/> - <el-option :value="3" label="五分钟"/> - <el-option :value="10" label="十分钟"/> - </el-select> - </div> </div> <div class="item-btn"> <el-button size="large" type="success" @click="setMonitorData(item)">应用</el-button> </div> - <!-- <div class="item-error">--> - <!-- <img src="@/assets/images/warning.png" />--> - <!-- </div>--> + <div class="item-error" v-if="[1,2].includes(item.errorType)"> + <img src="@/assets/images/warning.png" alt="" /> + <div v-if="item.errorType === 1">水温达到下限值</div> + <div v-else-if="item.errorType === 2">水温达到上限值</div> + </div> </div> </div> </div> @@ -248,7 +291,16 @@ gap: 1rem; .name { + flex-shrink: 0; font-size: 1.1rem; + color: #fff; + } + :deep(.el-input){ + flex-shrink: 0; + } + :deep(.el-select){ + width: 8rem; + flex-shrink: 0; } } @@ -297,9 +349,19 @@ width: 100%; height: 100%; background: rgba(0, 0, 0, 0.3); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; img { + width: 70%; + } + div{ width: 100%; + text-align: center; + font-size: 3rem; + color: #f65252; } } @@ -352,10 +414,11 @@ .setbox { width: 50%; - margin-top: 40px; + margin-top: 60px; padding: 0 10px; display: flex; align-items: center; + font-size: 1.5rem; .name { flex-shrink: 0; @@ -367,20 +430,6 @@ border-bottom: 1px solid #fff; box-shadow: none; border-radius: 0; - } - - :deep(.el-select__wrapper) { - background-color: transparent; - box-shadow: none; - border-radius: 0; - - .el-select__placeholder.is-transparent { - color: #FFF; - } - - .el-select__suffix .el-select__caret { - color: #fff; - } } } } -- Gitblit v1.9.3