| | |
| | | <script setup> |
| | | import {onMounted, reactive} from 'vue' |
| | | import * as echarts from 'echarts/core'; |
| | | import { GridComponent, ToolboxComponent, TooltipComponent, TitleComponent } from 'echarts/components'; |
| | | import { LineChart, BarChart } from 'echarts/charts'; |
| | | import { UniversalTransition } from 'echarts/features'; |
| | | import { CanvasRenderer } from 'echarts/renderers'; |
| | | |
| | | echarts.use([GridComponent, LineChart, BarChart, CanvasRenderer, UniversalTransition, ToolboxComponent, TooltipComponent, TitleComponent]); |
| | | |
| | | const state = reactive({ |
| | | zhakouVal: 1, |
| | | dianzhanVal: 1 |
| | | }) |
| | | const zkssChartRef = ref(); //扎口瞬时图表 |
| | | const zkljChartRef = ref(); //扎口累计图表 |
| | | const dzssChartRef = ref(); //电站瞬时图表 |
| | | const dzljChartRef = ref(); //电站累计图表 |
| | | let zkssCharts = null; |
| | | let zkljCharts = null; |
| | | let dzssCharts = null; |
| | | let dzljCharts = null; |
| | | |
| | | const selectOption = ref([ |
| | | { label: '本年', value: 1 }, |
| | | { label: '本季', value: 2 }, |
| | | { label: '本月', value: 3 }, |
| | | { label: '本周', value: 4 }, |
| | | { label: '本日', value: 5 }, |
| | | ]) |
| | | |
| | | // 获取折线图配置 |
| | | const getLineOption = (data, startColor, endColor) => { |
| | | let xdata = []; |
| | | let sdata = []; |
| | | data.forEach(item => { |
| | | xdata.push(item.name) |
| | | sdata.push(item.value) |
| | | }) |
| | | return { |
| | | title: { |
| | | text: '瞬时流量分析', |
| | | textStyle: { |
| | | color: '#fff' |
| | | }, |
| | | padding: [0, 0, 0, 30] |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | grid: { |
| | | top: 80, |
| | | left: 60, |
| | | right: 60, |
| | | bottom: 60 |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | boundaryGap: false, |
| | | data: xdata, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: 'm³/s', |
| | | nameTextStyle: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | }, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | data: sdata, |
| | | type: 'line', |
| | | areaStyle: { |
| | | color: { |
| | | type: 'linear', |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [{ |
| | | offset: 0, color: startColor // 0% 处的颜色 |
| | | }, { |
| | | offset: 1, color: endColor // 100% 处的颜色 |
| | | }], |
| | | global: false // 缺省为 false |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | // 获取柱状图配置 |
| | | const getBarOption = (data, color) => { |
| | | let xdata = []; |
| | | let sdata = []; |
| | | data.forEach(item => { |
| | | xdata.push(item.name) |
| | | sdata.push(item.value) |
| | | }) |
| | | return { |
| | | title: { |
| | | text: '瞬时流量分析', |
| | | textStyle: { |
| | | color: '#fff' |
| | | }, |
| | | padding: [0, 0, 0, 30] |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | grid: { |
| | | top: 80, |
| | | left: 60, |
| | | right: 60, |
| | | bottom: 60 |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: xdata, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '10⁸m³', |
| | | nameTextStyle: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | }, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | data: sdata, |
| | | type: 'bar', |
| | | itemStyle: { |
| | | color: color |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | |
| | | // 新扎口图表 |
| | | const initZkLine = () => { |
| | | if(zkssChartRef.value) { |
| | | zkssCharts = echarts.init(zkssChartRef.value); |
| | | let data = [ |
| | | { name: '一月', value: 36 }, |
| | | { name: '二月', value: 66 }, |
| | | { name: '三月', value: 122 }, |
| | | { name: '四月', value: 78 }, |
| | | { name: '五月', value: 63 }, |
| | | ] |
| | | const option = getLineOption(data, 'rgba(94,229,92,1)', 'rgba(94,229,92,0.2)') |
| | | zkssCharts.setOption(option) |
| | | } |
| | | } |
| | | const initZkBar = () => { |
| | | if(zkljChartRef.value) { |
| | | zkljCharts = echarts.init(zkljChartRef.value); |
| | | let data = [ |
| | | { name: '一月', value: 36 }, |
| | | { name: '二月', value: 66 }, |
| | | { name: '三月', value: 122 }, |
| | | { name: '四月', value: 78 }, |
| | | { name: '五月', value: 63 }, |
| | | ] |
| | | const option = getBarOption(data, 'rgba(94,229,92,1)') |
| | | zkljCharts.setOption(option) |
| | | } |
| | | } |
| | | |
| | | // 电站图表 |
| | | const initDzLine = () => { |
| | | if(dzssChartRef.value) { |
| | | dzssCharts = echarts.init(dzssChartRef.value); |
| | | let data = [ |
| | | { name: '一月', value: 36 }, |
| | | { name: '二月', value: 66 }, |
| | | { name: '三月', value: 122 }, |
| | | { name: '四月', value: 78 }, |
| | | { name: '五月', value: 63 }, |
| | | ] |
| | | const option = getLineOption(data, 'rgba(23,108,229,1)', 'rgba(23,108,229,0.2)') |
| | | dzssCharts.setOption(option) |
| | | } |
| | | } |
| | | const initDzBar = () => { |
| | | if(dzljChartRef.value) { |
| | | dzljCharts = echarts.init(dzljChartRef.value); |
| | | let data = [ |
| | | { name: '一月', value: 36 }, |
| | | { name: '二月', value: 66 }, |
| | | { name: '三月', value: 122 }, |
| | | { name: '四月', value: 78 }, |
| | | { name: '五月', value: 63 }, |
| | | ] |
| | | const option = getBarOption(data, 'rgba(23,108,229,1)') |
| | | dzljCharts.setOption(option) |
| | | } |
| | | } |
| | | |
| | | const initCharts = () => { |
| | | initZkLine() |
| | | initZkBar() |
| | | initDzLine() |
| | | initDzBar() |
| | | } |
| | | |
| | | onMounted(() => { |
| | | initCharts() |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | 生态流量 |
| | | <div class="ecology"> |
| | | <div class="ecology-l item"> |
| | | <div class="item-t"> |
| | | <div class="title">新扎口流量监测点</div> |
| | | <el-select |
| | | v-model="state.zhakouVal" |
| | | class="m-2" |
| | | placeholder="Select" |
| | | size="large" |
| | | style="width: 15.5rem" |
| | | > |
| | | <el-option |
| | | v-for="item in selectOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div class="item-chart-ss" ref="zkssChartRef"></div> |
| | | <div class="item-chart-lj" ref="zkljChartRef"></div> |
| | | </div> |
| | | <div class="ecology-r item"> |
| | | <div class="item-t"> |
| | | <div class="title">水电站流量监测点</div> |
| | | <el-select |
| | | v-model="state.dianzhanVal" |
| | | class="m-2" |
| | | placeholder="Select" |
| | | size="large" |
| | | style="width: 15.5rem" |
| | | > |
| | | <el-option |
| | | v-for="item in selectOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div class="item-chart-ss" ref="dzssChartRef"></div> |
| | | <div class="item-chart-lj" ref="dzljChartRef"></div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | |
| | | .ecology{ |
| | | height: 100%; |
| | | background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%); |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | gap: 30px; |
| | | .item{ |
| | | width: 48%; |
| | | height: 96%; |
| | | background: rgba(23,108,229,0.3); |
| | | border: 1px solid #176CE5; |
| | | .item-t{ |
| | | height: 10%; |
| | | padding: 0 30px; |
| | | display: flex; |
| | | align-items: center; |
| | | .title{ |
| | | font-size: 36px; |
| | | color: #fff; |
| | | margin-right: 30px; |
| | | } |
| | | } |
| | | .item-chart-ss{ |
| | | height: 45%; |
| | | } |
| | | .item-chart-lj{ |
| | | height: 45% |
| | | } |
| | | } |
| | | } |
| | | </style> |