| | |
| | | <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"; |
| | |
| | | |
| | | 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() |
| | | } |
| | | |
| | | // 获取水温监控点菜单 |
| | |
| | | } |
| | | |
| | | // 获取监控点列表 |
| | | 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) { |
| | |
| | | onMounted(() => { |
| | | getTempMonitor() |
| | | getMonitorList() |
| | | getMonitorConfig() |
| | | }) |
| | | |
| | | onUnmounted(() => { |
| | | if(timer) { |
| | | clearInterval(timer) |
| | | } |
| | | }) |
| | | |
| | | </script> |
| | |
| | | <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> |
| | |
| | | </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"/> |
| | |
| | | <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> |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | .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; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |