<template>
|
<div class="home">
|
<div class="home-bg"></div>
|
<div class="home-c">
|
<div class="point" v-for="(item, index) in monitorList" :key="index"
|
:style="{left: item.left, top: item.top}">
|
<div class="point-address" @click="handleShow(index)"></div>
|
<div class="point-message" v-show="item.showMsg">
|
<div class="msg-box">
|
<div class="msg-t">{{ item.pointName }}</div>
|
<div class="num">
|
<div class="item">
|
<div class="item-t">水温:</div>
|
<div class="item-num"><span>{{ item?.dataList?.find(f => f.code === selectDeep[index]).value }}</span>°C</div>
|
</div>
|
<div class="item">
|
<div class="item-t">水位:</div>
|
<div class="item-num">
|
<el-select
|
v-model="selectDeep[index]"
|
class="val-select"
|
placeholder="Select"
|
style="width: 10rem"
|
>
|
<el-option
|
v-for="item in item?.dataList"
|
:key="item.code"
|
:label='item.code'
|
:value="item.code"
|
/>
|
</el-select>
|
m
|
</div>
|
</div>
|
</div>
|
<div class="shebei">
|
监测设备:
|
<span v-if="item.isOnline === 1">设备运作正常</span>
|
<span v-else style="color: red">设备运作异常</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
|
<script setup>
|
import pointApi from '@/api/facility/point.js'
|
import {ref, onMounted} from "vue";
|
|
const monitorList = ref([])
|
const selectDeep = ref([])
|
|
// 标点配置
|
const config = [
|
{left: '15%', top: '53%', showMsg: false},
|
{left: '12%', top: '68%', showMsg: false},
|
]
|
|
// 获取监控点列表
|
const getMonitorList = () => {
|
pointApi().search({type: 1, page: 1, limit: 3}).then(res => {
|
let data = res.data.list.filter(el => el.parentId !== 0)
|
if (data.length > 2) data = data.splice(0, 1)
|
monitorList.value = data.map((item, index) => {
|
selectDeep.value[index] = item?.dataList[0].code
|
return {
|
...item,
|
...config[index]
|
}
|
})
|
})
|
}
|
|
const handleShow = (index) => {
|
monitorList.value[index].showMsg = !monitorList.value[index].showMsg;
|
}
|
|
onMounted(() => {
|
getMonitorList()
|
})
|
</script>
|
|
|
<style scoped lang="scss">
|
.home {
|
height: 100%;
|
|
.home-bg {
|
position: absolute;
|
left: 0;
|
top: 0;
|
width: 100%;
|
height: 100%;
|
background: url("@/assets/images/tempture-bg.png") no-repeat;
|
background-size: 100% 100%;
|
z-index: 11;
|
}
|
|
.home-c {
|
width: 100%;
|
height: 100%;
|
position: relative;
|
z-index: 20;
|
|
.point {
|
position: absolute;
|
|
.point-address {
|
width: 35px;
|
height: 40px;
|
background: url("@/assets/images/point.png") no-repeat;
|
background-size: 100% 100%;
|
}
|
|
.point-message {
|
width: 500px;
|
height: 180px;
|
background: url("@/assets/images/messageInfo-right.png") no-repeat;
|
background-size: 100% 100%;
|
position: absolute;
|
left: 30px;
|
top: -60px;
|
padding: 30px 50px;
|
color: #fff;
|
|
.msg-box {
|
width: 100%;
|
height: 100%;
|
display: flex;
|
flex-direction: column;
|
justify-content: space-between;
|
}
|
|
.msg-t {
|
font-size: 26px;
|
font-weight: bold;
|
}
|
|
.num {
|
display: flex;
|
align-items: center;
|
gap: 30px;
|
|
.item {
|
display: flex;
|
align-items: center;
|
|
span {
|
display: inline-block;
|
padding: 0 20px;
|
font-size: 22px;
|
font-weight: bold;
|
}
|
.val-select{
|
padding: 0 20px;
|
:deep(.el-select__wrapper){
|
background-color: transparent;
|
box-shadow: 0 0 0 1px #fff inset;
|
font-size: 20px;
|
.el-select__caret{
|
color: #fff;
|
}
|
.el-select__placeholder{
|
color: #fff;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
</style>
|