After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 201 B |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1,467 @@ |
|||
<script setup> |
|||
import { reactive, onMounted } from "vue"; |
|||
|
|||
import { getResStatisticsViewData } from "@/api/reservoir"; |
|||
|
|||
const props = defineProps({ |
|||
resCode: { |
|||
type: String, |
|||
default: "", |
|||
}, |
|||
}); |
|||
|
|||
const pageData = reactive({ |
|||
currentWaterLevel: "0", // 当前水位 |
|||
lastYearToday: "0", // |
|||
incomingFlow: "0", // |
|||
outboundFlow: "0", // |
|||
nearlyAnHour: "0", // |
|||
nearlySixHours: "0", // |
|||
nearlyNineHours: "0", // |
|||
nearlyTwelveHours: "0", // |
|||
designLevel: "0", // 设计水位 |
|||
checkWaterLevel: "0", // 校核水位 |
|||
elevationWeirCrest: "0", // 堰顶高程 |
|||
crestElevation: "0", // 坝顶高程 |
|||
stationName: "", |
|||
stationCode: "", |
|||
}); |
|||
|
|||
const initData = () => { |
|||
getResStatisticsViewData({ |
|||
resCode: props.resCode, |
|||
// resCode: "440184000075", |
|||
}).then((res) => { |
|||
if (res) { |
|||
pageData.currentWaterLevel = res.currentWaterLevel; |
|||
pageData.lastYearToday = res.lastYearToday; |
|||
pageData.incomingFlow = res.incomingFlow; |
|||
pageData.outboundFlow = res.outboundFlow; |
|||
pageData.nearlyAnHour = res.nearlyAnHour; |
|||
pageData.nearlySixHours = res.nearlySixHours; |
|||
pageData.nearlyNineHours = res.nearlyNineHours; |
|||
pageData.nearlyTwelveHours = res.nearlyTwelveHours; |
|||
pageData.designLevel = res.designLevel; |
|||
pageData.checkWaterLevel = res.checkWaterLevel; |
|||
pageData.elevationWeirCrest = res.elevationWeirCrest; |
|||
pageData.crestElevation = res.crestElevation; |
|||
pageData.stationName = res.stationName; |
|||
pageData.stationCode = res.stationCode; |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
onMounted(() => { |
|||
initData(); |
|||
}); |
|||
</script> |
|||
<template> |
|||
<div class="overview-page"> |
|||
<div class="flex-box"> |
|||
<div class="part-content"> |
|||
<div |
|||
style=" |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
margin-bottom: 12px; |
|||
" |
|||
> |
|||
<div class="title" style="margin-bottom: 0px">水情信息</div> |
|||
<div class="station"> |
|||
{{ pageData.stationName }} ({{ pageData.stationCode }}) |
|||
</div> |
|||
</div> |
|||
<div class="attr-list"> |
|||
<div |
|||
class="attr-box" |
|||
:class="{ |
|||
'attr-box-warn': |
|||
Number(pageData.currentWaterLevel) > |
|||
Number(pageData.designLevel), |
|||
}" |
|||
> |
|||
<img |
|||
v-if=" |
|||
Number(pageData.currentWaterLevel) > |
|||
Number(pageData.designLevel) |
|||
" |
|||
class="icon" |
|||
src="../../../../assets/img/res/water_current_warn.png" |
|||
alt="" |
|||
/> |
|||
<img |
|||
v-else |
|||
class="icon" |
|||
src="../../../../assets/img/res/water_current.png" |
|||
alt="" |
|||
/> |
|||
|
|||
<div class=""> |
|||
<div class="attr-text">当前水位(m)</div> |
|||
<div class="attr-value">{{ pageData.currentWaterLevel }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/water_last_year_current.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">去年今日(m)</div> |
|||
<div class="attr-value">{{ pageData.lastYearToday }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/water_inflow.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">入库流量(L/s)</div> |
|||
<div class="attr-value">{{ pageData.incomingFlow }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/water_outflow.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">出库流量(L/s)</div> |
|||
<div class="attr-value">{{ pageData.outboundFlow }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="part-content ml-64px"> |
|||
<div class="title">水情信息</div> |
|||
<div class="attr-list"> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/rain_1_hour.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">近1小时(mm)</div> |
|||
<div class="attr-value">{{ pageData.nearlyAnHour }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/rain_6_hour.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">近6小时(mm)</div> |
|||
<div class="attr-value">{{ pageData.nearlySixHours }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/rain_9_hour.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">近9小时(mm)</div> |
|||
<div class="attr-value">{{ pageData.nearlyNineHours }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="attr-box"> |
|||
<img |
|||
class="icon" |
|||
src="../../../../assets/img/res/rain_12_hour.png" |
|||
alt="" |
|||
/> |
|||
<div class=""> |
|||
<div class="attr-text">近12小时(mm)</div> |
|||
<div class="attr-value">{{ pageData.nearlyTwelveHours }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div> |
|||
<div class="title">场景可视化</div> |
|||
<div class="res-box"> |
|||
<div class="dike-max-height"> |
|||
坝顶高程:{{ pageData.crestElevation }}m |
|||
</div> |
|||
<div class="marker-line"></div> |
|||
<div |
|||
class="marker-water" |
|||
:style="{ |
|||
height: |
|||
Number(pageData.crestElevation) > 0 |
|||
? 280 * |
|||
(Number(pageData.currentWaterLevel) / |
|||
Number(pageData.crestElevation)) + |
|||
20 + |
|||
'px' |
|||
: '20px', |
|||
}" |
|||
> |
|||
<div class="current-water-level"> |
|||
<img |
|||
class="arrow" |
|||
src="../../../../assets/img/res/marker_arrow.png" |
|||
alt="" |
|||
/> |
|||
<span>当前水位{{ pageData.currentWaterLevel }}m</span> |
|||
</div> |
|||
</div> |
|||
<div |
|||
class="weir-max-height" |
|||
:style="{ |
|||
bottom: |
|||
Number(pageData.crestElevation) > 0 |
|||
? 280 * |
|||
(Number(pageData.elevationWeirCrest) / |
|||
Number(pageData.crestElevation)) + |
|||
20 + |
|||
'px' |
|||
: '20px', |
|||
}" |
|||
> |
|||
<img |
|||
class="arrow" |
|||
src="../../../../assets/img/res/marker_arrow.png" |
|||
alt="" |
|||
/> |
|||
<span>堰顶高程{{ pageData.elevationWeirCrest }}m</span> |
|||
</div> |
|||
<div |
|||
class="design-water-level" |
|||
:style="{ |
|||
bottom: |
|||
Number(pageData.crestElevation) > 0 |
|||
? 280 * |
|||
(Number(pageData.designLevel) / |
|||
Number(pageData.crestElevation)) + |
|||
20 + |
|||
'px' |
|||
: '20px', |
|||
}" |
|||
> |
|||
<img |
|||
class="arrow" |
|||
src="../../../../assets/img/res/marker_arrow.png" |
|||
alt="" |
|||
/> |
|||
<span>设计水位{{ pageData.designLevel }}m</span> |
|||
</div> |
|||
<div |
|||
class="check-water-level" |
|||
:style="{ |
|||
bottom: |
|||
Number(pageData.crestElevation) > 0 |
|||
? 280 * |
|||
(Number(pageData.checkWaterLevel) / |
|||
Number(pageData.crestElevation)) + |
|||
20 + |
|||
'px' |
|||
: '20px', |
|||
}" |
|||
> |
|||
<img |
|||
class="arrow" |
|||
src="../../../../assets/img/res/marker_arrow.png" |
|||
alt="" |
|||
/> |
|||
<span>校核水位{{ pageData.checkWaterLevel }}m</span> |
|||
</div> |
|||
|
|||
<!-- 坝背景图 --> |
|||
<img |
|||
class="dike-border" |
|||
src="../../../../assets/img/dike_border.png" |
|||
alt="" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<style scoped lang="scss"> |
|||
.overview-page { |
|||
padding: 12px; |
|||
.part-content { |
|||
.attr-list { |
|||
width: 472px; |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
} |
|||
.station { |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
color: #fff; |
|||
padding: 3px 12px; |
|||
background: rgba(54, 178, 158, 1); |
|||
} |
|||
.attr-box { |
|||
display: flex; |
|||
width: 230px; |
|||
border: 2px solid rgba(54, 178, 158, 0.6); |
|||
padding: 16px; |
|||
background: rgba(54, 178, 158, 0.1); |
|||
margin-bottom: 12px; |
|||
&:nth-child(2n) { |
|||
margin-left: 12px; |
|||
} |
|||
.icon { |
|||
width: 64px; |
|||
height: 64px; |
|||
margin-right: 16px; |
|||
} |
|||
|
|||
.attr-text { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.6); |
|||
} |
|||
.attr-value { |
|||
font-size: 32px; |
|||
font-weight: 700; |
|||
color: rgba(54, 178, 158, 1); |
|||
} |
|||
} |
|||
.attr-box-warn { |
|||
border-color: rgba(250, 173, 16, 1); |
|||
background: rgba(250, 173, 16, 0.1); |
|||
.attr-value { |
|||
color: rgba(255, 154, 35, 1); |
|||
} |
|||
} |
|||
} |
|||
|
|||
.title { |
|||
color: rgba(0, 0, 0, 0.9); |
|||
padding-left: 10px; |
|||
font-size: 14px; |
|||
font-weight: 500; |
|||
position: relative; |
|||
margin-bottom: 12px; |
|||
&::before { |
|||
content: " "; |
|||
width: 4px; |
|||
height: 4px; |
|||
background: #36b29e; |
|||
position: absolute; |
|||
left: 1px; |
|||
top: 50%; |
|||
margin-top: -2px; |
|||
transform: rotate(45deg); |
|||
} |
|||
} |
|||
|
|||
.res-box { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 378px; |
|||
color: rgba(0, 0, 0, 0.6); |
|||
background: #d9ecff; |
|||
overflow: hidden; |
|||
&::after { |
|||
content: " "; |
|||
background: linear-gradient(0deg, #5f2914 22%, #c2841a 100%); |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0; |
|||
z-index: 3; |
|||
height: 20px; |
|||
width: 100%; |
|||
} |
|||
|
|||
.marker-line { |
|||
z-index: 1; |
|||
position: absolute; |
|||
left: 50%; |
|||
bottom: 0; |
|||
height: 280px; |
|||
width: 16px; |
|||
background: url("../../../../assets/img/res/marker_line.png") no-repeat |
|||
center center; |
|||
background-size: contain; |
|||
} |
|||
|
|||
.weir-max-height { |
|||
position: absolute; |
|||
z-index: 1; |
|||
width: 50%; |
|||
left: 0; |
|||
bottom: 200px; |
|||
text-align: center; |
|||
border-bottom: 1px dashed #3a89fe; |
|||
} |
|||
.design-water-level { |
|||
position: absolute; |
|||
z-index: 1; |
|||
width: 50%; |
|||
right: -2px; |
|||
bottom: 240px; |
|||
text-align: left; |
|||
border-bottom: 1px dashed #3a89fe; |
|||
padding-left: 30px; |
|||
} |
|||
.check-water-level { |
|||
position: absolute; |
|||
z-index: 1; |
|||
width: 50%; |
|||
right: -2px; |
|||
bottom: 260px; |
|||
text-align: center; |
|||
border-bottom: 1px dashed #3a89fe; |
|||
} |
|||
|
|||
.marker-water { |
|||
width: 100%; |
|||
position: absolute; |
|||
z-index: 2; |
|||
bottom: 0; |
|||
height: 50px; |
|||
border-top: 2px solid #03d0df; |
|||
background: linear-gradient( |
|||
180deg, |
|||
rgba(0, 219, 227, 0.38) 0%, |
|||
rgba(0, 219, 227, 0) 100% |
|||
); |
|||
|
|||
.current-water-level { |
|||
position: absolute; |
|||
left: 0; |
|||
top: -20px; |
|||
font-size: 14px; |
|||
z-index: 1; |
|||
} |
|||
} |
|||
|
|||
.dike-max-height { |
|||
position: absolute; |
|||
right: 36px; |
|||
bottom: 300px; |
|||
z-index: 1; |
|||
} |
|||
|
|||
.dike-border { |
|||
position: absolute; |
|||
right: 0; |
|||
bottom: 0; |
|||
z-index: 3; |
|||
height: 280px; |
|||
} |
|||
} |
|||
|
|||
.flex-box { |
|||
display: flex; |
|||
} |
|||
|
|||
.ml-64px { |
|||
margin-left: 64px; |
|||
} |
|||
} |
|||
</style> |