22 changed files with 1311 additions and 276 deletions
@ -0,0 +1,10 @@ |
|||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
list = '/evr/project/getInfoList', |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export function list(params?: any) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
list = '/evr/area/getList', |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export function list(params?: any) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
list = '/evr/project/getInvestmentStats', |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export function list(params?: any) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
@ -0,0 +1,342 @@ |
|||||
|
<template> |
||||
|
<div class="tabBox"> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card :title="title[0]" :loading="loading"> |
||||
|
<div ref="chartRef1" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card :title="title[1]" :loading="loading"> |
||||
|
<div ref="chartRef2" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card :title="title[2]" :loading="loading"> |
||||
|
<div ref="chartRef3" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card :title="title[3]" :loading="loading"> |
||||
|
<div ref="chartRef4" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { watch, ref, Ref, watchEffect } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
import { Card } from 'ant-design-vue'; |
||||
|
|
||||
|
const subTab = ref<String>('a'); |
||||
|
const props = defineProps({ |
||||
|
loading: Boolean, |
||||
|
width: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '100%', |
||||
|
}, |
||||
|
height: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
title: { |
||||
|
type: String as PropType<any>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const chartRef1 = ref<HTMLDivElement | null>(null); |
||||
|
const chartRef2 = ref<HTMLDivElement | null>(null); |
||||
|
const chartRef3 = ref<HTMLDivElement | null>(null); |
||||
|
const chartRef4 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions1 = useECharts(chartRef1 as Ref<HTMLDivElement>).setOptions; |
||||
|
const setOptions2 = useECharts(chartRef2 as Ref<HTMLDivElement>).setOptions; |
||||
|
const setOptions3 = useECharts(chartRef3 as Ref<HTMLDivElement>).setOptions; |
||||
|
const setOptions4 = useECharts(chartRef4 as Ref<HTMLDivElement>).setOptions; |
||||
|
watch( |
||||
|
() => subTab.value, |
||||
|
() => { |
||||
|
setOptions1({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD/10', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '排放量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD/10', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions2({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '汇入量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions3({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD','NH3-N','TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '生产量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions4({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD','NH3-N','TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '汇入量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
}, |
||||
|
{ immediate: true }, |
||||
|
); |
||||
|
</script> |
||||
|
<style lang="less"> |
||||
|
.tabBox { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
.mutiTable { |
||||
|
margin: 20px 0; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,45 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<div style="margin: 20px; border-radius: 10px; background: #fff"> |
||||
|
<div class="tabBox"> |
||||
|
<a-tabs v-model:activeKey="activeKey" size="large"> |
||||
|
<a-tab-pane key="1" tab="污染源负荷变化"> |
||||
|
<twoBar :loading="loading" /> |
||||
|
</a-tab-pane> |
||||
|
<a-tab-pane key="2" tab="点源污染变化"> |
||||
|
<threeAxis :loading="loading" /> |
||||
|
</a-tab-pane> |
||||
|
<a-tab-pane key="3" tab="面源污染变化"> |
||||
|
<fourAxis :loading="loading" :title="secondTabTitle1" /> |
||||
|
</a-tab-pane> |
||||
|
<a-tab-pane key="4" tab="污染负荷汇入变化"> |
||||
|
<mutiBar :loading="loading" /> |
||||
|
</a-tab-pane> |
||||
|
</a-tabs> |
||||
|
</div> |
||||
|
</div> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { ref } from 'vue'; |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import twoBar from './twoBar.vue'; |
||||
|
import threeAxis from './threeAxis.vue'; |
||||
|
import fourAxis from './fourAxis.vue'; |
||||
|
import mutiBar from './mutiBar.vue'; |
||||
|
const activeKey = ref<String>('1'); |
||||
|
const loading = ref(false); |
||||
|
const secondTabTitle1 = ['农业农村面源污染负荷排放量变化趋势', '农业农村面源污染汇入量变化趋势', '城市面源产生量变化趋势', '城市面源汇入量变化趋势']; |
||||
|
</script> |
||||
|
<style lang="less"> |
||||
|
.tabBox { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
.title { |
||||
|
margin: 10px 0; |
||||
|
font-size: 20px; |
||||
|
font-weight: 550; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,350 @@ |
|||||
|
<template> |
||||
|
<div class="tabBox"> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="1988年" :loading="loading"> |
||||
|
<div ref="chartRef1" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="2000年" :loading="loading"> |
||||
|
<div ref="chartRef2" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="2005年" :loading="loading"> |
||||
|
<div ref="chartRef3" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="2020年" :loading="loading"> |
||||
|
<div ref="chartRef4" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div> |
||||
|
<Card title="污染负荷构成特征变化" :loading="loading"> |
||||
|
<div ref="chartRef5" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { watch, ref, Ref, watchEffect } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
import { Card } from 'ant-design-vue'; |
||||
|
|
||||
|
const subTab = ref<String>('a'); |
||||
|
const props = defineProps({ |
||||
|
loading: Boolean, |
||||
|
width: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '100%', |
||||
|
}, |
||||
|
height: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const chartRef1 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions1 = useECharts(chartRef1 as Ref<HTMLDivElement>).setOptions; |
||||
|
const chartRef2 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions2 = useECharts(chartRef2 as Ref<HTMLDivElement>).setOptions; |
||||
|
const chartRef3 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions3 = useECharts(chartRef3 as Ref<HTMLDivElement>).setOptions; |
||||
|
const chartRef4 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions4 = useECharts(chartRef4 as Ref<HTMLDivElement>).setOptions; |
||||
|
const chartRef5 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions5 = useECharts(chartRef5 as Ref<HTMLDivElement>).setOptions; |
||||
|
watch( |
||||
|
() => subTab.value, |
||||
|
() => { |
||||
|
setOptions1({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['未收集点源', '城市面源', '农业农村面源'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['COD', 'TN', 'TP'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '未收集点源', |
||||
|
data: [90, 200, 150], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '城市面源', |
||||
|
data: [78, 123, 29], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '农业农村面源', |
||||
|
data: [100, 100, 100], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions2({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['污水处理厂尾水', '未收集点源', '城市面源', '农业农村面源'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['COD', 'TN', 'TP'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '污水处理厂尾水', |
||||
|
data: [90, 200, 150, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '未收集点源', |
||||
|
data: [78, 123, 29, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '城市面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '农业农村面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions3({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['污水处理厂尾水', '未收集点源', '城市面源', '农业农村面源'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['COD', 'TN', 'TP'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '污水处理厂尾水', |
||||
|
data: [90, 200, 150, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '未收集点源', |
||||
|
data: [78, 123, 29, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '城市面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '农业农村面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions4({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['污水处理厂尾水', '未收集点源', '城市面源', '农业农村面源'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['COD', 'TN', 'TP'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '污水处理厂尾水', |
||||
|
data: [90, 200, 150, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '未收集点源', |
||||
|
data: [78, 123, 29, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '城市面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '农业农村面源', |
||||
|
data: [100, 100, 100, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions5({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['2000', '2005', '2020'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['XX区', 'XX区', 'XX区', 'XX区', 'XX区'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '2000', |
||||
|
data: [90, 200, 150,66,77], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '2005', |
||||
|
data: [78, 123, 29,55,99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: '2020', |
||||
|
data: [100, 100, 100,88,111], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
}, |
||||
|
{ immediate: true }, |
||||
|
); |
||||
|
</script> |
||||
|
<style lang="less"> |
||||
|
.tabBox { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,266 @@ |
|||||
|
<template> |
||||
|
<div class="tabBox"> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/3 w-full"> |
||||
|
<Card title="污染负荷产生量变化趋势" :loading="loading"> |
||||
|
<div ref="chartRef1" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/3 w-full"> |
||||
|
<Card title="污染负荷削减量变化趋势" :loading="loading"> |
||||
|
<div ref="chartRef2" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/3 w-full"> |
||||
|
<Card title="污染环境负荷变化趋势" :loading="loading"> |
||||
|
<div ref="chartRef3" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { watch, ref, Ref, watchEffect } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
import { Card } from 'ant-design-vue'; |
||||
|
|
||||
|
const subTab = ref<String>('a'); |
||||
|
const props = defineProps({ |
||||
|
loading: Boolean, |
||||
|
width: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '100%', |
||||
|
}, |
||||
|
height: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
title: { |
||||
|
type: String as PropType<any>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const chartRef1 = ref<HTMLDivElement | null>(null); |
||||
|
const chartRef2 = ref<HTMLDivElement | null>(null); |
||||
|
const chartRef3 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions1 = useECharts(chartRef1 as Ref<HTMLDivElement>).setOptions; |
||||
|
const setOptions2 = useECharts(chartRef2 as Ref<HTMLDivElement>).setOptions; |
||||
|
const setOptions3 = useECharts(chartRef3 as Ref<HTMLDivElement>).setOptions; |
||||
|
watch( |
||||
|
() => subTab.value, |
||||
|
() => { |
||||
|
setOptions1({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '生产量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD/10', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions2({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '削减量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions3({ |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [ |
||||
|
'"1995"', |
||||
|
'"1996"', |
||||
|
'"1997"', |
||||
|
'"1998"', |
||||
|
'"1999"', |
||||
|
'"2000"', |
||||
|
'"2001"', |
||||
|
'"2002"', |
||||
|
'"2003"', |
||||
|
'"2004"', |
||||
|
], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '变化量/吨', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70, 78, 123, 29, 45, 99], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66, 77, 99, 111, 122, 133], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99, 134, 131, 39, 67, 156], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
|
type: 'line', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
}, |
||||
|
{ immediate: true }, |
||||
|
); |
||||
|
</script> |
||||
|
<style lang="less"> |
||||
|
.tabBox { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
.mutiTable { |
||||
|
margin: 20px 0; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,167 @@ |
|||||
|
<template> |
||||
|
<div class="tabBox"> |
||||
|
<div class="md:flex enter-y"> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="2020年污染负荷(按来源构成)" :loading="loading"> |
||||
|
<div ref="chartRef1" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
<div class="md:w-1/2 w-full"> |
||||
|
<Card title="2020年污染负荷(空间分布)" :loading="loading"> |
||||
|
<div ref="chartRef2" :style="{ width, height }"></div> |
||||
|
</Card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { watch, ref, Ref, watchEffect } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
import { Card } from 'ant-design-vue'; |
||||
|
|
||||
|
const subTab = ref<String>('a'); |
||||
|
const props = defineProps({ |
||||
|
loading: Boolean, |
||||
|
width: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '100%', |
||||
|
}, |
||||
|
height: { |
||||
|
type: String as PropType<string>, |
||||
|
default: '300px', |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const chartRef1 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions1 = useECharts(chartRef1 as Ref<HTMLDivElement>).setOptions; |
||||
|
const chartRef2 = ref<HTMLDivElement | null>(null); |
||||
|
const setOptions2 = useECharts(chartRef2 as Ref<HTMLDivElement>).setOptions; |
||||
|
watch( |
||||
|
() => subTab.value, |
||||
|
() => { |
||||
|
setOptions1({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['水质净化厂尾水', '未收集点源', '城市面源', '农业农村面源', '水土流失'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
setOptions2({ |
||||
|
tooltip: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true, |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['COD', 'NH3-N', 'TN', 'TP'], |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: ['XX区', 'XX区', 'XX区', 'XX区', 'XX区'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '污染负荷率', // 单位说明文本 |
||||
|
nameLocation: 'end', // 文本位置(start/center/end) |
||||
|
nameTextStyle: { |
||||
|
color: '#666', |
||||
|
fontSize: 12, |
||||
|
align: 'left', // 文本对齐方向 |
||||
|
padding: [0, 0, 0, -30], // 调整位置 [上,右,下,左] |
||||
|
}, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'COD', |
||||
|
data: [90, 200, 150, 80, 70], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'NH3-N', |
||||
|
data: [132, 23, 42, 88, 66], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TN', |
||||
|
data: [78, 123, 29, 45, 99], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'TP', |
||||
|
data: [100, 100, 100, 100, 100], |
||||
|
type: 'bar', |
||||
|
barWidth: '10px', |
||||
|
itemStyle: {}, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
}, |
||||
|
{ immediate: true }, |
||||
|
); |
||||
|
</script> |
||||
|
<style lang="less"> |
||||
|
.tabBox { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue