|
@@ -63,9 +63,26 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
+ <div class="data-card mt-20">
|
|
|
|
|
+ <div class="card-header" @click="toggleRainfallProcess">
|
|
|
|
|
+ <h3 class="card-title">雨量过程线</h3>
|
|
|
|
|
+ <div class="header-actions">
|
|
|
|
|
+ <span class="toggle-btn">{{ rainfallProcessExpanded ? '▼' : '▶' }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-if="rainfallProcessExpanded" class="card-body">
|
|
|
|
|
+ <div class="rainfall-process-content">
|
|
|
|
|
+ <div class="chart-box">
|
|
|
|
|
+ <div class="chart-title">未来{{ selectedTimeRange === '24h' ? '24' : selectedTimeRange === '48h' ? '48' : '72' }}小时雨量过程</div>
|
|
|
|
|
+ <canvas id="rainfallProcessChart" width="300" height="180"></canvas>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
<div class="data-card mt-20">
|
|
<div class="data-card mt-20">
|
|
|
<div class="card-header" @click="toggleHydrologyForecast">
|
|
<div class="card-header" @click="toggleHydrologyForecast">
|
|
|
- <h3 class="card-title">水位预报</h3>
|
|
|
|
|
|
|
+ <h3 class="card-title">黑林水位预报</h3>
|
|
|
<div class="header-actions">
|
|
<div class="header-actions">
|
|
|
<span class="toggle-btn">{{ hydrologyForecastExpanded ? '▼' : '▶' }}</span>
|
|
<span class="toggle-btn">{{ hydrologyForecastExpanded ? '▼' : '▶' }}</span>
|
|
|
</div>
|
|
</div>
|
|
@@ -75,29 +92,7 @@
|
|
|
<div class="chart-box">
|
|
<div class="chart-box">
|
|
|
<div class="chart-container-wrapper">
|
|
<div class="chart-container-wrapper">
|
|
|
<div class="chart-header">
|
|
<div class="chart-header">
|
|
|
- <div class="chart-title">未来24小时水位预报</div>
|
|
|
|
|
- <div class="station-dropdown">
|
|
|
|
|
- <div class="dropdown-toggle" @click="toggleDropdown">
|
|
|
|
|
- <span class="selected-text">{{ selectedStation === 'heilin' ? '黑林' : '小塔山' }}</span>
|
|
|
|
|
- <span class="dropdown-arrow">{{ dropdownOpen ? '▲' : '▼' }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div v-if="dropdownOpen" class="dropdown-menu" @click.stop>
|
|
|
|
|
- <div
|
|
|
|
|
- class="dropdown-item"
|
|
|
|
|
- :class="{ active: selectedStation === 'heilin' }"
|
|
|
|
|
- @click="selectStation('heilin')"
|
|
|
|
|
- >
|
|
|
|
|
- 黑林水文站
|
|
|
|
|
- </div>
|
|
|
|
|
- <div
|
|
|
|
|
- class="dropdown-item"
|
|
|
|
|
- :class="{ active: selectedStation === 'xiaotaishan' }"
|
|
|
|
|
- @click="selectStation('xiaotaishan')"
|
|
|
|
|
- >
|
|
|
|
|
- 小塔山水库
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <div class="chart-title">未来{{ selectedTimeRange === '24h' ? '24' : selectedTimeRange === '48h' ? '48' : '72' }}小时水位预报</div>
|
|
|
</div>
|
|
</div>
|
|
|
<canvas id="forecastWaterLevelChart" width="300" height="180"></canvas>
|
|
<canvas id="forecastWaterLevelChart" width="300" height="180"></canvas>
|
|
|
</div>
|
|
</div>
|
|
@@ -119,45 +114,12 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="station-divider"></div>
|
|
|
|
|
- <div class="station-row">
|
|
|
|
|
- <div class="station-name">小塔山水库</div>
|
|
|
|
|
- <div class="extreme-values">
|
|
|
|
|
- <div class="extreme-value">
|
|
|
|
|
- <span class="extreme-label">最高</span>
|
|
|
|
|
- <span class="extreme-number">18.8m</span>
|
|
|
|
|
- <span class="extreme-time">(18:00)</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="extreme-value">
|
|
|
|
|
- <span class="extreme-label">最低</span>
|
|
|
|
|
- <span class="extreme-number">18.2m</span>
|
|
|
|
|
- <span class="extreme-time">(00:00)</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
- <div class="data-card mt-20">
|
|
|
|
|
- <div class="card-header" @click="toggleFlowForecast">
|
|
|
|
|
- <h3 class="card-title">流量预报</h3>
|
|
|
|
|
- <div class="header-actions">
|
|
|
|
|
- <span class="toggle-btn">{{ flowForecastExpanded ? '▼' : '▶' }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div v-if="flowForecastExpanded" class="card-body">
|
|
|
|
|
- <div class="flow-forecast-content">
|
|
|
|
|
- <div class="chart-box">
|
|
|
|
|
- <div class="chart-title">未来72小时流量预报</div>
|
|
|
|
|
- <canvas id="forecastFlowChart" width="300" height="180"></canvas>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="right-sidebar">
|
|
<div class="right-sidebar">
|
|
@@ -192,38 +154,72 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="data-card">
|
|
<div class="data-card">
|
|
|
- <div class="card-header">
|
|
|
|
|
- <h3 class="card-title">水库水文预报</h3>
|
|
|
|
|
|
|
+ <div class="card-header" @click="toggleFlowForecast">
|
|
|
|
|
+ <h3 class="card-title">流量预报</h3>
|
|
|
|
|
+ <div class="header-actions">
|
|
|
|
|
+ <span class="toggle-btn">{{ flowForecastExpanded ? '▼' : '▶' }}</span>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="card-body">
|
|
|
|
|
- <div class="reservoir-section">
|
|
|
|
|
- <div class="section-title">入库流量预报</div>
|
|
|
|
|
|
|
+ <div v-if="flowForecastExpanded" class="card-body">
|
|
|
|
|
+ <div class="flow-forecast-content">
|
|
|
<div class="chart-box">
|
|
<div class="chart-box">
|
|
|
- <canvas id="inflowForecastChart" width="300" height="150"></canvas>
|
|
|
|
|
|
|
+ <div class="chart-title">未来{{ selectedTimeRange === '24h' ? '24' : selectedTimeRange === '48h' ? '48' : '72' }}小时流量预报</div>
|
|
|
|
|
+ <canvas id="forecastFlowChart" width="300" height="180"></canvas>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
- <div class="reservoir-section mt-15">
|
|
|
|
|
- <div class="section-title">出库流量预报</div>
|
|
|
|
|
- <div class="chart-box">
|
|
|
|
|
- <canvas id="outflowCombinedChart" width="300" height="150"></canvas>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="data-card mt-20">
|
|
|
|
|
+ <div class="card-header" @click="toggleXiaotaishanWaterLevel">
|
|
|
|
|
+ <h3 class="card-title">小塔山水位预报</h3>
|
|
|
|
|
+ <div class="header-actions">
|
|
|
|
|
+ <span class="toggle-btn">{{ xiaotaishanWaterLevelExpanded ? '▼' : '▶' }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
- <div class="reservoir-section mt-15">
|
|
|
|
|
- <div class="section-title">水库蓄水量、库容变化</div>
|
|
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-if="xiaotaishanWaterLevelExpanded" class="card-body">
|
|
|
|
|
+ <div class="forecast-content">
|
|
|
<div class="chart-box">
|
|
<div class="chart-box">
|
|
|
- <canvas id="storageCapacityChart" width="300" height="120"></canvas>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="chart-box mt-10">
|
|
|
|
|
- <canvas id="capacityPieChart" width="300" height="180"></canvas>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="forecast-info">
|
|
|
|
|
- 预报 {{ selectedTimeRange === '24h' ? '24h' : (selectedTimeRange === '48h' ? '48h' : '72h') }} 后蓄水量 {{ selectedTimeRange === '24h' ? '235' : (selectedTimeRange === '48h' ? '238' : '242') }} 万 m³,占用库容 {{ selectedTimeRange === '24h' ? '78' : (selectedTimeRange === '48h' ? '79' : '81') }}%
|
|
|
|
|
|
|
+ <div class="chart-container-wrapper">
|
|
|
|
|
+ <div class="chart-header">
|
|
|
|
|
+ <div class="chart-title">未来{{ selectedTimeRange === '24h' ? '24' : selectedTimeRange === '48h' ? '48' : '72' }}小时水位预报</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <canvas id="xiaotaishanWaterLevelChart" width="300" height="180"></canvas>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="extreme-water-level">
|
|
|
|
|
+ <div class="extreme-item">
|
|
|
|
|
+ <div class="extreme-title">预报水位极值</div>
|
|
|
|
|
+ <div class="station-row">
|
|
|
|
|
+ <div class="station-name">小塔山水库</div>
|
|
|
|
|
+ <div class="extreme-values">
|
|
|
|
|
+ <div class="extreme-value">
|
|
|
|
|
+ <span class="extreme-label">最高</span>
|
|
|
|
|
+ <span class="extreme-number">18.8m</span>
|
|
|
|
|
+ <span class="extreme-time">(18:00)</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="extreme-value">
|
|
|
|
|
+ <span class="extreme-label">最低</span>
|
|
|
|
|
+ <span class="extreme-number">18.2m</span>
|
|
|
|
|
+ <span class="extreme-time">(00:00)</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="data-card mt-20">
|
|
|
|
|
+ <div class="card-header">
|
|
|
|
|
+ <h3 class="card-title">入库流量预报</h3>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="card-body">
|
|
|
|
|
+ <div class="chart-box no-background">
|
|
|
|
|
+ <div class="chart-title">未来{{ selectedTimeRange === '24h' ? '24' : selectedTimeRange === '48h' ? '48' : '72' }}小时的流量预报</div>
|
|
|
|
|
+ <canvas id="inflowForecastChart" width="300" height="150"></canvas>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -239,25 +235,26 @@ export default {
|
|
|
components: {
|
|
components: {
|
|
|
DataCard
|
|
DataCard
|
|
|
},
|
|
},
|
|
|
|
|
+ emits: ['updateForecastData'],
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
rainfallDateRange: '',
|
|
rainfallDateRange: '',
|
|
|
hydrologyForecastExpanded: true,
|
|
hydrologyForecastExpanded: true,
|
|
|
districtRainfallExpanded: true,
|
|
districtRainfallExpanded: true,
|
|
|
flowForecastExpanded: true,
|
|
flowForecastExpanded: true,
|
|
|
|
|
+ rainfallProcessExpanded: true,
|
|
|
|
|
+ xiaotaishanWaterLevelExpanded: true,
|
|
|
warningLevelExpanded: true,
|
|
warningLevelExpanded: true,
|
|
|
forecastStationsExpanded: true,
|
|
forecastStationsExpanded: true,
|
|
|
forecastSummaryExpanded: true,
|
|
forecastSummaryExpanded: true,
|
|
|
- selectedStation: 'heilin',
|
|
|
|
|
- dropdownOpen: false,
|
|
|
|
|
|
|
+
|
|
|
selectedTimeRange: '24h',
|
|
selectedTimeRange: '24h',
|
|
|
timeRangeDropdownOpen: false,
|
|
timeRangeDropdownOpen: false,
|
|
|
forecastWaterLevelChart: null,
|
|
forecastWaterLevelChart: null,
|
|
|
|
|
+ xiaotaishanWaterLevelChart: null,
|
|
|
forecastFlowChart: null,
|
|
forecastFlowChart: null,
|
|
|
|
|
+ rainfallProcessChart: null,
|
|
|
inflowForecastChart: null,
|
|
inflowForecastChart: null,
|
|
|
- outflowCombinedChart: null,
|
|
|
|
|
- storageCapacityChart: null,
|
|
|
|
|
- capacityPieChart: null,
|
|
|
|
|
rainfallMapImage: rainfallMapImage,
|
|
rainfallMapImage: rainfallMapImage,
|
|
|
isPlaying: false,
|
|
isPlaying: false,
|
|
|
playInterval: null,
|
|
playInterval: null,
|
|
@@ -364,6 +361,46 @@ export default {
|
|
|
},
|
|
},
|
|
|
updateChartsForTime() {
|
|
updateChartsForTime() {
|
|
|
this.initCharts()
|
|
this.initCharts()
|
|
|
|
|
+ this.emitForecastData()
|
|
|
|
|
+ },
|
|
|
|
|
+ emitForecastData() {
|
|
|
|
|
+ const is24h = this.selectedTimeRange === '24h'
|
|
|
|
|
+ const is48h = this.selectedTimeRange === '48h'
|
|
|
|
|
+
|
|
|
|
|
+ const heilinData24h = [2.5, 2.8, 3.5, 4.2, 3.8]
|
|
|
|
|
+ const heilinData48h = [2.5, 2.8, 3.5, 4.2, 3.9]
|
|
|
|
|
+ const heilinData72h = [2.5, 2.8, 3.5, 4.2, 3.9, 3.5, 3.2]
|
|
|
|
|
+
|
|
|
|
|
+ const xiaotaishanData24h = [18.2, 18.3, 18.5, 18.8, 18.6]
|
|
|
|
|
+ const xiaotaishanData48h = [18.2, 18.3, 18.5, 18.8, 18.7]
|
|
|
|
|
+ const xiaotaishanData72h = [18.2, 18.3, 18.5, 18.8, 18.7, 18.5, 18.4]
|
|
|
|
|
+
|
|
|
|
|
+ const heilinWaterLevel = is24h ? heilinData24h[this.currentTimeIndex] : (is48h ? heilinData48h[this.currentTimeIndex] : heilinData72h[this.currentTimeIndex])
|
|
|
|
|
+ const xiaotaishanWaterLevel = is24h ? xiaotaishanData24h[this.currentTimeIndex] : (is48h ? xiaotaishanData48h[this.currentTimeIndex] : xiaotaishanData72h[this.currentTimeIndex])
|
|
|
|
|
+
|
|
|
|
|
+ const flowData24h = [45.2, 52.8, 68.5, 62.3, 58.0]
|
|
|
|
|
+ const flowData48h = [45.2, 52.8, 68.5, 62.3, 56.5]
|
|
|
|
|
+ const flowData72h = [45.2, 52.8, 68.5, 62.3, 55.7, 48.2, 42.5]
|
|
|
|
|
+
|
|
|
|
|
+ const heilinFlow = is24h ? flowData24h[this.currentTimeIndex] : (is48h ? flowData48h[this.currentTimeIndex] : flowData72h[this.currentTimeIndex])
|
|
|
|
|
+
|
|
|
|
|
+ const storageData24h = [220, 225, 230, 235, 232]
|
|
|
|
|
+ const storageData48h = [220, 225, 230, 235, 238]
|
|
|
|
|
+ const storageData72h = [220, 225, 230, 235, 242, 240, 238]
|
|
|
|
|
+
|
|
|
|
|
+ const xiaotaishanStorage = is24h ? storageData24h[this.currentTimeIndex] : (is48h ? storageData48h[this.currentTimeIndex] : storageData72h[this.currentTimeIndex])
|
|
|
|
|
+
|
|
|
|
|
+ this.$emit('updateForecastData', {
|
|
|
|
|
+ heilinStation: {
|
|
|
|
|
+ waterLevel: heilinWaterLevel.toFixed(2),
|
|
|
|
|
+ flow: heilinFlow.toFixed(1),
|
|
|
|
|
+ rainfall: '0.5'
|
|
|
|
|
+ },
|
|
|
|
|
+ reservoir: {
|
|
|
|
|
+ waterLevel: xiaotaishanWaterLevel.toFixed(2),
|
|
|
|
|
+ storage: xiaotaishanStorage.toFixed(1)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
toggleHydrologyForecast() {
|
|
toggleHydrologyForecast() {
|
|
|
this.hydrologyForecastExpanded = !this.hydrologyForecastExpanded
|
|
this.hydrologyForecastExpanded = !this.hydrologyForecastExpanded
|
|
@@ -384,6 +421,22 @@ export default {
|
|
|
}, 100)
|
|
}, 100)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ toggleRainfallProcess() {
|
|
|
|
|
+ this.rainfallProcessExpanded = !this.rainfallProcessExpanded
|
|
|
|
|
+ if (this.rainfallProcessExpanded) {
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ this.initRainfallProcessChart()
|
|
|
|
|
+ }, 100)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ toggleXiaotaishanWaterLevel() {
|
|
|
|
|
+ this.xiaotaishanWaterLevelExpanded = !this.xiaotaishanWaterLevelExpanded
|
|
|
|
|
+ if (this.xiaotaishanWaterLevelExpanded) {
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ this.initXiaotaishanWaterLevelChart()
|
|
|
|
|
+ }, 100)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
toggleWarningLevel() {
|
|
toggleWarningLevel() {
|
|
|
this.warningLevelExpanded = !this.warningLevelExpanded
|
|
this.warningLevelExpanded = !this.warningLevelExpanded
|
|
|
},
|
|
},
|
|
@@ -393,12 +446,7 @@ export default {
|
|
|
toggleForecastSummary() {
|
|
toggleForecastSummary() {
|
|
|
this.forecastSummaryExpanded = !this.forecastSummaryExpanded
|
|
this.forecastSummaryExpanded = !this.forecastSummaryExpanded
|
|
|
},
|
|
},
|
|
|
- toggleDropdown(event) {
|
|
|
|
|
- event.stopPropagation()
|
|
|
|
|
- this.dropdownOpen = !this.dropdownOpen
|
|
|
|
|
- },
|
|
|
|
|
handleOutsideClick() {
|
|
handleOutsideClick() {
|
|
|
- this.dropdownOpen = false
|
|
|
|
|
this.timeRangeDropdownOpen = false
|
|
this.timeRangeDropdownOpen = false
|
|
|
},
|
|
},
|
|
|
toggleTimeRangeDropdown(event) {
|
|
toggleTimeRangeDropdown(event) {
|
|
@@ -411,47 +459,36 @@ export default {
|
|
|
this.resetTimeline()
|
|
this.resetTimeline()
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
this.initForecastWaterLevelChart()
|
|
this.initForecastWaterLevelChart()
|
|
|
|
|
+ this.initXiaotaishanWaterLevelChart()
|
|
|
this.initForecastFlowChart()
|
|
this.initForecastFlowChart()
|
|
|
|
|
+ this.initRainfallProcessChart()
|
|
|
this.initInflowForecastChart()
|
|
this.initInflowForecastChart()
|
|
|
- this.initOutflowCombinedChart()
|
|
|
|
|
- this.initStorageCapacityChart()
|
|
|
|
|
- this.initCapacityPieChart()
|
|
|
|
|
- }, 100)
|
|
|
|
|
- },
|
|
|
|
|
- selectStation(station) {
|
|
|
|
|
- this.selectedStation = station
|
|
|
|
|
- this.dropdownOpen = false
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- this.initForecastWaterLevelChart()
|
|
|
|
|
}, 100)
|
|
}, 100)
|
|
|
},
|
|
},
|
|
|
|
|
+
|
|
|
initCharts() {
|
|
initCharts() {
|
|
|
this.initForecastWaterLevelChart()
|
|
this.initForecastWaterLevelChart()
|
|
|
|
|
+ this.initXiaotaishanWaterLevelChart()
|
|
|
this.initForecastFlowChart()
|
|
this.initForecastFlowChart()
|
|
|
|
|
+ this.initRainfallProcessChart()
|
|
|
this.initInflowForecastChart()
|
|
this.initInflowForecastChart()
|
|
|
- this.initOutflowCombinedChart()
|
|
|
|
|
- this.initStorageCapacityChart()
|
|
|
|
|
- this.initCapacityPieChart()
|
|
|
|
|
},
|
|
},
|
|
|
destroyCharts() {
|
|
destroyCharts() {
|
|
|
if (this.forecastWaterLevelChart) {
|
|
if (this.forecastWaterLevelChart) {
|
|
|
this.forecastWaterLevelChart.dispose()
|
|
this.forecastWaterLevelChart.dispose()
|
|
|
}
|
|
}
|
|
|
|
|
+ if (this.xiaotaishanWaterLevelChart) {
|
|
|
|
|
+ this.xiaotaishanWaterLevelChart.dispose()
|
|
|
|
|
+ }
|
|
|
if (this.forecastFlowChart) {
|
|
if (this.forecastFlowChart) {
|
|
|
this.forecastFlowChart.dispose()
|
|
this.forecastFlowChart.dispose()
|
|
|
}
|
|
}
|
|
|
|
|
+ if (this.rainfallProcessChart) {
|
|
|
|
|
+ this.rainfallProcessChart.dispose()
|
|
|
|
|
+ }
|
|
|
if (this.inflowForecastChart) {
|
|
if (this.inflowForecastChart) {
|
|
|
this.inflowForecastChart.dispose()
|
|
this.inflowForecastChart.dispose()
|
|
|
}
|
|
}
|
|
|
- if (this.outflowCombinedChart) {
|
|
|
|
|
- this.outflowCombinedChart.dispose()
|
|
|
|
|
- }
|
|
|
|
|
- if (this.storageCapacityChart) {
|
|
|
|
|
- this.storageCapacityChart.dispose()
|
|
|
|
|
- }
|
|
|
|
|
- if (this.capacityPieChart) {
|
|
|
|
|
- this.capacityPieChart.dispose()
|
|
|
|
|
- }
|
|
|
|
|
},
|
|
},
|
|
|
initForecastWaterLevelChart() {
|
|
initForecastWaterLevelChart() {
|
|
|
if (document.getElementById('forecastWaterLevelChart')) {
|
|
if (document.getElementById('forecastWaterLevelChart')) {
|
|
@@ -459,7 +496,7 @@ export default {
|
|
|
this.forecastWaterLevelChart.dispose()
|
|
this.forecastWaterLevelChart.dispose()
|
|
|
}
|
|
}
|
|
|
this.forecastWaterLevelChart = echarts.init(document.getElementById('forecastWaterLevelChart'))
|
|
this.forecastWaterLevelChart = echarts.init(document.getElementById('forecastWaterLevelChart'))
|
|
|
- const currentData = this.stationData[this.selectedStation]
|
|
|
|
|
|
|
+ const currentData = this.stationData['heilin']
|
|
|
|
|
|
|
|
const is24h = this.selectedTimeRange === '24h'
|
|
const is24h = this.selectedTimeRange === '24h'
|
|
|
const is48h = this.selectedTimeRange === '48h'
|
|
const is48h = this.selectedTimeRange === '48h'
|
|
@@ -472,16 +509,7 @@ export default {
|
|
|
const heilinData48h = [2.5, 2.8, 3.5, 4.2, 3.9]
|
|
const heilinData48h = [2.5, 2.8, 3.5, 4.2, 3.9]
|
|
|
const heilinData72h = [2.5, 2.8, 3.5, 4.2, 3.9, 3.5, 3.2]
|
|
const heilinData72h = [2.5, 2.8, 3.5, 4.2, 3.9, 3.5, 3.2]
|
|
|
|
|
|
|
|
- const xiaotaishanData24h = [18.2, 18.3, 18.5, 18.8, 18.6]
|
|
|
|
|
- const xiaotaishanData48h = [18.2, 18.3, 18.5, 18.8, 18.7]
|
|
|
|
|
- const xiaotaishanData72h = [18.2, 18.3, 18.5, 18.8, 18.7, 18.5, 18.4]
|
|
|
|
|
-
|
|
|
|
|
- let waterLevelData
|
|
|
|
|
- if (this.selectedStation === 'heilin') {
|
|
|
|
|
- waterLevelData = is24h ? heilinData24h : (is48h ? heilinData48h : heilinData72h)
|
|
|
|
|
- } else {
|
|
|
|
|
- waterLevelData = is24h ? xiaotaishanData24h : (is48h ? xiaotaishanData48h : xiaotaishanData72h)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ let waterLevelData = is24h ? heilinData24h : (is48h ? heilinData48h : heilinData72h)
|
|
|
|
|
|
|
|
const warningLevelData = is24h
|
|
const warningLevelData = is24h
|
|
|
? [currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel]
|
|
? [currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel]
|
|
@@ -652,6 +680,196 @@ export default {
|
|
|
this.forecastFlowChart.setOption(option)
|
|
this.forecastFlowChart.setOption(option)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ initXiaotaishanWaterLevelChart() {
|
|
|
|
|
+ if (document.getElementById('xiaotaishanWaterLevelChart')) {
|
|
|
|
|
+ if (this.xiaotaishanWaterLevelChart) {
|
|
|
|
|
+ this.xiaotaishanWaterLevelChart.dispose()
|
|
|
|
|
+ }
|
|
|
|
|
+ this.xiaotaishanWaterLevelChart = echarts.init(document.getElementById('xiaotaishanWaterLevelChart'))
|
|
|
|
|
+ const currentData = this.stationData['xiaotaishan']
|
|
|
|
|
+
|
|
|
|
|
+ const is24h = this.selectedTimeRange === '24h'
|
|
|
|
|
+ const is48h = this.selectedTimeRange === '48h'
|
|
|
|
|
+
|
|
|
|
|
+ const xAxisData24h = ['00:00', '06:00', '12:00', '18:00', '次日00:00']
|
|
|
|
|
+ const xAxisData48h = ['00:00', '12:00', '24:00', '36:00', '48:00']
|
|
|
|
|
+ const xAxisData72h = ['00:00', '12:00', '24:00', '36:00', '48:00', '60:00', '72:00']
|
|
|
|
|
+
|
|
|
|
|
+ const xiaotaishanData24h = [18.2, 18.3, 18.5, 18.8, 18.6]
|
|
|
|
|
+ const xiaotaishanData48h = [18.2, 18.3, 18.5, 18.8, 18.7]
|
|
|
|
|
+ const xiaotaishanData72h = [18.2, 18.3, 18.5, 18.8, 18.7, 18.5, 18.4]
|
|
|
|
|
+
|
|
|
|
|
+ let waterLevelData = is24h ? xiaotaishanData24h : (is48h ? xiaotaishanData48h : xiaotaishanData72h)
|
|
|
|
|
+
|
|
|
|
|
+ const warningLevelData = is24h
|
|
|
|
|
+ ? [currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel]
|
|
|
|
|
+ : (is48h ? [currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel] : [currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel, currentData.warningLevel])
|
|
|
|
|
+
|
|
|
|
|
+ const option = {
|
|
|
|
|
+ animation: false,
|
|
|
|
|
+ tooltip: {
|
|
|
|
|
+ trigger: 'axis'
|
|
|
|
|
+ },
|
|
|
|
|
+ grid: {
|
|
|
|
|
+ left: '3%',
|
|
|
|
|
+ right: '4%',
|
|
|
|
|
+ bottom: '8%',
|
|
|
|
|
+ top: '15%',
|
|
|
|
|
+ containLabel: true
|
|
|
|
|
+ },
|
|
|
|
|
+ xAxis: {
|
|
|
|
|
+ type: 'category',
|
|
|
|
|
+ boundaryGap: false,
|
|
|
|
|
+ data: is24h ? xAxisData24h : (is48h ? xAxisData48h : xAxisData72h),
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ yAxis: {
|
|
|
|
|
+ type: 'value',
|
|
|
|
|
+ name: '水位(m)',
|
|
|
|
|
+ nameTextStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ },
|
|
|
|
|
+ min: currentData.min,
|
|
|
|
|
+ max: currentData.max,
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ },
|
|
|
|
|
+ splitLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: 'rgba(123, 190, 246, 0.2)'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ series: [
|
|
|
|
|
+ {
|
|
|
|
|
+ name: '预报水位',
|
|
|
|
|
+ type: 'line',
|
|
|
|
|
+ data: waterLevelData,
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#62f6fb',
|
|
|
|
|
+ width: 2
|
|
|
|
|
+ },
|
|
|
|
|
+ itemStyle: {
|
|
|
|
|
+ color: '#62f6fb'
|
|
|
|
|
+ },
|
|
|
|
|
+ areaStyle: {
|
|
|
|
|
+ color: 'rgba(98, 246, 251, 0.2)'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: '警戒水位',
|
|
|
|
|
+ type: 'line',
|
|
|
|
|
+ data: warningLevelData,
|
|
|
|
|
+ symbol: 'none',
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#ff6b6b',
|
|
|
|
|
+ width: 2,
|
|
|
|
|
+ type: 'dashed'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ this.xiaotaishanWaterLevelChart.setOption(option)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ initRainfallProcessChart() {
|
|
|
|
|
+ if (document.getElementById('rainfallProcessChart')) {
|
|
|
|
|
+ if (this.rainfallProcessChart) {
|
|
|
|
|
+ this.rainfallProcessChart.dispose()
|
|
|
|
|
+ }
|
|
|
|
|
+ this.rainfallProcessChart = echarts.init(document.getElementById('rainfallProcessChart'))
|
|
|
|
|
+
|
|
|
|
|
+ const is24h = this.selectedTimeRange === '24h'
|
|
|
|
|
+ const is48h = this.selectedTimeRange === '48h'
|
|
|
|
|
+
|
|
|
|
|
+ const xAxisData24h = ['00:00', '06:00', '12:00', '18:00', '次日00:00']
|
|
|
|
|
+ const xAxisData48h = ['00:00', '12:00', '24:00', '36:00', '48:00']
|
|
|
|
|
+ const xAxisData72h = ['00:00', '12:00', '24:00', '36:00', '48:00', '60:00', '72:00']
|
|
|
|
|
+
|
|
|
|
|
+ const rainfallData24h = [5, 12, 25, 18, 8]
|
|
|
|
|
+ const rainfallData48h = [5, 12, 25, 18, 10]
|
|
|
|
|
+ const rainfallData72h = [5, 12, 25, 18, 10, 5, 2]
|
|
|
|
|
+
|
|
|
|
|
+ const option = {
|
|
|
|
|
+ animation: false,
|
|
|
|
|
+ tooltip: {
|
|
|
|
|
+ trigger: 'axis'
|
|
|
|
|
+ },
|
|
|
|
|
+ grid: {
|
|
|
|
|
+ left: '3%',
|
|
|
|
|
+ right: '4%',
|
|
|
|
|
+ bottom: '8%',
|
|
|
|
|
+ top: '15%',
|
|
|
|
|
+ containLabel: true
|
|
|
|
|
+ },
|
|
|
|
|
+ xAxis: {
|
|
|
|
|
+ type: 'category',
|
|
|
|
|
+ boundaryGap: false,
|
|
|
|
|
+ data: is24h ? xAxisData24h : (is48h ? xAxisData48h : xAxisData72h),
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ yAxis: {
|
|
|
|
|
+ type: 'value',
|
|
|
|
|
+ name: '雨量(mm)',
|
|
|
|
|
+ nameTextStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ },
|
|
|
|
|
+ min: 0,
|
|
|
|
|
+ max: 50,
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#7bbef6'
|
|
|
|
|
+ },
|
|
|
|
|
+ splitLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: 'rgba(123, 190, 246, 0.2)'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ series: [
|
|
|
|
|
+ {
|
|
|
|
|
+ name: '预报雨量',
|
|
|
|
|
+ type: 'line',
|
|
|
|
|
+ data: is24h ? rainfallData24h : (is48h ? rainfallData48h : rainfallData72h),
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#ff6b6b',
|
|
|
|
|
+ width: 2
|
|
|
|
|
+ },
|
|
|
|
|
+ itemStyle: {
|
|
|
|
|
+ color: '#ff6b6b'
|
|
|
|
|
+ },
|
|
|
|
|
+ areaStyle: {
|
|
|
|
|
+ color: 'rgba(255, 107, 107, 0.2)'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ this.rainfallProcessChart.setOption(option)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
initInflowForecastChart() {
|
|
initInflowForecastChart() {
|
|
|
if (document.getElementById('inflowForecastChart')) {
|
|
if (document.getElementById('inflowForecastChart')) {
|
|
|
if (this.inflowForecastChart) {
|
|
if (this.inflowForecastChart) {
|
|
@@ -1295,6 +1513,13 @@ export default {
|
|
|
margin-top: 20px;
|
|
margin-top: 20px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.chart-box.no-background {
|
|
|
|
|
+ background: transparent;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ box-shadow: none;
|
|
|
|
|
+ padding: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.data-card {
|
|
.data-card {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
background: rgba(0, 20, 40, 0.7);
|
|
background: rgba(0, 20, 40, 0.7);
|