| | |
| | | <script setup> |
| | | import {onMounted, reactive} from 'vue' |
| | | import {onMounted, ref} from 'vue' |
| | | import * as echarts from 'echarts/core'; |
| | | import {getFlowPointList} from "@/api/screen/index.js"; |
| | | import {getFlowDate} from "@/api/screen/ecology/index.js"; |
| | | |
| | | 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 cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', checkStrictly: true, expandTrigger: 'hover', emitPath: false }; //级联选择器配置 |
| | | const typeOption = ref([]) |
| | | const pointId = ref() |
| | | const timeType = ref(2) |
| | | const ssChartRef = ref(); //瞬时图表 |
| | | const ljChartRef = ref(); //累计图表 |
| | | let ssCharts = null; |
| | | let ljCharts = null; |
| | | const tongjiData = ref([]) |
| | | |
| | | const selectOption = ref([ |
| | | { label: '本年', value: 1 }, |
| | | { label: '本季', value: 2 }, |
| | | { label: '本月', value: 3 }, |
| | | { label: '本周', value: 4 }, |
| | | { label: '本日', value: 5 }, |
| | | {label: '本年', value: 6}, |
| | | {label: '本季', value: 5}, |
| | | {label: '本月', value: 4}, |
| | | {label: '本周', value: 3}, |
| | | {label: '本日', value: 2}, |
| | | ]) |
| | | |
| | | // 获取折线图配置 |
| | |
| | | let xdata = []; |
| | | let sdata = []; |
| | | data.forEach(item => { |
| | | xdata.push(item.name) |
| | | sdata.push(item.value) |
| | | xdata.push(item.dateTime) |
| | | sdata.push(item.newFlow) |
| | | }) |
| | | return { |
| | | title: { |
| | | text: '瞬时流量分析', |
| | | textStyle: { |
| | | color: '#fff' |
| | | }, |
| | | padding: [0, 0, 0, 30] |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | grid: { |
| | | top: 80, |
| | | left: 60, |
| | | right: 60, |
| | | bottom: 60 |
| | | right: 20, |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | |
| | | data: xdata, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | } |
| | | fontSize: '1.2rem', |
| | | rotate: -15, |
| | | }, |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | |
| | | let xdata = []; |
| | | let sdata = []; |
| | | data.forEach(item => { |
| | | xdata.push(item.name) |
| | | sdata.push(item.value) |
| | | xdata.push(item.dateTime) |
| | | sdata.push(item.totalFlow) |
| | | }) |
| | | return { |
| | | title: { |
| | | text: '瞬时流量分析', |
| | | textStyle: { |
| | | color: '#fff' |
| | | }, |
| | | padding: [0, 0, 0, 30] |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | grid: { |
| | | top: 80, |
| | | left: 60, |
| | | right: 60, |
| | | bottom: 60 |
| | | right: 20, |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: xdata, |
| | | axisLabel: { |
| | | color: '#fff', |
| | | fontSize: '1.2rem' |
| | | fontSize: '1.2rem', |
| | | rotate: -15, |
| | | } |
| | | }, |
| | | yAxis: { |
| | |
| | | } |
| | | |
| | | // 新扎口图表 |
| | | 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 updateLine = () => { |
| | | const option = getLineOption(tongjiData.value, 'rgba(94,229,92,1)', 'rgba(94,229,92,0.2)') |
| | | ssCharts.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 updateBar = () => { |
| | | const option = getBarOption(tongjiData.value, 'rgba(94,229,92,1)') |
| | | ljCharts.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 getPoint = () => { |
| | | getFlowPointList().then(res => { |
| | | typeOption.value = res.data |
| | | pointId.value = res.data[0]?.childrenList?.[0].id |
| | | getFlowTongjiData() |
| | | }) |
| | | } |
| | | |
| | | // 获取统计数据 |
| | | const getFlowTongjiData = () => { |
| | | let params = { |
| | | pointId: pointId.value, |
| | | dataType: timeType.value |
| | | } |
| | | getFlowDate(params).then(res => { |
| | | tongjiData.value = res.data |
| | | updateCharts() |
| | | }) |
| | | } |
| | | |
| | | // 初始化echarts |
| | | const initCharts = () => { |
| | | initZkLine() |
| | | initZkBar() |
| | | initDzLine() |
| | | initDzBar() |
| | | if (ssChartRef.value) { |
| | | ssCharts = echarts.init(ssChartRef.value); |
| | | } |
| | | if (ljChartRef.value) { |
| | | ljCharts = echarts.init(ljChartRef.value); |
| | | } |
| | | } |
| | | |
| | | // 更新echarts |
| | | const updateCharts = () => { |
| | | updateLine() |
| | | updateBar() |
| | | } |
| | | |
| | | onMounted(() => { |
| | | initCharts() |
| | | getPoint() |
| | | }) |
| | | </script> |
| | | |
| | |
| | | <div class="ecology"> |
| | | <div class="ecology-l item"> |
| | | <div class="item-t"> |
| | | <div class="title">新扎口流量监测点</div> |
| | | <el-cascader size="large" |
| | | v-model="pointId" |
| | | :options="typeOption" |
| | | :show-all-levels="false" |
| | | :props="cascaderOption" |
| | | clearable |
| | | style="width: 30rem; marginRight:10rem" |
| | | @change="getFlowTongjiData" |
| | | /> |
| | | <el-select |
| | | v-model="state.zhakouVal" |
| | | v-model="timeType" |
| | | class="m-2" |
| | | placeholder="Select" |
| | | placeholder="请选择筛选时间" |
| | | size="large" |
| | | style="width: 15.5rem" |
| | | style="width: 20rem" |
| | | @change="getFlowTongjiData" |
| | | > |
| | | <el-option |
| | | v-for="item in selectOption" |
| | |
| | | /> |
| | | </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 class="charts-t">瞬时流量分析</div> |
| | | <div class="item-chart-ss" ref="ssChartRef"></div> |
| | | <div class="charts-t">累计流量分析</div> |
| | | <div class="item-chart-lj" ref="ljChartRef"></div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | .ecology{ |
| | | .ecology { |
| | | height: 100%; |
| | | background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 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%; |
| | | |
| | | .item { |
| | | width: 95%; |
| | | height: 96%; |
| | | background: rgba(23,108,229,0.3); |
| | | padding: 1rem 20rem; |
| | | background: rgba(23, 108, 229, 0.3); |
| | | border: 1px solid #176CE5; |
| | | border-radius: 8px; |
| | | .item-t{ |
| | | height: 10%; |
| | | padding: 0 30px; |
| | | .item-t { |
| | | height: 5%; |
| | | display: flex; |
| | | align-items: center; |
| | | .title{ |
| | | font-size: 36px; |
| | | color: #fff; |
| | | margin-right: 30px; |
| | | } |
| | | } |
| | | .item-chart-ss{ |
| | | height: 45%; |
| | | .charts-t{ |
| | | font-size: 1.5rem; |
| | | color: #fff; |
| | | text-align: right; |
| | | } |
| | | .item-chart-lj{ |
| | | height: 45% |
| | | .item-chart-ss { |
| | | height: 44%; |
| | | } |
| | | |
| | | .item-chart-lj { |
| | | height: 44% |
| | | } |
| | | } |
| | | } |