chenjingyu 5 years ago
parent
commit
cdf81b52ff
  1. 21
      src/app/statistic-analysis/addUnit/add-unit-one/add-unit-one.component.ts
  2. 30
      src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.html
  3. 76
      src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.scss
  4. 25
      src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.spec.ts
  5. 179
      src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.ts
  6. 24
      src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.html
  7. 76
      src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.scss
  8. 25
      src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.spec.ts
  9. 194
      src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.ts
  10. 4
      src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.html
  11. 6
      src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.scss
  12. 38
      src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.ts
  13. 15
      src/app/statistic-analysis/addUnit/add-unit-two-type-details/add-unit-two-type-details.component.ts
  14. 4
      src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.html
  15. 4
      src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.scss
  16. 59
      src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.ts
  17. 11
      src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts
  18. 9
      src/app/statistic-analysis/buildingType/building-type-three-details/building-type-three-details.component.ts
  19. 2
      src/app/statistic-analysis/buildingType/building-type-two-forward/building-type-two-forward.component.html
  20. 51
      src/app/statistic-analysis/buildingType/building-type-two-forward/building-type-two-forward.component.ts
  21. 2
      src/app/statistic-analysis/buildingType/building-type-two-reverse/building-type-two-reverse.component.html
  22. 55
      src/app/statistic-analysis/buildingType/building-type-two-reverse/building-type-two-reverse.component.ts
  23. 57
      src/app/statistic-analysis/echarts-data.service.ts
  24. 57
      src/app/statistic-analysis/scheduled-updates/scheduled-updates.component.ts
  25. 11
      src/app/statistic-analysis/state/page-one/page-one.component.ts
  26. 67
      src/app/statistic-analysis/state/page-two-name/page-two-name.component.ts
  27. 102
      src/app/statistic-analysis/state/page-two-time/page-two-time.component.ts
  28. 13
      src/app/statistic-analysis/state/page-zhong-dui-details/page-zhong-dui-details.component.ts
  29. 7
      src/app/statistic-analysis/statistic-analysis-routing.module.ts
  30. 4
      src/app/statistic-analysis/statistic-analysis.module.ts

21
src/app/statistic-analysis/addUnit/add-unit-one/add-unit-one.component.ts

@ -10,14 +10,25 @@ export class AddUnitOneComponent implements OnInit {
constructor(private router: Router) { }
setTimeoutObj//延时器需要清除
ngOnInit(): void {
window.setTimeout(()=>{
this.setTimeoutObj = window.setTimeout(()=>{
this.initCharts()
},0)
}
//组件销毁时
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.indexBzt.clear()
this.indexBzt.dispose()
}
indexBzt//首页饼状图实例
/* 首页饼状图 */
initCharts(){
let indexBzt = echarts.init(document.getElementById('indexBzt'));
this.indexBzt = echarts.init(document.getElementById('indexBzt'));
let options={
title: {
text: '新增单位统计(8900家)',
@ -86,10 +97,10 @@ export class AddUnitOneComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
this.router.navigateByUrl('/statisticanalysis/addUnit_one/addUnit_two_type');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
biaogeTishi(biaotou:string){
var shuju='[{"name":"浦东支队","number":"156","zhanbi":"3%"},{"name":"黄埔支队","number":"144","zhanbi":"2.8%"},'
@ -121,4 +132,6 @@ export class AddUnitOneComponent implements OnInit {
res+='</table></div></div>'
return res
}
}

30
src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.html

@ -0,0 +1,30 @@
<div class="box">
<div class="header">
<div class="queryField">
<form #form="ngForm" (ngSubmit)="Submit(form.value)">
<span>查询年份:</span>
<mat-form-field>
<mat-select [(ngModel)]="selectOneYear" name='selectOneYear'>
<mat-option *ngFor="let item of years" [value]="item">{{item}}</mat-option>
</mat-select>
</mat-form-field>
<span>查询月份:</span>
<mat-form-field>
<mat-select [(ngModel)]="selectStartMonth" name='selectStartMonth'>
<mat-option *ngFor="let item of selectMonth" [value]="item">{{item}}</mat-option>
</mat-select>
</mat-form-field>
<button type="submit" mat-raised-button color="primary">查询</button>
</form>
</div>
<div class="btnbox">
<button mat-stroked-button (click)="backBtn()">返回</button>
</div>
</div>
<div class="echartsbox">
<div id="barEchart">
</div>
</div>
</div>

76
src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.scss

@ -0,0 +1,76 @@
.box{
width: 100%;
height: 92%;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
.echartsbox{
width: 100%;
height: 100%;
// overflow: auto;
}
#Line{
width: 50%;
height: 420px;
margin: 50px auto;
}
}
.publicCss{
height: 350px;
width: 50%;
display: inline-block;
box-sizing: border-box;
padding: 20px;
}
//头部搜索栏
.header {
border-bottom: 1px solid #999;
height: 80px;
min-height: 81px;;
box-sizing: border-box;
// padding: 0 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items:center;
justify-content:center;
.queryField {
margin: 0 10px;
font-size: 14px;
.mat-form-field {
width: 130px;
max-height: 50px;;
margin: 0 15px 0 10px;
}
}
.btnbox{
height: 80px;
display: flex;
flex-direction:column;
justify-content: space-around;
position: fixed;
top: 64px;
right: 4%;
width: 88px;
button{
width: 88px;
height: 36px;
}
}
}
.echartsbox{
width: 100%;
height: 100%;
overflow: auto;
#barEchart{
width: 100%;
height: 350px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
}

25
src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AddUnitThreeBarDetailsComponent } from './add-unit-three-bar-details.component';
describe('AddUnitThreeBarDetailsComponent', () => {
let component: AddUnitThreeBarDetailsComponent;
let fixture: ComponentFixture<AddUnitThreeBarDetailsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AddUnitThreeBarDetailsComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddUnitThreeBarDetailsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

179
src/app/statistic-analysis/addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component.ts

@ -0,0 +1,179 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { ActivatedRoute } from '@angular/router';
import { EchartsDataService } from '../../echarts-data.service';
declare var echarts: any;
@Component({
selector: 'app-add-unit-three-bar-details',
templateUrl: './add-unit-three-bar-details.component.html',
styleUrls: ['./add-unit-three-bar-details.component.scss']
})
export class AddUnitThreeBarDetailsComponent implements OnInit {
constructor(private router: Router,public dialog: MatDialog,public snackBar: MatSnackBar,private serviceData: EchartsDataService,public route: ActivatedRoute) { }
time:String
buildingTypeName:String
level:String
setTimeoutObj//延时器需要清除
ngOnInit(): void {
this.dateInit ()
this.route.queryParams.subscribe(params => {
this.time = params['time'];
this.buildingTypeName = params['buildingTpye'];
this.level = params['level'];
});
this.setTimeoutObj = window.setTimeout(()=>{
this.detailEcharts()
},0)
}
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.detailPlanEchart.clear()
this.detailPlanEchart.dispose()
}
selectType:string = 'month'; //选择当前的 查询类型 按月/年
//查询数据
years:any = []
selectMonth:any = [1,2,3,4,5,6,7,8,9,10,11,12]
//日期初始化
dateInit () {
let date = (new Date()).getFullYear()
for (let i=date; i>=date-10;i--) {
this.years.unshift(i)
}
}
selectOneYear:any = (new Date()).getFullYear() //开始年份
selectStartMonth:any = 1 //开始月份
Submit (e) {
}
selectStartYear:any = (new Date()).getFullYear() //开始年份
topTextlabel = {
show: true, // 开启显示
position: 'top', // 在上方显示
distance: 10, // 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
verticalAlign: 'middle',
textStyle: { // 数值样式
color: 'black',
fontSize: 12
}
}//柱状图数值顶部显示
zhongNameData = ["浦东中队","黄埔中队","徐汇中队","长宁中队","静安中队","普陀中队","虹口中队","杨浦中队","闵行中队","宝山中队","嘉定中队"]
zhongNumData = [200,190,180,170,160,150,140,130,120,110,100]
zhiNameData = ["浦东支队","黄埔支队","徐汇支队","长宁支队","静安支队","普陀支队","虹口支队","杨浦支队","闵行支队","宝山支队","嘉定支队"]
zhiNumData = [300,290,280,270,260,250,240,230,220,210,200]
detailPlanEchart
option
detailEcharts(){
this.detailPlanEchart = echarts.init(document.getElementById('barEchart'));
this.option = {
title: {
text: this.time + '(' +this.buildingTypeName + ')',
left: "center",
textStyle: {
fontSize: 28
}
},
xAxis: {
type: 'category',
data: this.zhiNameData,
// axisLabel: this.axisLabel
},
yAxis: {
type: 'value'
},
tooltip: {
trigger: 'item',
formatter: (params)=>{
return this.tableTooltip(params)
},
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
position:this.serviceData.tableTooltipNoShow2
},
series: [{
data: this.zhiNumData,
type: 'bar',
showBackground: true,
barWidth :'58',
backgroundStyle: {
color: 'rgba(220, 220, 220, 0.8)'
},
label: this.topTextlabel
}]
};
this.detailPlanEchart.setOption(this.option);
this.detailPlanEchart.on("click",(params)=>{
if(this.level == "zhidui"){//如果是支队则跳转
// this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time/three_barDetails'],{queryParams:{'level':'zhongdui','time':params.name,'buildingTpye':this.buildingTypeName}});
this.level = "zhongdui"
this.option.title.text = params.name + '(' +this.buildingTypeName + ')'
this.option.xAxis.data = this.zhongNameData
this.option.series[0].data = this.zhongNumData
this.detailPlanEchart.setOption(this.option)
}else{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('已到达最底层','确定',config);
}
})
}
//返回按钮
backBtn(){
if(this.level == "zhongdui"){
this.level = "zhidui"
this.option.title.text = this.time + '(' +this.buildingTypeName + ')'
this.option.xAxis.data = this.zhiNameData
this.option.series[0].data = this.zhiNumData
this.detailPlanEchart.setOption(this.option)
}else{
window.history.go(-1)
}
}
tableTooltip(params:any){
var data
if(this.level == "zhidui"){
data = this.serviceData.tableDataZhong
}else{
data = [
{name:params.name,number:params.value,zhanbi:(params.value/1340 * 100).toFixed(2) + "%"}
]
}
var res = '<div class="tishi" style=" backgroundColor:rgba(255,255,255,1);width:100%;height:100%;"><div style="padding:10px 0 5px 0"><span style="color:#000000;font-size:30px;text-align: center;display:block;">'+params.name+'</span></div>'
res+='</br><div style="width:300px;height:100%;padding:0 20px 15px 20px"><table style="width:300px; background:#FFFFFF; color:#000000;border-collapse:collapse;"cellspacing="0"; >';
res+='<thead><tr>';
res+='<td style="text-align:center;width:30%;border:1px solid #000000">名称</td>';
res+='<td style="text-align:center;width:30%;border:1px solid #000000">数量</td>'
res+='<td style="text-align:center;width:30%;border:1px solid #000000">总占比</td>'
res+='</tr></thead>'
res+='<tbody>';
for(var i=0;i<data.length;i++){
res+='<tr>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].name+'</td>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].number+'</td>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].zhanbi+'</td></tr>'
}
res+='</tbody>'
// res+='<tfoot><td style="text-align:center;border:1px solid #000000">总计</td><td style="text-align:center;border:1px solid #000000">1356</td><td style="text-align:center;border:1px solid #000000">19%</td></tfoot>'
res+='</table></div></div>'
return res
}
}

24
src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.html

@ -0,0 +1,24 @@
<div class="box">
<div class="header">
<div class="queryField">
<form #form="ngForm" (ngSubmit)="Submit(form.value)">
<span>查询年份:</span>
<mat-form-field>
<mat-select [(ngModel)]="selectOneYear" name='selectOneYear'>
<mat-option *ngFor="let item of years" [value]="item">{{item}}</mat-option>
</mat-select>
</mat-form-field>
<button type="submit" mat-raised-button color="primary">查询</button>
</form>
</div>
<div class="btnbox">
<button mat-stroked-button (click)="backBtn()">返回</button>
</div>
</div>
<div class="echartsbox">
<div id="barEchart">
</div>
</div>
</div>

76
src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.scss

@ -0,0 +1,76 @@
.box{
width: 100%;
height: 92%;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
.echartsbox{
width: 100%;
height: 100%;
overflow: auto;
}
#Line{
width: 50%;
height: 420px;
margin: 50px auto;
}
}
.publicCss{
height: 350px;
width: 50%;
display: inline-block;
box-sizing: border-box;
padding: 20px;
}
//头部搜索栏
.header {
border-bottom: 1px solid #999;
height: 80px;
min-height: 81px;;
box-sizing: border-box;
// padding: 0 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items:center;
justify-content:center;
.queryField {
margin: 0 10px;
font-size: 14px;
.mat-form-field {
width: 130px;
max-height: 50px;;
margin: 0 15px 0 10px;
}
}
.btnbox{
height: 80px;
display: flex;
flex-direction:column;
justify-content: space-around;
position: fixed;
top: 64px;
right: 4%;
width: 88px;
button{
width: 88px;
height: 36px;
}
}
}
.echartsbox{
width: 100%;
height: 100%;
overflow: auto;
#barEchart{
width: 60%;
height: 350px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
}

25
src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AddUnitThreeLineDetailsComponent } from './add-unit-three-line-details.component';
describe('AddUnitThreeLineDetailsComponent', () => {
let component: AddUnitThreeLineDetailsComponent;
let fixture: ComponentFixture<AddUnitThreeLineDetailsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AddUnitThreeLineDetailsComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddUnitThreeLineDetailsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

194
src/app/statistic-analysis/addUnit/add-unit-three-line-details/add-unit-three-line-details.component.ts

@ -0,0 +1,194 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { ActivatedRoute } from '@angular/router';
import { EchartsDataService } from '../../echarts-data.service';
declare var echarts: any;
@Component({
selector: 'app-add-unit-three-line-details',
templateUrl: './add-unit-three-line-details.component.html',
styleUrls: ['./add-unit-three-line-details.component.scss']
})
export class AddUnitThreeLineDetailsComponent implements OnInit {
constructor(private router: Router,public dialog: MatDialog,public snackBar: MatSnackBar,private serviceData: EchartsDataService,public route: ActivatedRoute) { }
year:String
buildingTypeName:String
level:String
setTimeoutObj//延时器需要清除
ngOnInit(): void {
this.dateInit ()
this.route.queryParams.subscribe(params => {
this.year = params['year'];
this.buildingTypeName = params['buildingType'];
});
this.setTimeoutObj = window.setTimeout(()=>{
this.detailEcharts()
})
}
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.detailPlanEchart.clear()
this.detailPlanEchart.dispose()
}
selectType:string = 'month'; //选择当前的 查询类型 按月/年
//查询数据
years:any = []
selectMonth:any = [1,2,3,4,5,6,7,8,9,10,11,12]
//日期初始化
dateInit () {
let date = (new Date()).getFullYear()
for (let i=date; i>=date-10;i--) {
this.years.unshift(i)
}
}
selectOneYear:any = (new Date()).getFullYear() //开始年份
selectStartMonth:any = 1 //开始月份
Submit (e) {
}
selectStartYear:any = (new Date()).getFullYear() //开始年份
topTextlabel = {
show: true, // 开启显示
position: 'top', // 在上方显示
distance: 10, // 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
verticalAlign: 'middle',
textStyle: { // 数值样式
color: 'black',
fontSize: 12
}
}//柱状图数值顶部显示
zhongNameData = ["浦东中队","黄埔中队","徐汇中队","长宁中队","静安中队","普陀中队","虹口中队","杨浦中队","闵行中队","宝山中队","嘉定中队"]
zhongNumData = [200,190,180,170,160,150,140,130,120,110,100]
zhiNameData = ["浦东支队","黄埔支队","徐汇支队","长宁支队","静安支队","普陀支队","虹口支队","杨浦支队","闵行支队","宝山支队","嘉定支队"]
zhiNumData = [300,290,280,270,260,250,240,230,220,210,200]
detailPlanEchart
option
date = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月','9月']
dateNum = [270, 253, 244, 199, 189, 173, 160, 198,200]
detailEcharts(){
this.detailPlanEchart = echarts.init(document.getElementById('barEchart'), 'skinUpp');
this.option = {
grid: {
top: 50,
left:40,
right: 20,
bottom: 20,
},
// 标题
title: {
text: this.buildingTypeName + '(' + this.year + ')',
top: -4,
left: 'center',
textStyle:{
//文字颜色
color:'#000',
}
},
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
if(params[0].seriesName == "year"){
return this.serviceData.tableTooltip(this.serviceData.monthTooltip,params[0].name)
}else{
return this.serviceData.tableTooltip(this.serviceData.tableDataZhi,params[0].name)
}
},
position:this.serviceData.tableTooltipNoShow2
},
// x轴
xAxis: {
type: 'category',
data: this.date,
axisLabel: {
color: "#000", //刻度线标签颜色
},
//设置坐标轴字体颜色和宽度
axisLine: {
lineStyle: {
color: "#000",
},
},
splitLine: {//分割线配置
show:true,
lineStyle: {
color: '#999',
}
}
},
// y轴
yAxis: {
type: 'value',
name: '个',
axisLabel: {
color: "#000" //刻度线标签颜色
},
//设置坐标轴字体颜色和宽度
axisLine: {
lineStyle: {
color: "#000",
}
}
},
// 数据
series: [{
name: 'xxx',
type: 'line',
data: this.dateNum,
}
],
};
this.detailPlanEchart.setOption(this.option);
this.detailPlanEchart.getZr().on('click',params=>{
const pointInPixel= [params.offsetX, params.offsetY];
if (this.detailPlanEchart.containPixel('grid',pointInPixel)) {
let xIndex=this.detailPlanEchart.convertFromPixel({seriesIndex:0},[params.offsetX, params.offsetY])[0];
/*事件处理代码书写位置*/
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time/three_barDetails'],{queryParams:{'level':'zhidui','time':this.option.xAxis.data[xIndex],'buildingTpye':this.buildingTypeName}});
}
});
}
//返回按钮
backBtn(){
window.history.go(-1)
}
tableTooltip(params:any){
var data = [
{name:params.name,number:params.value,zhanbi:(params.value/1340 * 100).toFixed(2) + "%"}
]
var res = '<div class="tishi" style=" backgroundColor:rgba(255,255,255,1);width:100%;height:100%;"><div style="padding:10px 0 5px 0"><span style="color:#000000;font-size:30px;text-align: center;display:block;">'+params.name+'</span></div>'
res+='</br><div style="width:300px;height:100%;padding:0 20px 15px 20px"><table style="width:300px; background:#FFFFFF; color:#000000;border-collapse:collapse;"cellspacing="0"; >';
res+='<thead><tr>';
res+='<td style="text-align:center;width:30%;border:1px solid #000000">名称</td>';
res+='<td style="text-align:center;width:30%;border:1px solid #000000">数量</td>'
res+='<td style="text-align:center;width:30%;border:1px solid #000000">总占比</td>'
res+='</tr></thead>'
res+='<tbody>';
for(var i=0;i<data.length;i++){
res+='<tr>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].name+'</td>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].number+'</td>'
res+='<td style="text-align:center;border:1px solid #000000">'+data[i].zhanbi+'</td></tr>'
}
res+='</tbody>'
// res+='<tfoot><td style="text-align:center;border:1px solid #000000">总计</td><td style="text-align:center;border:1px solid #000000">1356</td><td style="text-align:center;border:1px solid #000000">19%</td></tfoot>'
res+='</table></div></div>'
return res
}
}

