11 changed files with 532 additions and 13 deletions
@ -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> |
@ -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%); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; |
||||||
|
|
||||||
|
import { DeleteThereLineDetailsComponent } from './delete-there-line-details.component'; |
||||||
|
|
||||||
|
describe('DeleteThereLineDetailsComponent', () => { |
||||||
|
let component: DeleteThereLineDetailsComponent; |
||||||
|
let fixture: ComponentFixture<DeleteThereLineDetailsComponent>; |
||||||
|
|
||||||
|
beforeEach(async(() => { |
||||||
|
TestBed.configureTestingModule({ |
||||||
|
declarations: [ DeleteThereLineDetailsComponent ] |
||||||
|
}) |
||||||
|
.compileComponents(); |
||||||
|
})); |
||||||
|
|
||||||
|
beforeEach(() => { |
||||||
|
fixture = TestBed.createComponent(DeleteThereLineDetailsComponent); |
||||||
|
component = fixture.componentInstance; |
||||||
|
fixture.detectChanges(); |
||||||
|
}); |
||||||
|
|
||||||
|
it('should create', () => { |
||||||
|
expect(component).toBeTruthy(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,197 @@ |
|||||||
|
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-delete-there-line-details', |
||||||
|
templateUrl: './delete-there-line-details.component.html', |
||||||
|
styleUrls: ['./delete-there-line-details.component.scss'] |
||||||
|
}) |
||||||
|
export class DeleteThereLineDetailsComponent 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['level']; |
||||||
|
this.buildingTypeName = params['headtext']; |
||||||
|
}); |
||||||
|
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/delete_one/delete_there'],{queryParams:{'level':this.option.xAxis.data[xIndex],'headtext':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 |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue