|
|
|
import { HttpClient } from '@angular/common/http';
|
|
|
|
import { Component, OnInit } from '@angular/core';
|
|
|
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
|
|
import * as echarts from 'echarts';
|
|
|
|
@Component({
|
|
|
|
selector: 'app-criminal-records',
|
|
|
|
templateUrl: './criminal-records.component.html',
|
|
|
|
styleUrls: ['./criminal-records.component.scss']
|
|
|
|
})
|
|
|
|
export class CriminalRecordsComponent implements OnInit {
|
|
|
|
validateForm!: FormGroup;
|
|
|
|
constructor(private http: HttpClient, private fb: FormBuilder) { }
|
|
|
|
|
|
|
|
myChart: any //左侧饼图
|
|
|
|
option = {
|
|
|
|
color: ['#FF4B65', '#23D9FF', '#608AFF', '#B2FF6D', '#FFFF99', '#C4E2FC', '#FF7F00', '#0090FF', '#FFD634', '#105597', '#FF4B65', '#23D9FF', '#71FFF5', '#B2FF6D'],
|
|
|
|
tooltip: {
|
|
|
|
trigger: 'item'//触发类型
|
|
|
|
},
|
|
|
|
series: [
|
|
|
|
{
|
|
|
|
// name: 'Access From',
|
|
|
|
type: 'pie',
|
|
|
|
radius: [85, 112],//内半径外,外半径
|
|
|
|
left: '-30%',
|
|
|
|
avoidLabelOverlap: false,//防止标签重叠策略
|
|
|
|
label: {//每一个标签外网延伸的引导说明
|
|
|
|
show: false,
|
|
|
|
position: 'outside'
|
|
|
|
},
|
|
|
|
labelLine: {//引导线
|
|
|
|
show: true,
|
|
|
|
showAbove: true
|
|
|
|
},
|
|
|
|
emphasis: {//中间高亮区域
|
|
|
|
label: {
|
|
|
|
show: false,
|
|
|
|
fontSize: '40',
|
|
|
|
fontWeight: 'bold'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
data: [
|
|
|
|
{ value: 26, name: '工作人员倚靠加油机或者立柱1' },
|
|
|
|
{ value: 86, name: '工作人员倚靠加油机或者立柱2' },
|
|
|
|
{ value: 34, name: '工作人员倚靠加油机或者立柱3' },
|
|
|
|
{ value: 55, name: '工作人员倚靠加油机或者立柱4' },
|
|
|
|
{ value: 60, name: '工作人员倚靠加油机或者立柱5' },
|
|
|
|
{ value: 26, name: '工作人员倚靠加油机或者立柱6' },
|
|
|
|
{ value: 86, name: '工作人员倚靠加油机或者立柱7' },
|
|
|
|
{ value: 34, name: '工作人员倚靠加油机或者立柱8' },
|
|
|
|
{ value: 55, name: '工作人员倚靠加油机或者立柱9' },
|
|
|
|
{ value: 60, name: '工作人员倚靠加油机或者立柱10' },
|
|
|
|
{ value: 26, name: '工作人员倚靠加油机或者立柱11' },
|
|
|
|
{ value: 86, name: '工作人员倚靠加油机或者立柱12' },
|
|
|
|
{ value: 34, name: '工作人员倚靠加油机或者立柱13' },
|
|
|
|
{ value: 55, name: '工作人员倚靠加油机或者立柱14' },
|
|
|
|
{ value: 60, name: '工作人员倚靠加油机或者立柱15' },
|
|
|
|
{ value: 26, name: '工作人员倚靠加油机或者立柱16' },
|
|
|
|
{ value: 86, name: '工作人员倚靠加油机或者立柱17' },
|
|
|
|
{ value: 34, name: '工作人员倚靠加油机或者立柱18' },
|
|
|
|
{ value: 55, name: '工作人员倚靠加油机或者立柱19' },
|
|
|
|
{ value: 60, name: '工作人员倚靠加油机或者立柱20' }
|
|
|
|
],
|
|
|
|
tooltip: {//鼠标移入提示
|
|
|
|
position: 'right',
|
|
|
|
padding: [14, 19],
|
|
|
|
backgroundColor: 'rgba(28, 129, 218, 0.4)',
|
|
|
|
textStyle: {
|
|
|
|
color: '#fff',
|
|
|
|
fontSize: 12
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
mybarChart: any //柱状图
|
|
|
|
baroption = {
|
|
|
|
xAxis: {
|
|
|
|
type: 'category',
|
|
|
|
data: this.getThirtyDays(),
|
|
|
|
axisLine: {
|
|
|
|
show: false,
|
|
|
|
lineStyle: {
|
|
|
|
color: '#91CCFF'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
axisTick: {//刻度线
|
|
|
|
show: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
yAxis: {
|
|
|
|
type: 'value',
|
|
|
|
nameTextStyle: {
|
|
|
|
color: '#C4E2FC'
|
|
|
|
},
|
|
|
|
splitLine: {//分割线
|
|
|
|
lineStyle: {
|
|
|
|
color: ['#0f4374'],
|
|
|
|
width: 2
|
|
|
|
}
|
|
|
|
},
|
|
|
|
axisTick: {//刻度线
|
|
|
|
show: false
|
|
|
|
},
|
|
|
|
axisLine: {//轴线
|
|
|
|
show: false,
|
|
|
|
lineStyle: {
|
|
|
|
color: '#C4E2FC'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
series: [
|
|
|
|
{
|
|
|
|
data: [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 100, 101],
|
|
|
|
type: 'bar',
|
|
|
|
itemStyle: {
|
|
|
|
color: {
|
|
|
|
type: 'linear',
|
|
|
|
x: 0,
|
|
|
|
y: 0,
|
|
|
|
x2: 0,
|
|
|
|
y2: 1,
|
|
|
|
colorStops: [{
|
|
|
|
offset: 0, color: '#23F0FF' // 0% 处的颜色
|
|
|
|
}, {
|
|
|
|
offset: 1, color: 'rgba(35, 153, 255, 0.1)' // 100% 处的颜色
|
|
|
|
}],
|
|
|
|
global: false // 缺省为 false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
barWidth: '25%'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
data: [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 100, 101],
|
|
|
|
type: 'line',
|
|
|
|
symbol: 'circle',
|
|
|
|
symbolSize: 8,
|
|
|
|
label: {
|
|
|
|
show: true
|
|
|
|
},
|
|
|
|
itemStyle: {
|
|
|
|
color: '#fff',
|
|
|
|
shadowColor: '#fff',
|
|
|
|
shadowBlur: 10
|
|
|
|
},
|
|
|
|
lineStyle: {
|
|
|
|
color: '#FFCC8A',
|
|
|
|
width: 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
grid: {
|
|
|
|
left: '36px',
|
|
|
|
right: '30px',
|
|
|
|
bottom: '50px',
|
|
|
|
top: '45px'
|
|
|
|
}
|
|
|
|
};
|
|
|
|
baroption2 = {
|
|
|
|
xAxis: {
|
|
|
|
type: 'value',
|
|
|
|
show: false
|
|
|
|
},
|
|
|
|
yAxis: {
|
|
|
|
type: 'category',
|
|
|
|
data: ['预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名', '预警事件名'],
|
|
|
|
axisLine: {
|
|
|
|
show: false,
|
|
|
|
lineStyle: {
|
|
|
|
color: '#91CCFF',
|
|
|
|
}
|
|
|
|
},
|
|
|
|
axisTick: {//刻度线
|
|
|
|
show: false
|
|
|
|
},
|
|
|
|
axisLabel: {
|
|
|
|
formatter: function (value, index) {
|
|
|
|
// 格式化成月/日,只在第一个刻度显示年份
|
|
|
|
return '{s|·}' + `{a|${value}}`;
|
|
|
|
},
|
|
|
|
rich: {
|
|
|
|
a: {
|
|
|
|
color: '#C4E2FC',
|
|
|
|
padding: [0, 0, 0, 8],
|
|
|
|
},
|
|
|
|
s: {
|
|
|
|
color: '#fff',
|
|
|
|
borderWidth: 1,
|
|
|
|
borderColor: '#23D9FF',
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
width: 4,
|
|
|
|
height: 4,
|
|
|
|
shadowBlur: 3,
|
|
|
|
shadowColor: "#fff"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
series:
|
|
|
|
{
|
|
|
|
label: {
|
|
|
|
// 柱图头部显示值
|
|
|
|
show: true,
|
|
|
|
position: "right",
|
|
|
|
color: "#fff",
|
|
|
|
fontSize: 12,
|
|
|
|
formatter: '{c}',
|
|
|
|
offset: [6, 0]
|
|
|
|
},
|
|
|
|
data: [40, 36, 30, 25, 19, 15, 14, 11, 10, 8].reverse(),
|
|
|
|
type: 'bar',
|
|
|
|
itemStyle: {
|
|
|
|
color: {
|
|
|
|
type: 'linear',
|
|
|
|
x: 0,
|
|
|
|
y: 0,
|
|
|
|
x2: 1,
|
|
|
|
y2: 0,
|
|
|
|
colorStops: [{
|
|
|
|
offset: 0, color: '#063d72' // 0% 处的颜色
|
|
|
|
}, {
|
|
|
|
offset: 1, color: '#FF9963' // 100% 处的颜色
|
|
|
|
}],
|
|
|
|
global: false // 缺省为 false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
barWidth: '36%',
|
|
|
|
|
|
|
|
}
|
|
|
|
,
|
|
|
|
grid: {
|
|
|
|
left: '100px',
|
|
|
|
right: '60px',
|
|
|
|
bottom: '3px',
|
|
|
|
top: '20px'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
getThirtyDays() {
|
|
|
|
//获取当前日期
|
|
|
|
let myDate = new Date();
|
|
|
|
var nowY = myDate.getFullYear();
|
|
|
|
var nowM = myDate.getMonth() + 1;
|
|
|
|
var nowD = myDate.getDate();
|
|
|
|
var enddateStr = nowY + "-" + (nowM < 10 ? "0" + nowM : nowM) + "-" + (nowD < 10 ? "0" + nowD : nowD);//当前日期
|
|
|
|
var enddate = new Date(enddateStr);
|
|
|
|
|
|
|
|
|
|
|
|
//获取三十天前日期
|
|
|
|
var lw = new Date(new Date().getTime() - 1000 * 60 * 60 * 24 * 30);//最后一个数字30可改,30天的意思
|
|
|
|
var lastY = lw.getFullYear();
|
|
|
|
var lastM = lw.getMonth() + 1;
|
|
|
|
var lastD = lw.getDate();
|
|
|
|
var startdateStr = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD);//三十天之前日期
|
|
|
|
var startDate = new Date(startdateStr);
|
|
|
|
|
|
|
|
const dateList = []
|
|
|
|
while (true) {
|
|
|
|
startDate.setDate(startDate.getDate() + 1)
|
|
|
|
if (startDate.getTime() <= enddate.getTime()) {
|
|
|
|
if (startDate.getDate() < 10) {
|
|
|
|
// startDate.getFullYear() 获取年,此处没加上年份
|
|
|
|
dateList.push((startDate.getMonth() + 1) + '.0' + startDate.getDate())
|
|
|
|
} else {
|
|
|
|
dateList.push((startDate.getMonth() + 1) + '.' + startDate.getDate())
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return dateList;
|
|
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
|
|
this.validateForm = this.fb.group({
|
|
|
|
level: [null],
|
|
|
|
type: [null],
|
|
|
|
site: [null],
|
|
|
|
datePicker: [null]
|
|
|
|
});
|
|
|
|
// 饼图
|
|
|
|
this.myChart = echarts.init(document.getElementById('piechart'));
|
|
|
|
this.myChart.setOption(this.option);
|
|
|
|
//柱状折线图
|
|
|
|
this.mybarChart = echarts.init(document.getElementById('barchart'));
|
|
|
|
this.mybarChart.setOption(this.baroption);
|
|
|
|
|
|
|
|
this.warningType()
|
|
|
|
}
|
|
|
|
submitForm(): void {
|
|
|
|
for (const i in this.validateForm.controls) {
|
|
|
|
this.validateForm.controls[i].markAsDirty();
|
|
|
|
this.validateForm.controls[i].updateValueAndValidity();
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(this.validateForm)
|
|
|
|
}
|
|
|
|
resetForm(e: MouseEvent): void {
|
|
|
|
e.preventDefault();
|
|
|
|
this.validateForm.reset();
|
|
|
|
for (const key in this.validateForm.controls) {
|
|
|
|
this.validateForm.controls[key].markAsPristine();
|
|
|
|
this.validateForm.controls[key].updateValueAndValidity();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//预警类型接口
|
|
|
|
warningTypes: any //预警接口数据
|
|
|
|
warningTypesDetails: any
|
|
|
|
warningType() {
|
|
|
|
this.http.get('/api/services/app/Violation/GetAllList').subscribe((data: any) => {
|
|
|
|
this.warningTypesDetails = data.result
|
|
|
|
this.warningTypes = (data.result as any).groupBy((t) => { return t.violationType });
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
|
|
|
|
|
|
|
selectedType = '分布'
|
|
|
|
selectedRankingType = '站点排名'
|
|
|
|
echartClick(type) {
|
|
|
|
this.selectedType = type
|
|
|
|
this.mybarChart.dispose()
|
|
|
|
this.mybarChart = echarts.init(document.getElementById('barchart'));
|
|
|
|
if (type == '排名') {
|
|
|
|
this.mybarChart.setOption(this.baroption2);
|
|
|
|
} else {
|
|
|
|
this.mybarChart.setOption(this.baroption);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
// echartClick2(type) {
|
|
|
|
// this.selectedRankingType = type
|
|
|
|
// }
|
|
|
|
}
|