4
src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.html

@ -60,8 +60,8 @@
<button mat-raised-button color="primary" style="margin-left: 10px;" (click)='toggleFalse()'>纵向查询</button>
</div> -->
<div class="btnbox">
<button mat-stroked-button (click)="forward()">类型统计</button>
<button mat-stroked-button (click)="reverse()">区间选择</button>
<button mat-stroked-button (click)="forward()">类型统计</button>
<button mat-stroked-button (click)="reverse()" [ngClass]="{'selectedBtn': true}">区间选择</button>
</div>
</div>
<div class="echartsbox">

6
src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.scss

@ -60,4 +60,8 @@
}
}
}
}
.selectedBtn{
background-color: #2196f3;
color: white;
}

38
src/app/statistic-analysis/addUnit/add-unit-two-time/add-unit-two-time.component.ts

@ -17,15 +17,24 @@ export class AddUnitTwoTimeComponent implements OnInit {
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time'])
}
constructor(private router: Router,public dialog: MatDialog,public snackBar: MatSnackBar,private serviceData: EchartsDataService) { }
setTimeoutObj//延时器需要清除
ngOnInit(): void {
this.dateInit ()
setTimeout(() => {
this.setTimeoutObj = setTimeout(() => {
this.oneInit (this.date,this.dateNum)
this.twoInit (this.date,this.dateNum,'year')
this.twoInit (this.date,this.dateNum,'month')
}, 0);
}
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.chartQusj.clear()
this.chartQusj.dispose()
this.forArr.forEach(item => {
item.echart.clear()
item.echart.dispose()
})
}
selectType:string = 'month'; //选择当前的 查询类型 按月/年
//查询数据
@ -103,6 +112,7 @@ export class AddUnitTwoTimeComponent implements OnInit {
}
chartQusj//顶部大图实例
forArr = [{id:'gaoceng',name:'高层',echart:null},
{id:'dixia',name:'地下',echart:null},
{id:'guidao',name:'轨道交通',echart:null},
@ -129,7 +139,7 @@ export class AddUnitTwoTimeComponent implements OnInit {
//新增数量统计
oneInit (date,dateNum) {
var chartQusj = echarts.init(document.getElementById('Line'), 'skinUpp');
this.chartQusj = echarts.init(document.getElementById('Line'), 'skinUpp');
var option = {
grid: {
top: 70,
@ -201,7 +211,7 @@ export class AddUnitTwoTimeComponent implements OnInit {
}
],
}
chartQusj.setOption(option);
this.chartQusj.setOption(option);
}
//剩余折线图
@ -233,7 +243,11 @@ export class AddUnitTwoTimeComponent implements OnInit {
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.serviceData.tableTooltip(this.serviceData.tableDataZhi,params[0].name)
if(params[0].seriesName == "year"){
return this.serviceData.tableTooltip(this.serviceData.monthTooltip,params[0].name)
}else{
return this.serviceData.tableTooltip(this.serviceData.tableDataZhi,params[0].name)
}
}
},
// x轴
@ -279,16 +293,18 @@ export class AddUnitTwoTimeComponent implements OnInit {
],
};
item.echart.setOption(option,true);
// item.echart.on('click', (params) => {
// console.log(params)
// });
item.echart.getZr().on('click',params=>{
const pointInPixel= [params.offsetX, params.offsetY];
if (item.echart.containPixel('grid',pointInPixel)) {
let xIndex=item.echart.convertFromPixel({seriesIndex:0},[params.offsetX, params.offsetY])[0];
/*事件处理代码书写位置*/
console.log(option.series[0].data[xIndex],option.xAxis.data[xIndex])
// console.log(option.series[0].data[xIndex],option.xAxis.data[xIndex],option.title.text,option.series[0].name)
if(option.series[0].name == "year"){
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time/three_lineDetails'],{queryParams:{'year':this.date2[xIndex],'buildingType':option.title.text}});
}else{
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time/three_barDetails'],{queryParams:{'level':'zhidui','time':option.xAxis.data[xIndex],'buildingTpye':option.title.text}});
}
}
});
})

15
src/app/statistic-analysis/addUnit/add-unit-two-type-details/add-unit-two-type-details.component.ts

