| | |
| | | <div class="home-t"></div> |
| | | <div class="home-content"> |
| | | <div class="hc-position"> |
| | | <div class="point" v-for="item in pointList" :key="item.id" |
| | | :style="{left: `${item.left}%`, top: `${item.top}%`, backgroundImage: `url(${warnTwo})`}" |
| | | <div class="point" v-for="(item, index) in pointData" :key="index" |
| | | :style="{left: `${item.left}%`, top: `${item.top}%`, backgroundImage: `url(${getPointImg(item.facilityState)})`}" |
| | | @click.self="changeShow(index)" |
| | | > |
| | | <div class="msg-l"> |
| | | <div class="msg-l" v-if="item.showMask && item.boxType === '0'"> |
| | | <div class="msg-item"> |
| | | <span class="name">设备名称:</span> |
| | | <span class="val">{{ item.facilityName }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">设备状态:</span> |
| | | <span class="val">{{ item.status }}</span> |
| | | <span class="val">{{ item.facilityState }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">甲烷浓度:</span> |
| | | <span class="val">{{ item.jiawan }}</span> |
| | | <span class="val">{{ item.methaneValue }}%</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">室内温度:</span> |
| | | <span class="val">{{ item.temperature }}°</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">风机状态:</span> |
| | | <span class="val">{{ item.fengjiStatus }}</span> |
| | | <span class="val">{{ item.facilityFanState }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">硫化氢浓度:</span> |
| | | <span class="val">{{ item.liuhuaqin }}</span> |
| | | <span class="val">{{ item.hyrothionValue }}ppm</span> |
| | | </div> |
| | | </div> |
| | | <div class="msg-r"> |
| | | <div class="msg-r" v-if="item.showMask && item.boxType === '1'"> |
| | | <div class="msg-item"> |
| | | <span class="name">设备名称:</span> |
| | | <span class="val">{{ item.facilityName }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">设备状态:</span> |
| | | <span class="val">{{ item.status }}</span> |
| | | <span class="val">{{ item.facilityState }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">甲烷浓度:</span> |
| | | <span class="val">{{ item.jiawan }}</span> |
| | | <span class="val">{{ item.methaneValue }}%</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">室内温度:</span> |
| | | <span class="val">{{ item.temperature }}°</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">风机状态:</span> |
| | | <span class="val">{{ item.fengjiStatus }}</span> |
| | | <span class="val">{{ item.facilityFanState }}</span> |
| | | </div> |
| | | <div class="msg-item"> |
| | | <span class="name">硫化氢浓度:</span> |
| | | <span class="val">{{ item.liuhuaqin }}</span> |
| | | <span class="val">{{ item.hyrothionValue }}ppm</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="shebei item"> |
| | | <div class="item-t">辖区内设备数统计</div> |
| | | <div class="item-c"> |
| | | <div class="shebei-head"> |
| | | <div>辖区位置</div> |
| | | <div>甲烷传感器</div> |
| | | <div>硫化氢传感器</div> |
| | | <div>中端控制器</div> |
| | | <div>风机设备</div> |
| | | <div>总设备数</div> |
| | | </div> |
| | | <div class="shebei-conetnt"> |
| | | <div class="list"> |
| | | <div class="listV"> |
| | | <div>龙城大道</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | </div> |
| | | <div class="listV"> |
| | | <div>龙城大道</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | <div>5台</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-table |
| | | :data="facityData" |
| | | :header-cell-style="headerStyle" |
| | | :cell-style="rowStyle" |
| | | style="height: 100%;" |
| | | > |
| | | <el-table-column prop="pointName" label="辖区位置" align="center" /> |
| | | <el-table-column prop="methaneCount" label="甲烷传感器" align="center" /> |
| | | <el-table-column prop="hyrothionCount" label="硫化氢传感器" min-width="100" align="center" /> |
| | | <el-table-column prop="boxCount" label="终端控制器" align="center" /> |
| | | <el-table-column prop="facilityFanCount" label="风机设备" align="center" /> |
| | | <el-table-column prop="sumCount" label="总设备数" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="gongdan item"> |
| | | <div class="item-t">未处理工单统计</div> |
| | | <div class="item-c"> |
| | | <div class="gongdan-head"> |
| | | <div class="no">工单号</div> |
| | | <div class="type">工单类型</div> |
| | | <div class="time">上报时间</div> |
| | | <div class="user">上报人</div> |
| | | <div class="address">所属地址</div> |
| | | <div class="status">工单状态</div> |
| | | </div> |
| | | <div class="gongdan-content"> |
| | | <div class="list"> |
| | | <div class="listV"> |
| | | <div class="no">001</div> |
| | | <div class="type">设备维修</div> |
| | | <div class="time">2025/06/23</div> |
| | | <div class="user">监测设备终端</div> |
| | | <div class="address"> |
| | | <el-tooltip |
| | | class="box-item" |
| | | effect="dark" |
| | | content="重庆市丰都县龙城大道288号" |
| | | placement="top" |
| | | <el-table |
| | | :data="orderData" |
| | | :header-cell-style="headerStyle" |
| | | :cell-style="rowStyle" |
| | | style="height: 100%;" |
| | | > |
| | | 重庆市丰都县龙城大道288号 |
| | | </el-tooltip> |
| | | </div> |
| | | <div class="status"><el-button type="danger" size="small">未处理</el-button></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-table-column prop="code" label="工单号" align="center" /> |
| | | <el-table-column label="工单类型" align="center"> |
| | | <template #default="scope"> |
| | | <div v-if="scope.row.type === 1">设备维护</div> |
| | | <div v-else>设备维修</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTimeView" label="上报时间" align="center" min-width="100" /> |
| | | <el-table-column prop="createUserName" label="上报人" align="center" /> |
| | | <el-table-column prop="address" label="所属地址" align="center" min-width="120" /> |
| | | <el-table-column label="工单状态" align="center"> |
| | | <template #default="scope"> |
| | | <div v-if="scope.row.executeState === 100" style="color: #ccc;">未执行</div> |
| | | <div v-else style="color: #36fc0e;">已执行</div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | |
| | | <script setup> |
| | | import postImg from '@/assets/images/screen/position.png' |
| | | import warnOne from '@/assets/images/screen/warn-one.png' |
| | | import warnTwo from '@/assets/images/screen/warn-two.png' |
| | | import { onMounted, ref } from 'vue' |
| | | import { getPointFacityList, staticFacity, staticOrder } from '@/api/screen/home' |
| | | import postRun from '@/assets/images/screen/pos-run.png' |
| | | import warnStop from '@/assets/images/screen/pos-stop.png' |
| | | import warnWarn from '@/assets/images/screen/pos-warn.png' |
| | | |
| | | const pointList = ref([ |
| | | { left: 25, top: 30, status: '一级报警', jiawan: '2.4%LEL', fengjiStatus: 1, liuhuaqin: '1.9%LEL', id: 1 }, |
| | | { left: 40, top: 60, status: '一级报警', jiawan: '2.4%LEL', fengjiStatus: 1, liuhuaqin: '1.9%LEL', id: 2 }, |
| | | ]) |
| | | const headerStyle = { |
| | | "background-color": '#041025 !important' |
| | | } |
| | | const rowStyle = { |
| | | "background-color": '#081C3F !important' |
| | | } |
| | | |
| | | const pointData = ref([]) |
| | | const facityData = ref([]) |
| | | const orderData = ref([]) |
| | | |
| | | // 显示隐藏弹窗 |
| | | const changeShow = (index) => { |
| | | pointData.value[index].showMask = !pointData.value[index].showMask |
| | | } |
| | | |
| | | /* |
| | | 获取图标 |
| | | 0停止 1运行 2一级报警 3二级报警 |
| | | */ |
| | | const getPointImg = (status) => { |
| | | if(status === '运行中') { |
| | | return postRun |
| | | }else if(status === '一级报警' || status === '二级报警'){ |
| | | return warnWarn |
| | | }else{ |
| | | return warnStop |
| | | } |
| | | } |
| | | |
| | | const getPointData = () => { |
| | | getPointFacityList().then(res => { |
| | | pointData.value = res.data.map(item => { |
| | | return { |
| | | ...item, |
| | | showMask: false |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | const getFacity = () => { |
| | | staticFacity().then(res => { |
| | | facityData.value = res.data |
| | | }) |
| | | } |
| | | |
| | | const getOrder = () => { |
| | | const searchdata = { |
| | | limit: 100, |
| | | page: 1 |
| | | } |
| | | staticOrder(searchdata).then(res => { |
| | | orderData.value = res.data.list |
| | | }) |
| | | } |
| | | |
| | | |
| | | onMounted(() => { |
| | | getPointData() |
| | | getFacity() |
| | | getOrder() |
| | | }) |
| | | |
| | | </script> |
| | | |
| | |
| | | position: relative; |
| | | .point{ |
| | | position: absolute; |
| | | width: 56px; |
| | | width: 32px; |
| | | height: 80px; |
| | | background-repeat: no-repeat; |
| | | background-size: 100% 100%; |
| | |
| | | width: 250px; |
| | | height: 160px; |
| | | position: absolute; |
| | | left: -235px; |
| | | left: -245px; |
| | | top: 0; |
| | | background-image: url('@/assets/images/screen/msg-box-l.png'); |
| | | background-repeat: no-repeat; |
| | |
| | | width: 250px; |
| | | height: 160px; |
| | | position: absolute; |
| | | left: 40px; |
| | | left: 30px; |
| | | top: 0; |
| | | background-image: url('@/assets/images/screen/msg-box-r.png'); |
| | | background-repeat: no-repeat; |
| | |
| | | padding: 1rem 0.5rem; |
| | | } |
| | | } |
| | | .shebei{ |
| | | .shebei-head{ |
| | | height: 2rem; |
| | | line-height: 2rem; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 0.7rem; |
| | | >div{ |
| | | width: 16%; |
| | | flex-shrink: 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | .shebei-conetnt{ |
| | | height: calc(100% - 2rem); |
| | | .list{ |
| | | height: 100%; |
| | | overflow-y: scroll; |
| | | &::-webkit-scrollbar{ |
| | | display: none; |
| | | } |
| | | .listV{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 0.7rem; |
| | | padding: 0.5rem 0; |
| | | background-color: #081C3F; |
| | | >div{ |
| | | width: 16%; |
| | | flex-shrink: 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | } |
| | | |
| | | :deep(.el-table){ |
| | | --el-table-border-color: #000; |
| | | --el-table-bg-color: transparent; |
| | | th{ |
| | | font-size: 12px; |
| | | color: #fff; |
| | | } |
| | | tr{ |
| | | font-size: 12px; |
| | | color: #fff; |
| | | } |
| | | .gongdan{ |
| | | .gongdan-head{ |
| | | height: 2rem; |
| | | line-height: 2rem; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 0.7rem; |
| | | >div{ |
| | | flex-shrink: 0; |
| | | text-align: center; |
| | | } |
| | | .no{ |
| | | width: 8%; |
| | | } |
| | | .type{ |
| | | width: 12%; |
| | | } |
| | | .time{ |
| | | width: 15%; |
| | | } |
| | | .user{ |
| | | width: 20%; |
| | | } |
| | | .address{ |
| | | width: 30%; |
| | | } |
| | | .status{ |
| | | width: 15%; |
| | | } |
| | | } |
| | | .gongdan-content{ |
| | | .list{ |
| | | height: 100%; |
| | | overflow-y: scroll; |
| | | &::-webkit-scrollbar{ |
| | | display: none; |
| | | } |
| | | .listV{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | font-size: 0.7rem; |
| | | padding: 0.5rem 0; |
| | | background-color: #081C3F; |
| | | >div{ |
| | | flex-shrink: 0; |
| | | text-align: center; |
| | | } |
| | | .no{ |
| | | width: 8%; |
| | | } |
| | | .type{ |
| | | width: 12%; |
| | | } |
| | | .time{ |
| | | width: 15%; |
| | | } |
| | | .user{ |
| | | width: 20%; |
| | | } |
| | | .address{ |
| | | width: 30%; |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | } |
| | | .status{ |
| | | width: 15%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .el-table__cell{ |
| | | border: none; |
| | | } |
| | | } |
| | | </style> |