You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

483 lines
12 KiB

import { Component, OnInit, Renderer2, ElementRef } from '@angular/core';
import { HttpClient } from '@angular/common/http'
declare var echarts: any;
declare var AMap: any;
declare var AMapUI: any;
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
constructor(private http:HttpClient, private render2: Renderer2,public element: ElementRef) { }
visualizationData:any; //统计分析数据
planQuantity:any = ['0','0']; //预案编制总量
keyUnitQuantity:any; //单位总量
dataQuantity:any; //重点关注单位预案数量
threeDimensional:any; //三维预案总量
twoDimensional:any; //三维预案总量
cardDimensional:any; //卡片预案总量
otherDimensional:any; //其他预案总量
ngOnInit() {
this.getVisualizationData()
}
ngAfterViewInit(): void {
}
//获取统计分析数据
getVisualizationData () {
this.http.get('/api/StatisticsAnalysis').subscribe((data:any)=>{
this.visualizationData = data
let numbers = (data.planStatistics.totalCount).toString();
for (var i = 0; i < numbers.length; i++) {
this.planQuantity.push(numbers[i]);
}
this.keyUnitQuantity = data.companyStatistics.totalCount
this.dataQuantity = data.planStatistics.followedCount
this.threeDimensional = data.planStatistics.planTypeStatistics.plan3DCount
this.twoDimensional = data.planStatistics.planTypeStatistics.plan2DCount
this.cardDimensional = data.planStatistics.planTypeStatistics.planCardCount
this.otherDimensional = data.planStatistics.planTypeStatistics.planOtherCount
this.unitType()
this.unitData()
this.teamData()
this.keyUnit()
})
}
//单位类型统计
unitType () {
let data = []
let color = ['#BE1B94', '#E29217', '#2AFF71', '#BE1B4D', '#D1E217', '#65F5F3','#BE1B94', '#E29217', '#2AFF71', '#BE1B4D', '#D1E217', '#65F5F3'];
//处理数据
this.visualizationData.companyStatistics.buildingTypeStatistics.buildingTypes.forEach((element,index) => {
let msg = {
name: element.buildingTypeName,
value: element.count,
itemStyle: {
color: color[index],
}
}
data.push(msg)
});
//处理数据
var chartHynyxf = echarts.init(document.getElementById('chartHynyxf'), 'skinUpp');
var categoryData = [];
for (var i = 0; i < data.length; i++) {
categoryData.push(data[i].name);
}
var option = {
// 标题
title: {
text: '采集单位类型统计',
top: 0
},
//图例
legend: {
data: ['单位类型统计'],
show: false
},
grid: {
left: 90,
top:40,
// right:8,
width: '70%' ,
height: '70%' ,
},
//提示框
tooltip: {
trigger: 'item',
},
// x轴
xAxis: {
type: 'value'
},
// y轴
yAxis: {
type: 'category',
data: categoryData,
axisLabel: { margin: 3,fontSize:11},
},
// 数据
series: [
{
name: '单位类型统计',
type: 'bar',
label: {
show: true,
position: 'right',
color:'#fff'
},
data: data,
},
],
};
chartHynyxf.setOption(option);
}
//单位数据统计
unitData () {
let data = []
let unitData = []
let planData = []
//处理数据
this.visualizationData.companyStatistics.organizationStatistics.organizations.forEach(element => {
data.push(element.organizationName)
unitData.push(element.count)
});
this.visualizationData.planStatistics.organizationStatistics.organizations.forEach(element => {
planData.push(element.count)
});
//处理数据
var chartDwsjcj = echarts.init(document.getElementById('chartDwsjcj'), 'skinUpp');
var option = {
color: ['#FB33C2', '#00CFF0', '#2C3DE0'],
// 标题
title: {
text: '单位数据采集数量与单位预案数量统计',
left: 0,
top: 0,
},
grid: {
left: 30,
right: 0,
},
//图例
legend: {
top: 0,
data: ['单位数据采集数量', '单位预案编制数量', ],
icon: 'circle',
itemGap: 20,
},
//提示框
tooltip: {
trigger: 'axis',
},
// x轴
xAxis: {
type: 'category',
data: data,
axisLabel: {
interval: 0,
formatter:function(value){
var ret = "";//拼接加\n返回的类目项
var maxLength = 5;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1) { //如果类目项的文字大于1,
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
temp = value.substring(start, end) + "\n";
ret += temp;
} //凭借最终的字符串
return ret;
}else { return value; }
} //function
}
},
// y轴
yAxis: {
type: 'value',
splitLine: {
show: true,
lineStyle: {
color: 'rgba(255,255,255,.4)'
}
},
},
// 数据
series: [
{
name: '单位数据采集数量',
type: 'bar',
data: unitData,
label: {
show: true,
position: "top",
formatter: '{c}',
color: "#fff",
},
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: 'rgba(254,51,194,1)' // 0% 处的颜色
}, {
offset: 1,
color: 'rgba(254,51,194,.5)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
}
}, {
name: '单位预案编制数量',
type: 'bar',
data: planData,
label: {
show: true,
position: "top",
formatter: '{c}',
color: "#fff",
},
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: 'rgba(0,220,254,1)' // 0% 处的颜色
}, {
offset: 1,
color: 'rgba(1,104,191,1)' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
},
}
}
],
};
chartDwsjcj.setOption(option);
}
//全队数据采集和预案编制数量统计
teamData () {
let unitData = []
let planData = []
//处理数据
this.visualizationData.companyStatistics.trendStatistics.added.forEach(element => {
unitData.push(element.count)
});
this.visualizationData.planStatistics.trendStatistics.added.forEach(element => {
planData.push(element.count)
});
//处理数据
var chartQusj = echarts.init(document.getElementById('chartQusj'), 'skinUpp');
var option = {
grid: {
top: 50,
left: 30,
right: 20,
bottom: 20,
},
// 标题
title: {
text: '全队数据采集和预案编制数量统计',
top: -4,
left: 0
},
//图例
legend: {
top: 0,
data: ['单位预案编制数量', '单位数据采集数量'],
},
//提示框
tooltip: {
trigger: 'axis',
},
// x轴
xAxis: {
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
boundaryGap: false,
},
// y轴
yAxis: {
type: 'value',
name: '个'
},
// 数据
series: [{
name: '单位预案编制数量',
type: 'line',
data: planData,
// showSymbol: true,
// symbolSize:6,
// smooth: false,
// label: {
// show: true,
// },
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: 'rgba(60,103,195,1)' // 0% 处的颜色
}, {
offset: 1,
color: 'rgba(0,194,255,.2)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
}
},
{
name: '单位数据采集数量',
type: 'line',
data: unitData,
},
],
};
chartQusj.setOption(option);
}
//重点关注企业预案完成情况
keyUnit () {
let data = []
var realEnd = [];
var shouldEnd = [500,300,300,300,300,300,300,150];
//处理数据
this.visualizationData.planStatistics.buildingTypeStatistics.buildingTypes.forEach(element => {
data.push(element.buildingTypeName)
realEnd.push(element.count)
});
//处理数据
var chartZdgzqy = echarts.init(document.getElementById('chartZdgzqy'), 'skinUpp');
var option = {
color: ['#FB33C2', '#00CFF0', '#2C3DE0'],
// 标题
title: {
text: '重点关注企业预案完成情况',
left: 0,
top: 0,
},
grid: {
left: 30,
bottom: 45
},
//图例
legend: {
top: 0,
data: ['单位类型统计'],
icon: 'circle',
itemGap: 20,
show: false
},
//提示框
tooltip: {
trigger: 'axis',
},
// x轴
xAxis: {
type: 'category',
axisLine: false,
data: data,
axisLabel: {
interval: 0,
formatter:function(value){
var ret = "";//拼接加\n返回的类目项
var maxLength = 3;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1) { //如果类目项的文字大于1,
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
temp = value.substring(start, end) + "\n";
ret += temp;
} //凭借最终的字符串
return ret;
}else { return value; }
} //function
}
},
// y轴
yAxis: [
{
type: 'value',
axisLine: false,
}, {
type: 'value',
axisLine: false,
}
],
// 数据
series: [
// {
// name: '单位类型统计',
// type: 'line',
// data: data,
// itemStyle: {
// color: '#fff'
// },
// label: {
// show: false,
// position: "top",
// formatter: '{c}',
// color: "#fff",
// },
// },
{
name: '目标完成预案数量',
type: 'bar',
barWidth: '16px',
barGap: '-100%',
itemStyle: {
color: '#025D7C'
},
label: {
show: false,
},
data: shouldEnd,
},
{
name: '完成预案数量',
type: 'bar',
barWidth: '16px',
yAxisIndex: 1,
itemStyle: {
color: '#79CBE8'
},
label: {
show: false,
position: "insideTop",
formatter: '{c}',
color: "#fff",
},
data: realEnd,
}
],
};
chartZdgzqy.setOption(option);
}
}