@ -19,16 +19,21 @@ export class AddUnitTwoTypeDetailsComponent implements OnInit {
organizationName:String
buildingTypeName:String
setTimeoutObj//延时器需要清除
ngOnInit(): void {
this.route.queryParams.subscribe(params => {
this.organizationName = params['organizationName'];
this.buildingTypeName = params['buildingTypeName'];
});
window.setTimeout(()=>{
this.setTimeoutObj = window.setTimeout(()=>{
this.detailEcharts()
})
}
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.detailPlanEchart.clear()
this.detailPlanEchart.dispose()
}
topTextlabel = {
show: true, // 开启显示
position: 'top', // 在上方显示
@ -41,8 +46,10 @@ export class AddUnitTwoTypeDetailsComponent implements OnInit {
}//柱状图数值顶部显示
zhongNameData = ["浦东中队","黄埔中队","徐汇中队","长宁中队","静安中队","普陀中队","虹口中队","杨浦中队","闵行中队","宝山中队","嘉定中队"]
zhongNumData = [200,190,180,170,160,150,140,130,120,110,100]
detailPlanEchart//echarts实例
detailEcharts(){
var detailPlanEchart = echarts.init(document.getElementById('barEchart'));
this.detailPlanEchart = echarts.init(document.getElementById('barEchart'));
var option = {
title: {
text: this.buildingTypeName + '(' +this.organizationName + ')',
@ -79,7 +86,7 @@ export class AddUnitTwoTypeDetailsComponent implements OnInit {
label: this.topTextlabel
}]
};
detailPlanEchart.setOption(option);
this.detailPlanEchart.setOption(option);
}

4
src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.html

@ -1,8 +1,8 @@
<div class="box">
<div class="topbox">
<div class="btnbox">
<button mat-stroked-button (click)="forward()">类型统计</button>
<button mat-stroked-button (click)="reverse()">区间选择</button>
<button mat-stroked-button (click)="forward()" [ngClass]="{'selectedBtn': url == '/statisticanalysis/addUnit_one/addUnit_two_type'}">类型统计</button>
<button mat-stroked-button (click)="reverse()" [ngClass]="{'selectedBtn': url == '/statisticanalysis/addUnit_one/addUnit_two_time'}">区间选择</button>
</div>
</div>
<div class="echartsbox">

4
src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.scss

@ -42,4 +42,8 @@
display: inline-block;
box-sizing: border-box;
padding: 20px;
}
.selectedBtn{
background-color: #2196f3;
color: white;
}

59
src/app/statistic-analysis/addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component.ts

@ -16,12 +16,23 @@ export class AddUnitTwoTypeStatisticsComponent implements OnInit {
reverse(){
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_time'])
}
url = "/statisticanalysis/addUnit_one/addUnit_two_type" //当前路由地址
setTimeoutObj//延时器需要清除
ngOnInit(): void {
window.setTimeout(()=>{
this.setTimeoutObj = window.setTimeout(()=>{
this.initCharts()
this.barEcharts()
},0)
}
ngOnDestroy(){
window.clearTimeout(this.setTimeoutObj);
this.indexBzt.clear()
this.indexBzt.dispose()
this.forArr.forEach(item => {
item.echart.clear()
item.echart.dispose()
})
}
axisLabel = {
interval: 0,
@ -94,26 +105,26 @@ export class AddUnitTwoTypeStatisticsComponent implements OnInit {
{name:"崇明中队",number:"55",zhanbi:"0.3%"} ]
zhiNameData = ["浦东支队","黄埔支队","徐汇支队","长宁支队","静安支队","普陀支队","虹口支队","杨浦支队","闵行支队","宝山支队","嘉定支队","松江支队","金山支队","崇明支队"]
zhiNumData = [200,190,180,170,160,150,140,130,120,110,100,90,80,70]
forArr = [{id:'gaoceng',name:'高层'},
{id:'dixia',name:'地下'},
{id:'guidao',name:'轨道交通'},
{id:'huagong',name:'化工生产'},
{id:'chuguan',name:'储罐类'},
{id:'changfang',name:'厂房'},
{id:'gujianzhu',name:'古建筑'},
{id:'shichang',name:'商市场'},
{id:'yiyuan',name:'医院'},
{id:'xuexiao',name:'学校'},
{id:'binguan',name:'宾馆'},
{id:'yule',name:'娱乐场所'},
{id:'canyin',name:'餐饮业'},
{id:'yingyuan',name:'影剧院'},
{id:'zhanlan',name:'展览建筑'},
{id:'suidao',name:'隧道'}]
forArr = [{id:'gaoceng',name:'高层',echart:null},
{id:'dixia',name:'地下',echart:null},
{id:'guidao',name:'轨道交通',echart:null},
{id:'huagong',name:'化工生产',echart:null},
{id:'chuguan',name:'储罐类',echart:null},
{id:'changfang',name:'厂房',echart:null},
{id:'gujianzhu',name:'古建筑',echart:null},
{id:'shichang',name:'商市场',echart:null},
{id:'yiyuan',name:'医院',echart:null},
{id:'xuexiao',name:'学校',echart:null},
{id:'binguan',name:'宾馆',echart:null},
{id:'yule',name:'娱乐场所',echart:null},
{id:'canyin',name:'餐饮业',echart:null},
{id:'yingyuan',name:'影剧院',echart:null},
{id:'zhanlan',name:'展览建筑',echart:null},
{id:'suidao',name:'隧道',echart:null}]
indexBzt //顶部饼状图
/* 顶部饼状图 */
initCharts(){
let indexBzt = echarts.init(document.getElementById('pie'));
this.indexBzt = echarts.init(document.getElementById('pie'));
let options={
title: {
text: '新增单位统计(8900家)',
@ -216,16 +227,16 @@ export class AddUnitTwoTypeStatisticsComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
// this.router.navigateByUrl('/statisticanalysis/buildingType_two_forward');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
//柱状图
barEcharts(){
this.forArr.forEach(item=>{
let _this = this
let addEchart = echarts.init(document.getElementById(item.id));
item.echart = echarts.init(document.getElementById(item.id));
let option = {
title: {
text: item.name,
@ -263,8 +274,8 @@ export class AddUnitTwoTypeStatisticsComponent implements OnInit {
label: this.topTextlabel
}]
};
addEchart.setOption(option);
addEchart.on('click', (params) => {
item.echart.setOption(option);
item.echart.on('click', (params) => {
this.router.navigate(['/statisticanalysis/addUnit_one/addUnit_two_typeDetails'],{queryParams:{'organizationName':params.name,'buildingTypeName':item.name}})
});
})

11
src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts

@ -15,9 +15,14 @@ export class BuildingTypeOneComponent implements OnInit {
this.initCharts()
},0)
}
ngOnDestroy(): void {
this.indexBzt.clear()
this.indexBzt.dispose()
}
/* 首页饼状图 */
indexBzt
initCharts(){
let indexBzt = echarts.init(document.getElementById('indexBzt'));
this.indexBzt = echarts.init(document.getElementById('indexBzt'));
let options={
title: {
text: '建筑类型统计(8900家)',
@ -86,10 +91,10 @@ export class BuildingTypeOneComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
this.router.navigateByUrl('/statisticanalysis/buildingType_one/buildingType_two_forward');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
biaogeTishi(biaotou:string){
var shuju='[{"name":"浦东支队","number":"156","zhanbi":"3%"},{"name":"黄埔支队","number":"144","zhanbi":"2.8%"},'

9
src/app/statistic-analysis/buildingType/building-type-three-details/building-type-three-details.component.ts

@ -29,6 +29,10 @@ export class BuildingTypeThreeDetailsComponent implements OnInit {
this.detailEcharts()
})
}
ngOnDestroy(): void {
this.detailPlanEchart.clear()
this.detailPlanEchart.dispose()
}
topTextlabel = {
show: true, // 开启显示
position: 'top', // 在上方显示
@ -41,8 +45,9 @@ export class BuildingTypeThreeDetailsComponent implements OnInit {
}//柱状图数值顶部显示
zhongNameData = ["浦东中队","黄埔中队","徐汇中队","长宁中队","静安中队","普陀中队","虹口中队","杨浦中队","闵行中队","宝山中队","嘉定中队"]
zhongNumData = [200,190,180,170,160,150,140,130,120,110,100]
detailPlanEchart
detailEcharts(){
var detailPlanEchart = echarts.init(document.getElementById('barEchart'));
this.detailPlanEchart = echarts.init(document.getElementById('barEchart'));
var option = {
title: {
text: this.buildingTypeName + '(' +this.organizationName + ')',
@ -79,7 +84,7 @@ export class BuildingTypeThreeDetailsComponent implements OnInit {
label: this.topTextlabel
}]
};
detailPlanEchart.setOption(option);
this.detailPlanEchart.setOption(option);
}

2
src/app/statistic-analysis/buildingType/building-type-two-forward/building-type-two-forward.component.html

@ -1,7 +1,7 @@
<div class="box">
<div class="topbox">
<div class="btnbox">
<button mat-stroked-button (click)="forward()">正向查询</button>
<button mat-stroked-button (click)="forward()" style="background-color: #2196f3;color: white;">正向查询</button>
<button mat-stroked-button (click)="reverse()">反向查询</button>
</div>
</div>

51
src/app/statistic-analysis/buildingType/building-type-two-forward/building-type-two-forward.component.ts

@ -21,6 +21,14 @@ export class BuildingTypeTwoForwardComponent implements OnInit {
this.barEcharts()
},0)
}
ngOnDestroy(): void {
this.indexBzt.clear()
this.indexBzt.dispose()
this.forArr.forEach(item => {
item.echart.clear()
item.echart.dispose()
})
}
axisLabel = {
interval: 0,
formatter:function(value)
@ -112,26 +120,27 @@ export class BuildingTypeTwoForwardComponent implements OnInit {
]
buildingTypeName = ['高层','地下','轨道交通','化工生产','储罐类','厂房','古建筑','商市场','医院','学校','宾馆','娱乐场所','餐饮业','影剧院','展览建筑','隧道']
buildingTypeNum = [200,190,180,170,160,150,140,130,120,110,100,90,80,70,60,50]
forArr = [{id:'gaoceng',name:'浦东支队'},
{id:'dixia',name:'黄埔支队'},
{id:'guidao',name:'徐汇支队'},
{id:'huagong',name:'长宁支队'},
{id:'chuguan',name:'静安支队'},
{id:'changfang',name:'普陀支队'},
{id:'gujianzhu',name:'虹口支队'},
{id:'shichang',name:'杨浦支队'},
{id:'yiyuan',name:'闵行支队'},
{id:'xuexiao',name:'宝山支队'},
{id:'binguan',name:'嘉定支队'},
{id:'yule',name:'松江支队'},
{id:'canyin',name:'金山支队'},
{id:'yingyuan',name:'崇明支队'},
{id:'zhanlan',name:'青浦支队'},
forArr = [{id:'gaoceng',name:'浦东支队',echart:null},
{id:'dixia',name:'黄埔支队',echart:null},
{id:'guidao',name:'徐汇支队',echart:null},
{id:'huagong',name:'长宁支队',echart:null},
{id:'chuguan',name:'静安支队',echart:null},
{id:'changfang',name:'普陀支队',echart:null},
{id:'gujianzhu',name:'虹口支队',echart:null},
{id:'shichang',name:'杨浦支队',echart:null},
{id:'yiyuan',name:'闵行支队',echart:null},
{id:'xuexiao',name:'宝山支队',echart:null},
{id:'binguan',name:'嘉定支队',echart:null},
{id:'yule',name:'松江支队',echart:null},
{id:'canyin',name:'金山支队',echart:null},
{id:'yingyuan',name:'崇明支队',echart:null},
{id:'zhanlan',name:'青浦支队',echart:null},
]
/* 顶部饼状图 */
indexBzt
initCharts(){
let indexBzt = echarts.init(document.getElementById('pie'));
this.indexBzt = echarts.init(document.getElementById('pie'));
let options={
title: {
text: '组织机构统计(5500家)',
@ -217,16 +226,16 @@ export class BuildingTypeTwoForwardComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
// this.router.navigateByUrl('/statisticanalysis/buildingType_two_forward');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
//柱状图
barEcharts(){
this.forArr.forEach(item=>{
let _this = this
let Echart = echarts.init(document.getElementById(item.id));
item.echart = echarts.init(document.getElementById(item.id));
let option = {
color: ['#3398DB'],
title: {
@ -265,8 +274,8 @@ export class BuildingTypeTwoForwardComponent implements OnInit {
label: this.topTextlabel
}]
};
Echart.setOption(option);
Echart.on('click', (params) => {
item.echart.setOption(option);
item.echart.on('click', (params) => {
this.router.navigate(['/statisticanalysis/buildingType_one/buildingType_three_details'],{queryParams:{'organizationName':item.name,'buildingTypeName':params.name}})
});
})

2
src/app/statistic-analysis/buildingType/building-type-two-reverse/building-type-two-reverse.component.html

@ -2,7 +2,7 @@
<div class="topbox">
<div class="btnbox">
<button mat-stroked-button (click)="forward()">正向查询</button>
<button mat-stroked-button (click)="reverse()">反向查询</button>
<button mat-stroked-button (click)="reverse()" style="background-color:#2196f3;color: white;">反向查询</button>
</div>
</div>
<div class="echartsbox">

55
src/app/statistic-analysis/buildingType/building-type-two-reverse/building-type-two-reverse.component.ts

@ -22,7 +22,14 @@ export class BuildingTypeTwoReverseComponent implements OnInit {
this.barEcharts()
},0)
}
ngOnDestroy(): void {
this.indexBzt.clear()
this.indexBzt.dispose()
this.forArr.forEach(item => {
item.echart.clear()
item.echart.dispose()
})
}
axisLabel = {
interval: 0,
formatter:function(value)
@ -94,26 +101,27 @@ export class BuildingTypeTwoReverseComponent implements OnInit {
{name:"崇明中队",number:"55",zhanbi:"0.3%"} ]
zhiNameData = ["浦东支队","黄埔支队","徐汇支队","长宁支队","静安支队","普陀支队","虹口支队","杨浦支队","闵行支队","宝山支队","嘉定支队","松江支队","金山支队","崇明支队"]
zhiNumData = [200,190,180,170,160,150,140,130,120,110,100,90,80,70]
forArr = [{id:'gaoceng',name:'高层'},
{id:'dixia',name:'地下'},
{id:'guidao',name:'轨道交通'},
{id:'huagong',name:'化工生产'},
{id:'chuguan',name:'储罐类'},
{id:'changfang',name:'厂房'},
{id:'gujianzhu',name:'古建筑'},
{id:'shichang',name:'商市场'},
{id:'yiyuan',name:'医院'},
{id:'xuexiao',name:'学校'},
{id:'binguan',name:'宾馆'},
{id:'yule',name:'娱乐场所'},
{id:'canyin',name:'餐饮业'},
{id:'yingyuan',name:'影剧院'},
{id:'zhanlan',name:'展览建筑'},
{id:'suidao',name:'隧道'}]
forArr = [{id:'gaoceng',name:'高层',echart:null},
{id:'dixia',name:'地下',echart:null},
{id:'guidao',name:'轨道交通',echart:null},
{id:'huagong',name:'化工生产',echart:null},
{id:'chuguan',name:'储罐类',echart:null},
{id:'changfang',name:'厂房',echart:null},
{id:'gujianzhu',name:'古建筑',echart:null},
{id:'shichang',name:'商市场',echart:null},
{id:'yiyuan',name:'医院',echart:null},
{id:'xuexiao',name:'学校',echart:null},
{id:'binguan',name:'宾馆',echart:null},
{id:'yule',name:'娱乐场所',echart:null},
{id:'canyin',name:'餐饮业',echart:null},
{id:'yingyuan',name:'影剧院',echart:null},
{id:'zhanlan',name:'展览建筑',echart:null},
{id:'suidao',name:'隧道',echart:null}]
/* 顶部饼状图 */
indexBzt
initCharts(){
let indexBzt = echarts.init(document.getElementById('pie'));
this.indexBzt = echarts.init(document.getElementById('pie'));
let options={
title: {
text: '建筑类型统计(8900家)',
@ -216,16 +224,16 @@ export class BuildingTypeTwoReverseComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
// this.router.navigateByUrl('/statisticanalysis/buildingType_two_forward');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
//柱状图
barEcharts(){
this.forArr.forEach(item=>{
let _this = this
let addEchart = echarts.init(document.getElementById(item.id));
item.echart = echarts.init(document.getElementById(item.id));
let option = {
title: {
text: item.name,
@ -263,12 +271,11 @@ export class BuildingTypeTwoReverseComponent implements OnInit {
label: this.topTextlabel
}]
};
addEchart.setOption(option);
addEchart.on('click', (params) => {
item.echart.setOption(option);
item.echart.on('click', (params) => {
this.router.navigate(['/statisticanalysis/buildingType_one/buildingType_three_details'],{queryParams:{'organizationName':params.name,'buildingTypeName':item.name}})
});
})
}
//提示框表格
tableTooltip(dataArr,title:string){

57
src/app/statistic-analysis/echarts-data.service.ts

@ -18,6 +18,7 @@ export class EchartsDataService {
//echarts 悬停 显示表格假数据
//支队提示框
tableDataZhi = [
{name:"浦东支队",number:"156",zhanbi:"3%"},
@ -94,6 +95,16 @@ export class EchartsDataService {
{name:"十二月",number:"122",zhanbi:"1.6%"},
{name:"总计",number:"984",zhanbi:"20%"}
]
//预案提示框
planData = [
{name:"预案新增",number:"156",zhanbi:"19%"},
{name:"预案审核通过",number:"144",zhanbi:"21%"},
{name:"预案编制",number:"133",zhanbi:"20%"},
{name:"预案审核退回",number:"122",zhanbi:"17%"},
{name:"预案审核中",number:"120",zhanbi:"23%"},
{name:"总计",number:"561",zhanbi:"100%"},
]
//提示框表格
tableTooltip(dataArr,title:string){
let data = dataArr
@ -113,10 +124,10 @@ export class EchartsDataService {
}
res+='</tbody>'
// res+='<tfoot><td style="text-align:center;border:1px solid #000000">总计</td><td style="text-align:center;border:1px solid #000000">1356</td><td style="text-align:center;border:1px solid #000000">19%</td></tfoot>'
res+='</table></div></div>'
return res
}
//如果提示框显示不开
tableTooltipNoShow(point, params, dom, rect, size) {
// 鼠标坐标和提示框位置的参考坐标系是:以外层div的左上角那一点为原点,x轴向右,y轴向下
@ -152,11 +163,48 @@ export class EchartsDataService {
return [pointX, pointY];
}
tableTooltipNoShow2(point, params, dom, rect, size) {
// 鼠标坐标和提示框位置的参考坐标系是:以外层div的左上角那一点为原点,x轴向右,y轴向下
// 提示框位置
var x = 0; // x坐标位置
var y = 0; // y坐标位置
// 当前鼠标位置
var pointX = point[0];
var pointY = point[1];
// 外层div大小
var viewWidth = size.viewSize[0];
// var viewHeight = size.viewSize[1];
// 提示框大小
var boxWidth = size.contentSize[0];
var boxHeight = size.contentSize[1];
// boxWidth > pointX 说明鼠标左边放不下提示框
if (boxWidth > pointX) {
x = 35;
} else { // 左边放的下
x = pointX + 80;
}
// 说明鼠标右边放不下提示框
if(viewWidth - 100 - pointX < boxWidth){
x = pointX - boxWidth;
}
//用法:
// boxHeight > pointY 说明鼠标上边放不下提示框
if (boxHeight > pointY) {
y = 65;
} else { // 上边放得下
y = pointY - boxHeight;
}
return [x, y];
}
//用法:
// tooltip: {
// trigger: 'axis',
// backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
@ -167,4 +215,7 @@ export class EchartsDataService {
// },
// position:this.serviceData.tableTooltipNoShow
// }
}

57
src/app/statistic-analysis/scheduled-updates/scheduled-updates.component.ts

@ -11,7 +11,7 @@ declare var echarts: any;
})
export class ScheduledUpdatesComponent implements OnInit {
constructor(private router: Router) { }
constructor(private router: Router,public echartsData:EchartsDataService) { }
ngOnInit(): void {
window.setTimeout(()=>{
@ -19,9 +19,15 @@ export class ScheduledUpdatesComponent implements OnInit {
})
}
ngOnDestroy () {
this.example.clear()
this.example.dispose()
}
example:any;
/* 首页饼状图 */
initCharts(){
var indexBzt = echarts.init(document.getElementById('center'));
this.example= echarts.init(document.getElementById('center'));
var options={
title: {
text: '计划更新统计(7100家)',
@ -33,12 +39,13 @@ export class ScheduledUpdatesComponent implements OnInit {
},
tooltip: {
trigger: 'item',
formatter: (params)=>{
// return this.biaogeTishi(params.name)
} ,
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0'
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,params.name)
},
position:this.echartsData.tableTooltipNoShow
},
legend: {
orient: 'vertical',
@ -78,8 +85,8 @@ export class ScheduledUpdatesComponent implements OnInit {
}]
};
indexBzt.setOption(options);
indexBzt.on('click', (params) => {
this.example.setOption(options);
this.example.on('click', (params) => {
this.router.navigateByUrl('/statisticanalysis/scheduledUpdates/PublicEcharts');
});
}
@ -98,7 +105,7 @@ export class publicEchartsComponent implements OnInit {
constructor(private router: Router,public echartsData:EchartsDataService,public dialog: MatDialog,) { }
ngOnInit(): void {
this.echartsData.scheduledUpdatesToggle = true
}
isToggle:boolean = true; // 已核查/未核查
@ -149,8 +156,10 @@ export class verifiedComponent implements OnInit {
}
ngOnDestroy () {
this.oneEcharts.dispose()
this.oneEcharts.clear()
this.items.forEach((element,index) => {
element.echart.dispose()
element.echart.clear()
});
}
@ -179,6 +188,13 @@ export class verifiedComponent implements OnInit {
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,params[0].name)
},
position:this.echartsData.tableTooltipNoShow
},
// x轴
xAxis: {
@ -363,6 +379,7 @@ export class notVerifiedComponent implements OnInit {
}
ngOnDestroy () {
this.oneEcharts.dispose()
this.oneEcharts.clear()
}
@ -382,9 +399,13 @@ export class notVerifiedComponent implements OnInit {
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'未核查')
},
position:this.echartsData.tableTooltipNoShow
},
legend: {
data: ['剩余未核查','总数'],
@ -470,8 +491,14 @@ export class detailedInformationComponent implements OnInit {
},0)
}
ngOnDestroy () {
this.example.dispose()
this.example.clear()
}
example:any;
oneInit () {
let echart = echarts.init(document.getElementById('center'), 'skinUpp');
this.example = echarts.init(document.getElementById('center'), 'skinUpp');
if (this.echartsData.scheduledUpdatesType ===0) { //已核查
var option = {
title: {
@ -560,7 +587,7 @@ export class detailedInformationComponent implements OnInit {
},
]
};
echart.setOption(option);
this.example.setOption(option);
} else { //未核查
var options = {
title: {
@ -631,7 +658,7 @@ export class detailedInformationComponent implements OnInit {
},
]
};
echart.setOption(options);
this.example.setOption(options);
}
}

11
src/app/statistic-analysis/state/page-one/page-one.component.ts

@ -25,12 +25,17 @@ export class PageOneComponent implements OnInit {
this.initCharts()
},0)
}
ngOnDestroy(): void {
this.indexBzt.clear()
this.indexBzt.dispose()
}
/* 饼状图跳转 */
/* 首页饼状图 */
indexBzt
initCharts(){
var ec = echarts as any;
var indexBzt = ec.init(document.getElementById('indexBzt'));
this.indexBzt = ec.init(document.getElementById('indexBzt'));
var options={
title: {
text: '预案状态统计(7005家)',
@ -96,10 +101,10 @@ export class PageOneComponent implements OnInit {
}
]
};
indexBzt.on('click', (params) => {
this.indexBzt.on('click', (params) => {
this.router.navigateByUrl('/statisticanalysis/statePageTwo_time');
});
indexBzt.setOption(options);
this.indexBzt.setOption(options);
}
/**
* @name:

67
src/app/statistic-analysis/state/page-two-name/page-two-name.component.ts

@ -15,7 +15,6 @@ export class PageTwoNameComponent implements OnInit {
@ViewChild('zhongDuiChild') zhongDuiChild:PageZhongDuiDetailsComponent; //父组件中获得子组件的引用
ngOnInit(): void {
setTimeout(() => {
this.planState()
this.planAdd()
@ -24,7 +23,27 @@ export class PageTwoNameComponent implements OnInit {
this.planBack()
this.planAudit()
}, 0);
}
ngOnDestroy(): void {
this.addEchart.clear()
this.addEchart.dispose()
this.passPlanEchartObj.clear()
this.passPlanEchartObj.dispose()
this.passMakeEchart.clear()
this.passMakeEchart.dispose()
this.passBackEchart.clear()
this.passBackEchart.dispose()
this.planAuditEchart.clear()
this.planAuditEchart.dispose()
this.topEchart.clear()
this.topEchart.dispose()
}
axisLabel = {
interval: 0,
@ -65,10 +84,11 @@ export class PageTwoNameComponent implements OnInit {
zhiNameData = ["浦东支队","黄埔支队","徐汇支队","长宁支队","静安支队","普陀支队","虹口支队","杨浦支队","闵行支队","宝山支队","嘉定支队","松江支队","金山支队","崇明支队"]
zhiNumData = [200,190,180,170,160,150,140,130,120,110,100,90,80,70]
addEchart
//预案新增统计
planAdd () {
let _this = this
var addEchart = echarts.init(document.getElementById('addEchart'));
this.addEchart = echarts.init(document.getElementById('addEchart'));
var option = {
title: {
text: "预案新增",
@ -107,16 +127,17 @@ export class PageTwoNameComponent implements OnInit {
label: this.topTextlabel
}]
};
addEchart.setOption(option);
addEchart.on('click', function (params) {
this.addEchart.setOption(option);
this.addEchart.on('click', function (params) {
_this.data.statefulInspectionName = '预案新增'
_this.data.statefulInspectionToggle = false
});
}
passPlanEchartObj
//预案审核通过
passPlanEchart (){
let _this = this
var passPlanEchart = echarts.init(document.getElementById('passPlanEchart'));
this.passPlanEchartObj = echarts.init(document.getElementById('passPlanEchart'));
var option = {
title: {
text: "预案审核通过",
@ -154,17 +175,17 @@ export class PageTwoNameComponent implements OnInit {
label: this.topTextlabel
}]
};
passPlanEchart.setOption(option);
passPlanEchart.on('click', function (params) {
this.passPlanEchartObj.setOption(option);
this.passPlanEchartObj.on('click', function (params) {
_this.data.statefulInspectionName = '预案审核通过'
_this.data.statefulInspectionToggle = false
});
}
passMakeEchart
//预案编制
planMake (){
let _this = this
var passMakeEchart = echarts.init(document.getElementById('planMake'));
this.passMakeEchart = echarts.init(document.getElementById('planMake'));
var option = {
title: {
text: "预案编制",
@ -202,17 +223,17 @@ export class PageTwoNameComponent implements OnInit {
label: this.topTextlabel
}]
};
passMakeEchart.setOption(option);
passMakeEchart.on('click', function (params) {
this.passMakeEchart.setOption(option);
this.passMakeEchart.on('click', function (params) {
_this.data.statefulInspectionName = '预案编制'
_this.data.statefulInspectionToggle = false
});
}
passBackEchart
//预案审核退回
planBack (){
let _this = this
var passBackEchart = echarts.init(document.getElementById('planBack'));
this.passBackEchart = echarts.init(document.getElementById('planBack'));
var option = {
title: {
text: "预案审核退回",
@ -250,17 +271,17 @@ export class PageTwoNameComponent implements OnInit {
label: this.topTextlabel
}]
};
passBackEchart.setOption(option);
passBackEchart.on('click', function (params) {
this.passBackEchart.setOption(option);
this.passBackEchart.on('click', function (params) {
_this.data.statefulInspectionName = '预案审核退回'
_this.data.statefulInspectionToggle = false
});
}
planAuditEchart
//预案审核中
planAudit (){
let _this = this
var planAuditEchart = echarts.init(document.getElementById('planAudit'));
this.planAuditEchart = echarts.init(document.getElementById('planAudit'));
var option = {
title: {
text: "预案审核中",
@ -298,16 +319,16 @@ export class PageTwoNameComponent implements OnInit {
label: this.topTextlabel
}]
};
planAuditEchart.setOption(option);
planAuditEchart.on('click', function (params) {
this.planAuditEchart.setOption(option);
this.planAuditEchart.on('click', function (params) {
_this.data.statefulInspectionName = '预案审核中'
_this.data.statefulInspectionToggle = false
});
}
topEchart
//预案状态统计
planState(){
var passPlanEchart = echarts.init(document.getElementById('pie'));
this.topEchart = echarts.init(document.getElementById('pie'));
var option = {
title: {
text: '预案状态统计(7005份)',
@ -397,7 +418,7 @@ export class PageTwoNameComponent implements OnInit {
}
]
}
passPlanEchart.setOption(option);
this.topEchart.setOption(option);
}
tableTooltip(biaotou:string){

102
src/app/statistic-analysis/state/page-two-time/page-two-time.component.ts

@ -20,6 +20,7 @@ export class PageTwoTimeComponent implements OnInit {
@ViewChild('pageTwoName')pageTwoName :PageTwoNameComponent; //父组件中获得子组件的引用
ngOnInit(): void {
this.echartsData.statefulInspectionToggle = true
this.dateInit()
}
@ -129,11 +130,25 @@ export class echartsComponent implements OnInit {
this.sixInit()
},0)
}
ngOnDestroy () {
this.oneExample.clear()
this.oneExample.dispose()
this.twoExample.clear()
this.twoExample.dispose()
this.threeExample.clear()
this.threeExample.dispose()
this.fourExample.clear()
this.fourExample.dispose()
this.fiveExample.clear()
this.fiveExample.dispose()
this.sixExample.clear()
this.sixExample.dispose()
}
oneExample:any;
oneInit () {
var chartQusj = echarts.init(document.getElementById('one'), 'skinUpp');
this.oneExample = echarts.init(document.getElementById('one'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -141,6 +156,15 @@ export class echartsComponent implements OnInit {
right: 20,
bottom: 20,
},
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.planData,params[0].name)
},
},
// 标题
title: {
text: '预案统计状态',
@ -158,10 +182,6 @@ export class echartsComponent implements OnInit {
fontSize: 22,
}
},
//提示框
tooltip: {
trigger: 'axis',
},
// x轴
xAxis: {
type: 'category',
@ -205,12 +225,13 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
this.oneExample.setOption(option);
}
twoExample:any;
twoInit () {
let that = this
var chartQusj = echarts.init(document.getElementById('two'), 'skinUpp');
this.twoExample = echarts.init(document.getElementById('two'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -228,9 +249,14 @@ export class echartsComponent implements OnInit {
color:'#000',
}
},
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'预案新增')
}
},
// x轴
xAxis: {
@ -275,16 +301,17 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
chartQusj.on('click', function (params) {
this.twoExample.setOption(option);
this.twoExample.on('click', function (params) {
that.echartsData.statefulInspectionName = '预案新增'
that.echartsData.statefulInspectionToggle = false
});
}
threeExample:any;
threeInit () {
let that = this
var chartQusj = echarts.init(document.getElementById('three'), 'skinUpp');
this.threeExample = echarts.init(document.getElementById('three'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -305,6 +332,12 @@ export class echartsComponent implements OnInit {
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'预案审核通过')
}
},
// x轴
xAxis: {
@ -349,16 +382,17 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
chartQusj.on('click', function (params) {
this.threeExample.setOption(option);
this.threeExample.on('click', function (params) {
that.echartsData.statefulInspectionName = '预案审核通过'
that.echartsData.statefulInspectionToggle = false
});
}
fourExample:any;
fourInit () {
let that = this
var chartQusj = echarts.init(document.getElementById('four'), 'skinUpp');
this.fourExample = echarts.init(document.getElementById('four'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -379,6 +413,12 @@ export class echartsComponent implements OnInit {
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'预案编制')
}
},
// x轴
xAxis: {
@ -423,16 +463,17 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
chartQusj.on('click', function (params) {
this.fourExample.setOption(option);
this.fourExample.on('click', function (params) {
that.echartsData.statefulInspectionName = '预案编制'
that.echartsData.statefulInspectionToggle = false
});
}
fiveExample:any;
fiveInit () {
let that = this
var chartQusj = echarts.init(document.getElementById('five'), 'skinUpp');
this.fiveExample = echarts.init(document.getElementById('five'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -453,6 +494,12 @@ export class echartsComponent implements OnInit {
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'预案审核退回')
}
},
// x轴
xAxis: {
@ -497,16 +544,17 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
chartQusj.on('click', function (params) {
this.fiveExample.setOption(option);
this.fiveExample.on('click', function (params) {
that.echartsData.statefulInspectionName = '预案审核退回'
that.echartsData.statefulInspectionToggle = false
});
}
sixExample:any;
sixInit () {
let that = this
var chartQusj = echarts.init(document.getElementById('six'), 'skinUpp');
this.sixExample = echarts.init(document.getElementById('six'), 'skinUpp');
var option = {
grid: {
top: 50,
@ -527,6 +575,12 @@ export class echartsComponent implements OnInit {
//提示框
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(255,255,255,1)',//通过设置rgba调节背景颜色与透明度
borderWidth:'1',
borderRadius :'0',
formatter: (params)=>{
return this.echartsData.tableTooltip(this.echartsData.tableDataZhi,'预案审核中')
}
},
// x轴
xAxis: {
@ -571,8 +625,8 @@ export class echartsComponent implements OnInit {
}
],
};
chartQusj.setOption(option);
chartQusj.on('click', function (params) {
this.sixExample.setOption(option);
this.sixExample.on('click', function (params) {
that.echartsData.statefulInspectionName = '预案审核中'
that.echartsData.statefulInspectionToggle = false
});

13
src/app/statistic-analysis/state/page-zhong-dui-details/page-zhong-dui-details.component.ts

@ -19,9 +19,13 @@ export class PageZhongDuiDetailsComponent implements OnInit {
this.detailEcharts()
})
}
ngOnDestroy(): void {
this.detailPlanEchart.clear()
this.detailPlanEchart.dispose()
}
detailPlanEchart
detailEcharts(){
var detailPlanEchart = echarts.init(document.getElementById('detailBox'));
this.detailPlanEchart = echarts.init(document.getElementById('detailBox'));
var option = {
title: {
text: this.data.statefulInspectionName,
@ -53,10 +57,11 @@ export class PageZhongDuiDetailsComponent implements OnInit {
showBackground: true,
backgroundStyle: {
color: 'rgba(220, 220, 220, 0.8)'
}
},
barWidth :'58'
}]
};
detailPlanEchart.setOption(option);
this.detailPlanEchart.setOption(option);
}

7
src/app/statistic-analysis/statistic-analysis-routing.module.ts

@ -4,7 +4,7 @@
* @Author: sueRimn
* @Date: 2020-09-02 16:57:00
* @LastEditors: sueRimn
* @LastEditTime: 2020-09-05 11:37:39
* @LastEditTime: 2020-09-05 13:51:54
*/
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
@ -26,6 +26,8 @@ import { AddUnitOneComponent } from './addUnit/add-unit-one/add-unit-one.compone
import { AddUnitTwoTypeStatisticsComponent } from './addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component';
import { AddUnitTwoTypeDetailsComponent } from './addUnit/add-unit-two-type-details/add-unit-two-type-details.component';
import { AddUnitTwoTimeComponent } from './addUnit/add-unit-two-time/add-unit-two-time.component';
import { AddUnitThreeLineDetailsComponent } from './addUnit/add-unit-three-line-details/add-unit-three-line-details.component';
import { AddUnitThreeBarDetailsComponent } from './addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component';
const routes: Routes = [
{ path: 'statePageOne', component: PageOneComponent},
@ -47,6 +49,9 @@ const routes: Routes = [
{ path: 'addUnit_one/addUnit_two_type', component: AddUnitTwoTypeStatisticsComponent},
{ path: 'addUnit_one/addUnit_two_typeDetails', component: AddUnitTwoTypeDetailsComponent},
{ path: 'addUnit_one/addUnit_two_time', component: AddUnitTwoTimeComponent},
{ path: 'addUnit_one/addUnit_two_time/three_lineDetails', component: AddUnitThreeLineDetailsComponent},
{ path: 'addUnit_one/addUnit_two_time/three_barDetails', component: AddUnitThreeBarDetailsComponent},
{ path: 'scheduledUpdates', component: ScheduledUpdatesComponent},
{ path: 'scheduledUpdates', component: ScheduledUpdatesComponent},
{ path: 'scheduledUpdates/PublicEcharts', component: publicEchartsComponent}
];

4
src/app/statistic-analysis/statistic-analysis.module.ts

@ -60,11 +60,13 @@ import { AddUnitOneComponent } from './addUnit/add-unit-one/add-unit-one.compone
import { AddUnitTwoTypeStatisticsComponent } from './addUnit/add-unit-two-type-statistics/add-unit-two-type-statistics.component';
import { AddUnitTwoTypeDetailsComponent } from './addUnit/add-unit-two-type-details/add-unit-two-type-details.component';
import { AddUnitTwoTimeComponent } from './addUnit/add-unit-two-time/add-unit-two-time.component';
import { AddUnitThreeLineDetailsComponent } from './addUnit/add-unit-three-line-details/add-unit-three-line-details.component';
import { AddUnitThreeBarDetailsComponent } from './addUnit/add-unit-three-bar-details/add-unit-three-bar-details.component';
@NgModule({
declarations: [PageOneComponent, PageTwoTimeComponent, PageTwoNameComponent, PageZhongDuiDetailsComponent,echartsComponent, DeleteOneComponent, DeleteTwoComponent, DeleteThereComponent, DeleteFourComponent, BuildingTypeOneComponent, ScheduledUpdatesComponent,publicEchartsComponent,verifiedComponent,notVerifiedComponent,detailedInformationComponent,moreTableComponent, BuildingTypeTwoForwardComponent, BuildingTypeTwoReverseComponent, BuildingTypeThreeDetailsComponent, AddUnitOneComponent, AddUnitTwoTypeStatisticsComponent, AddUnitTwoTypeDetailsComponent, AddUnitTwoTimeComponent],
declarations: [PageOneComponent, PageTwoTimeComponent, PageTwoNameComponent, PageZhongDuiDetailsComponent,echartsComponent, DeleteOneComponent, DeleteTwoComponent, DeleteThereComponent, DeleteFourComponent, BuildingTypeOneComponent, ScheduledUpdatesComponent,publicEchartsComponent,verifiedComponent,notVerifiedComponent,detailedInformationComponent,moreTableComponent, BuildingTypeTwoForwardComponent, BuildingTypeTwoReverseComponent, BuildingTypeThreeDetailsComponent, AddUnitOneComponent, AddUnitTwoTypeStatisticsComponent, AddUnitTwoTypeDetailsComponent, AddUnitTwoTimeComponent,AddUnitThreeLineDetailsComponent,AddUnitThreeBarDetailsComponent],
imports: [
CommonModule,
StatisticAnalysisRoutingModule,

Loading…
Cancel
Save