|
@@ -1,46 +1,38 @@
|
|
|
<template>
|
|
|
- <div class="title">水库监测</div>
|
|
|
- <div style="margin-top: 20px">更新时间:{{ ReservoirMonitorData.time }}</div>
|
|
|
- <div class="flex" style="margin-top: 20px">
|
|
|
- <div style="margin-right: 20px">
|
|
|
- <div>超警戒</div>
|
|
|
- {{ ReservoirMonitorData.statusList[0] ? ReservoirMonitorData.statusList[0]?.value : '-' }}
|
|
|
+ <div class="gradient-text title">水库监测</div>
|
|
|
+ <div class="flex-box">
|
|
|
+ <div class="data-box1">
|
|
|
+ <div class="box-text1">漫坝</div>
|
|
|
+ <div class="box-text2">{{ validateNum(reservoirMonitorData.statusList[0]?.value) }}</div>
|
|
|
</div>
|
|
|
- <div style="margin-right: 20px">
|
|
|
- <div>超保证</div>
|
|
|
- {{ ReservoirMonitorData.statusList[1] ? ReservoirMonitorData.statusList[1]?.value : '-' }}
|
|
|
+ <div class="data-box2">
|
|
|
+ <div class="box-text1">超保证</div>
|
|
|
+ <div class="box-text2">{{ validateNum(reservoirMonitorData.statusList[1]?.value) }}</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <div>漫坝</div>
|
|
|
- {{ ReservoirMonitorData.statusList[2] ? ReservoirMonitorData.statusList[2]?.value : '-' }}
|
|
|
+ <div class="data-box3">
|
|
|
+ <div class="box-text1">超警戒</div>
|
|
|
+ <div class="box-text2">{{ validateNum(reservoirMonitorData.statusList[2]?.value) }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <el-table :data="ReservoirMonitorData.listData" border style="width: 100%">
|
|
|
- <el-table-column prop="name" label="名称" show-overflow-tooltip align="center">
|
|
|
- <template #default="scope">
|
|
|
- <div style="color: #409eff; cursor: pointer" @click="handleShowDialog(scope.row)">
|
|
|
- {{ scope.row.name }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="area" show-overflow-tooltip align="center">
|
|
|
- <template #header>
|
|
|
- <el-select v-model="queryParams.area" placeholder="所属区县" size="large" clearable @change="initData">
|
|
|
- <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="floodLimit" label="汛限水位(m)" show-overflow-tooltip sortable align="center" />
|
|
|
- <el-table-column prop="level" label="当前水位(m)" show-overflow-tooltip sortable align="center" />
|
|
|
- <el-table-column prop="waterDiff" label="差值" show-overflow-tooltip sortable align="center" />
|
|
|
- </el-table>
|
|
|
- <pagination
|
|
|
- v-show="total > queryParams.size"
|
|
|
- v-model:page="queryParams.current"
|
|
|
- v-model:limit="queryParams.size"
|
|
|
- :total="total"
|
|
|
- @pagination="initData"
|
|
|
- />
|
|
|
+ <div class="custom-table">
|
|
|
+ <div class="th">
|
|
|
+ <div class="td">名称</div>
|
|
|
+ <div class="td">所属区县</div>
|
|
|
+ <div class="td">汛限水位(m)</div>
|
|
|
+ <div class="td">当前水位(m)</div>
|
|
|
+ <div class="td">差值</div>
|
|
|
+ </div>
|
|
|
+ <div class="table-content">
|
|
|
+ <div v-for="(item, index) in reservoirMonitorData.listData" :key="index" class="tr" @click="handleShowDialog(item)">
|
|
|
+ <div class="td">{{ item.name }}</div>
|
|
|
+ <div class="td">{{ item.area }}</div>
|
|
|
+ <div class="td td-text">{{ item.warningLevel }}</div>
|
|
|
+ <div class="td td-text">{{ item.waterLevel }}</div>
|
|
|
+ <div :class="item.warningLevel > item.waterLevel ? 'td td-text text-green' : 'td td-text text-danger'">{{ item.waterDiff }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
<Dialog v-model="showDialog" title="水库监测" width="2500px" height="1200px">
|
|
|
<div class="flex">
|
|
|
<div class="detail-container">
|
|
@@ -102,10 +94,10 @@
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup name="ReservoirMonitor">
|
|
|
-import Dialog from '@/components/Dialog/index.vue';
|
|
|
+import Dialog from './Dialog.vue';
|
|
|
import { option3 } from './echartOptions';
|
|
|
import { getReservoirCourseLevel, getReservoirList, getReservoirWaterStatus } from '@/api/globalMap/reservoirMonitor';
|
|
|
-import { parseTime } from '@/utils/ruoyi';
|
|
|
+import { parseTime, validateNum } from '@/utils/ruoyi';
|
|
|
import { getVideoInfo } from '@/api/globalMap';
|
|
|
import { deepClone } from '@/utils';
|
|
|
|
|
@@ -140,7 +132,7 @@ const queryParams = reactive({
|
|
|
// 总数量
|
|
|
let total = ref(0);
|
|
|
// 数据
|
|
|
-const ReservoirMonitorData = reactive({
|
|
|
+const reservoirMonitorData = reactive({
|
|
|
time: '',
|
|
|
statusList: [],
|
|
|
listData: []
|
|
@@ -154,10 +146,10 @@ const initData = async () => {
|
|
|
delete newQueryParams.area;
|
|
|
getReservoirList(newQueryParams).then((res) => {
|
|
|
total.value = res.total;
|
|
|
- ReservoirMonitorData.listData = res.rows;
|
|
|
+ reservoirMonitorData.listData = res.rows;
|
|
|
});
|
|
|
getReservoirWaterStatus().then((res) => {
|
|
|
- ReservoirMonitorData.statusList = res.rows || [];
|
|
|
+ reservoirMonitorData.statusList = res.rows || [];
|
|
|
});
|
|
|
};
|
|
|
|
|
@@ -232,19 +224,58 @@ const getVideoList = () => {
|
|
|
<style lang="scss" scoped>
|
|
|
.detail-container {
|
|
|
font-size: 36px;
|
|
|
- width: 1000px;
|
|
|
.dialog-content {
|
|
|
display: flex;
|
|
|
}
|
|
|
.info-box {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: center;
|
|
|
- height: 520px;
|
|
|
- background-color: #d7d7d7;
|
|
|
- padding: 10px;
|
|
|
+ width: 834px;
|
|
|
+ height: 459px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/box2.png') no-repeat;
|
|
|
+ padding: 11px;
|
|
|
+ .info-header {
|
|
|
+ width: 311px;
|
|
|
+ height: 56px;
|
|
|
+ padding-left: 50px;
|
|
|
+ background: url(@/assets/images/map/rightMenu/titleBox1.png) no-repeat;
|
|
|
+ }
|
|
|
+ .info-content {
|
|
|
+ padding: 0 37px 26px 37px;
|
|
|
+ font-size: 32px;
|
|
|
+ color: #a8ccde;
|
|
|
+ }
|
|
|
.info-item {
|
|
|
display: flex;
|
|
|
+ align-items: center;
|
|
|
+ height: 72px;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .box1 {
|
|
|
+ width: 776px;
|
|
|
+ height: 459px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ margin-left: 94px;
|
|
|
+ margin-right: 110px;
|
|
|
+ .box1-title {
|
|
|
+ width: 372px;
|
|
|
+ height: 54px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/titleBox2.png');
|
|
|
+ padding-left: 65px;
|
|
|
+ font-size: 44px;
|
|
|
+ color: #f4f7fa;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .box2 {
|
|
|
+ margin-top: 45px;
|
|
|
+ .box2-title {
|
|
|
+ height: 54px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/titleBox2.png') no-repeat;
|
|
|
+ padding-left: 65px;
|
|
|
+ font-size: 44px;
|
|
|
+ color: #f4f7fa;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -252,9 +283,20 @@ const getVideoList = () => {
|
|
|
flex: 1;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
- background-color: #d7d7d7;
|
|
|
- padding: 10px;
|
|
|
height: 1009px;
|
|
|
+ .flex-box2 {
|
|
|
+ height: 54px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/titleBox2.png') no-repeat;
|
|
|
+ padding-left: 65px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ .title2 {
|
|
|
+ font-size: 44px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin-right: 30px;
|
|
|
+ color: #f4f7fa;
|
|
|
+ }
|
|
|
+ }
|
|
|
.video-box {
|
|
|
margin-top: 30px;
|
|
|
height: 900px;
|
|
@@ -263,67 +305,133 @@ const getVideoList = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.table-wrap {
|
|
|
- height: 400px;
|
|
|
- // margin-top: 10px;
|
|
|
- font-size: 28px;
|
|
|
- background-color: #102043;
|
|
|
- color: #fff;
|
|
|
- .table-title {
|
|
|
- height: 70px;
|
|
|
+.title {
|
|
|
+ font-size: 60px;
|
|
|
+ position: absolute;
|
|
|
+ top: 12px;
|
|
|
+ left: 210px;
|
|
|
+}
|
|
|
+
|
|
|
+.flex-box {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 100%;
|
|
|
+ .data-box1,
|
|
|
+ .data-box2,
|
|
|
+ .data-box3 {
|
|
|
+ width: 462px;
|
|
|
+ height: 144px;
|
|
|
+ position: relative;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- border-bottom: 2px solid #465979;
|
|
|
- .title-item {
|
|
|
- width: 195px;
|
|
|
- text-align: center;
|
|
|
- color: #4c97f6;
|
|
|
+ margin-right: 20px;
|
|
|
+ &:last-child {
|
|
|
+ margin-right: 0;
|
|
|
}
|
|
|
- }
|
|
|
- .content-wrap {
|
|
|
- height: 92%;
|
|
|
- overflow-y: auto;
|
|
|
- .content-item {
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- align-items: center;
|
|
|
- height: 70px;
|
|
|
- font-size: 28px;
|
|
|
- margin-bottom: 8.5px;
|
|
|
- background: #0b2b5a;
|
|
|
- > div {
|
|
|
- width: 200px;
|
|
|
- text-align: center;
|
|
|
+ .box-text1 {
|
|
|
+ color: #fff;
|
|
|
+ font-size: 36px;
|
|
|
+ padding-left: 190px;
|
|
|
+ min-width: 100px;
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ width: 1px;
|
|
|
+ height: 48px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/line.png');
|
|
|
+ margin: 0 30px;
|
|
|
}
|
|
|
- // .time {
|
|
|
- // width: 120px;
|
|
|
- // }
|
|
|
- // .value {
|
|
|
- // width: 120px;
|
|
|
- // }
|
|
|
- // .value1 {
|
|
|
- // width: 120px;
|
|
|
- // }
|
|
|
- // .value2 {
|
|
|
- // width: 120px;
|
|
|
- // }
|
|
|
- // .waterunit {
|
|
|
- // width: 120px;
|
|
|
- // }
|
|
|
}
|
|
|
- //.content-item:nth-child(2n) {
|
|
|
- // background: rgba(11, 43, 90, 0.2);
|
|
|
- //}
|
|
|
+ .box-text2 {
|
|
|
+ /* 设置字体透明 */
|
|
|
+ color: transparent;
|
|
|
+ /* 设置线性渐变,从红色渐变到蓝色 */
|
|
|
+ background-image: linear-gradient(to bottom, #ffffff 50%, #3075d3 100%);
|
|
|
+ /* 使用 -webkit-background-clip 属性将背景剪裁至文本形状 */
|
|
|
+ -webkit-background-clip: text;
|
|
|
+ /* 非Webkit内核浏览器需要使用标准前缀 */
|
|
|
+ background-clip: text;
|
|
|
+ /* 把当前元素设置为行内块,以便能够应用背景 */
|
|
|
+ display: inline-block;
|
|
|
+ font-family: 'YouSheBiaoTiHei';
|
|
|
+ font-size: 40px;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-.text-green {
|
|
|
- color: #67c23a;
|
|
|
+ .data-box1 {
|
|
|
+ background: url('@/assets/images/map/rightMenu/dataBox1.png') no-repeat;
|
|
|
+ }
|
|
|
+ .data-box2 {
|
|
|
+ background: url('@/assets/images/map/rightMenu/dataBox2.png') no-repeat;
|
|
|
+ }
|
|
|
+ .data-box3 {
|
|
|
+ background: url('@/assets/images/map/rightMenu/dataBox3.png') no-repeat;
|
|
|
+ }
|
|
|
}
|
|
|
-.text-warning {
|
|
|
- color: #e6a23c;
|
|
|
+
|
|
|
+.custom-table {
|
|
|
+ width: 100%;
|
|
|
+ .table-content {
|
|
|
+ height: 880px;
|
|
|
+ overflow-y: auto;
|
|
|
+ overflow-x: hidden;
|
|
|
+ }
|
|
|
+ .th {
|
|
|
+ width: 1499px;
|
|
|
+ height: 151px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/th.png') no-repeat;
|
|
|
+ display: flex;
|
|
|
+ }
|
|
|
+ .tr {
|
|
|
+ width: 1499px;
|
|
|
+ height: 139px;
|
|
|
+ background: url('@/assets/images/map/rightMenu/td.png') no-repeat;
|
|
|
+ //margin-left: -23px;
|
|
|
+ display: flex;
|
|
|
+ padding-right: 20px;
|
|
|
+ &:hover {
|
|
|
+ background: url('@/assets/images/map/rightMenu/td_checked.png') no-repeat;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .td {
|
|
|
+ flex: 1;
|
|
|
+ color: #edfaff;
|
|
|
+ font-size: 38px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ .td-text {
|
|
|
+ /* 设置字体透明 */
|
|
|
+ color: transparent;
|
|
|
+ /* 使用 -webkit-background-clip 属性将背景剪裁至文本形状 */
|
|
|
+ -webkit-background-clip: text;
|
|
|
+ /* 非Webkit内核浏览器需要使用标准前缀 */
|
|
|
+ background-clip: text;
|
|
|
+ font-family: 'YouSheBiaoTiHei';
|
|
|
+ /* 设置线性渐变,从红色渐变到蓝色 */
|
|
|
+ background-image: linear-gradient(to bottom, #ffffff 50%, #3075d3 100%);
|
|
|
+ font-size: 48px;
|
|
|
+ }
|
|
|
+ .text-green {
|
|
|
+ background-image: linear-gradient(to bottom, #ffffff 50%, #40c75f 100%);
|
|
|
+ }
|
|
|
+ .text-danger {
|
|
|
+ background-image: linear-gradient(to bottom, #ffffff 50%, #ff2f3c 100%);
|
|
|
+ }
|
|
|
}
|
|
|
-.text-danger {
|
|
|
- color: #f56c6c;
|
|
|
+
|
|
|
+.custom-select {
|
|
|
+ width: 148px;
|
|
|
+ height: 38px;
|
|
|
+ line-height: 38px;
|
|
|
+ :deep(.el-select__wrapper) {
|
|
|
+ background-color: #081b41;
|
|
|
+ box-shadow: 0 0 0 1px #126cf7 inset;
|
|
|
+ }
|
|
|
+ :deep(.el-select__placeholder) {
|
|
|
+ font-size: 30px;
|
|
|
+ color: #eaf3fc;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|