Browse Source

[新增]统计分析下钻

非煤矿山灾害智能感知和预警系统
邵佳豪 2 years ago
parent
commit
ee2032a4b1
  1. 4
      src/app/home/home-routing.module.ts
  2. 6
      src/app/home/home.module.ts
  3. 13
      src/app/home/statistic-analysis/home/home.component.html
  4. 15
      src/app/home/statistic-analysis/home/home.component.scss
  5. 131
      src/app/home/statistic-analysis/home/home.component.ts
  6. 56
      src/app/home/statistic-analysis/home/task-list/task-list.component.html
  7. 0
      src/app/home/statistic-analysis/home/task-list/task-list.component.scss
  8. 25
      src/app/home/statistic-analysis/home/task-list/task-list.component.spec.ts
  9. 68
      src/app/home/statistic-analysis/home/task-list/task-list.component.ts
  10. 18
      src/app/home/task/station-task-execution/task-details/task-details.component.ts
  11. 2
      src/app/home/task/station-weekly-plan/station-weekly-plan.component.ts

4
src/app/home/home-routing.module.ts

@ -83,6 +83,10 @@ const routes: Routes = [
{
path: 'home',
component: HomeComponent,
},
{
path: 'taskdetails',
component: TaskDetailsPagesComponent,
}
],
},

6
src/app/home/home.module.ts

@ -77,6 +77,7 @@ import { chineseNumbers, fileName, absoluteValue } from '../pipe/pipe';
import { TaskDetailsPagesComponent } from './task/station-task-execution/task-details/task-details.component';
import { NzTabsModule } from 'ng-zorro-antd/tabs';
import { CheckagainComponent } from './task/da-oneself-plan/checkagain/checkagain.component';
import { TaskListComponent } from './statistic-analysis/home/task-list/task-list.component';
@NgModule({
declarations: [
NavComponent,
@ -122,7 +123,8 @@ import { CheckagainComponent } from './task/da-oneself-plan/checkagain/checkagai
fileName,
chineseNumbers,
CheckagainComponent,
absoluteValue
absoluteValue,
TaskListComponent
],
imports: [
CommonModule,
@ -164,6 +166,6 @@ import { CheckagainComponent } from './task/da-oneself-plan/checkagain/checkagai
NzTabsModule
],
providers: [StationTaskExecutionComponent, StationWeeklyPlanComponent],
entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent, AllotPersonComponent, EditOrComponent, CreateTaskComponent, UploadComponent, CheckagainComponent]
entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent, AllotPersonComponent, EditOrComponent, CreateTaskComponent, UploadComponent, CheckagainComponent,TaskListComponent]
})
export class HomeModule { }

13
src/app/home/statistic-analysis/home/home.component.html

@ -34,8 +34,11 @@
<div class="spin" *ngIf="isLoading">
<nz-spin nzSimple></nz-spin>
</div>
<div class="title ">
不合格单位趋势图
<div class="title top1-2titlebox">
<span [ngClass]="{'selectedtop1-2title': selectedLeft=='buhege'}"
(click)="echartsSetData_buhege('buhege')">不合格单位趋势图</span>
<span [ngClass]="{'selectedtop1-2title': selectedLeft=='yinhuan'}" style="margin-left: 6px;"
(click)="echartsSetData_buhege('yinhuan')">隐患单位趋势图</span>
</div>
<div class="disqualificationUnit ">
<div class="searchbox">
@ -51,9 +54,6 @@
</div>
<span>{{buhegedata.month}}月不合格数量</span>
</div>
<!-- <div class="rangepicker">
<nz-range-picker></nz-range-picker>
</div> -->
</div>
<div id="disqualificationUnit">
@ -166,7 +166,8 @@
<nz-spin nzSimple></nz-spin>
</div>
<div class="title">
任务完成情况
任务完成情况 <span class="blue" style="margin-left: 6px;" *ngIf="leveldata && leveldata.level == 'battalion'"
(click)="goback()">返回</span>
</div>
<div class="completionOfTask">
<div class="completionOfTask1" id="completionOfTask1">

15
src/app/home/statistic-analysis/home/home.component.scss

@ -170,7 +170,8 @@
.numchangegreen {
color: #58c694;
}
.invariant{
.invariant {
opacity: 0;
}
}
@ -223,6 +224,7 @@
margin-bottom: 18px;
display: flex;
position: relative;
.top1-1item {
flex: 1;
}
@ -231,6 +233,17 @@
.top1-2 {
position: relative;
flex: 1.3;
.top1-2titlebox {
span {
cursor: pointer;
}
.selectedtop1-2title {
color: #2C4DC0;
font-weight: 600;
}
}
}
}

131
src/app/home/statistic-analysis/home/home.component.ts

@ -1,8 +1,10 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Component, OnInit, ViewContainerRef } from '@angular/core';
declare var AMap: any;
declare var AMapUI: any;
import * as echarts from 'echarts';
import { NzModalService } from 'ng-zorro-antd/modal';
import { TaskListComponent } from './task-list/task-list.component';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
@ -10,7 +12,7 @@ import * as echarts from 'echarts';
})
export class HomeComponent implements OnInit {
constructor(private http: HttpClient) { }
constructor(private http: HttpClient, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { }
taskNumCharts
taskNumChartsOption = {
title: [
@ -324,7 +326,14 @@ export class HomeComponent implements OnInit {
]
};
level //任务完成情况当前级别
leveldata
async ngOnInit(): Promise<void> {
// this.level = JSON.parse(sessionStorage.getItem('userData')).organizationLevel
window.setTimeout(() => {
this.mapInit() //初始化地图
}, 0)
@ -335,16 +344,66 @@ export class HomeComponent implements OnInit {
this.completionOfTaskPie = echarts.init(document.getElementById('completionOfTask1'), null, { devicePixelRatio: 2 });
this.completionOfTaskBar = echarts.init(document.getElementById('completionOfTask2'), null, { devicePixelRatio: 2 });
this.completionOfTaskBar.getZr().on('click', (params) => {
let pointInPixel = [params.offsetX, params.offsetY];
if (this.completionOfTaskBar.containPixel('grid', pointInPixel)) {
let pointInGrid = this.completionOfTaskBar.convertFromPixel({
seriesIndex: 0
}, pointInPixel);
let xIndex = pointInGrid[0]; //索引
let handleIndex = Number(xIndex);
let seriesObj = this.completionOfTaskBar.getOption(); //图表object对象
var op = this.completionOfTaskBar.getOption();
//获得图表中点击的列
var month = op.xAxis[0].data[handleIndex]; //获取点击的列名
let taskBar = this.statisticalData_taskStatByOrg['组织机构数据']
// console.log(month, taskBar[handleIndex])
if (taskBar[handleIndex].organization.level == 'battalion') {//点击大队
this.leveldata = taskBar[handleIndex].organization
this.completionOfTaskBar.clear();
this.getData_taskStatByOrg(taskBar[handleIndex].organization.id).then(data => {
this.echartsSetData_taskStatByOrg()
})
} else if (taskBar[handleIndex].organization.level == 'squadron') {//点击消防站
this.modal.create({
nzTitle: '任务列表',
nzContent: TaskListComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1200,
nzFooter: null,
nzComponentParams: {
data: taskBar[handleIndex].organization
}
});
}
};
});
await this.getData()
let orid = JSON.parse(sessionStorage.getItem('userData')).organizationId
Promise.all([this.getData(), this.getData_taskStatByOrg(orid)]).then(data => {
this.echartsSetData()
this.echartsSetData_buhege('buhege')
this.echartsSetData_taskStatByOrg()
})
}
goback() {
this.completionOfTaskBar.clear();
this.getData_taskStatByOrg(this.leveldata.parentId).then(data => {
this.echartsSetData_taskStatByOrg()
this.leveldata = null
})
}
assistTaskRankingData: any = [
{ name: '济南市消防救援支队', num: 28, url: "../../../../assets/statistic-analysis/one.png" },
{ name: '历下区大队', num: 25, url: "../../../../assets/statistic-analysis/two.png" },
@ -459,23 +518,7 @@ export class HomeComponent implements OnInit {
}
});
//左边中间不合格单位趋势图
let center_left = this.statisticalData['不合格单位趋势']
let xAxis = []
let yAxis = []
center_left.forEach(element => {
let monthnum = new Date(element.date).getMonth() + 1
if (monthnum == new Date().getMonth() + 1) {
element.percentOfPass = Math.round(((element.totalCount - element.badCount) / element.totalCount) * 100)
this.buhegedata = element
}
element.month = monthnum
xAxis.push(monthnum + '月')
yAxis.push(element.badCount)
});
this.disqualificationUnitChartsOption.xAxis.data = xAxis
this.disqualificationUnitChartsOption.series[0].data = yAxis
this.disqualificationUnitCharts && this.disqualificationUnitCharts.setOption(this.disqualificationUnitChartsOption);
//地图上方卡片
let mapcard = this.statisticalData['单位']
@ -505,6 +548,34 @@ export class HomeComponent implements OnInit {
}
selectedLeft = 'buhege'
echartsSetData_buhege(type) {
this.disqualificationUnitCharts.clear()
this.selectedLeft = type
let center_left
if (type == 'buhege') {
center_left = this.statisticalData['不合格单位趋势']
} else if (type == 'yinhuan') {
center_left = this.statisticalData['隐患单位趋势']
}
//左边中间不合格单位趋势图
let xAxis = []
let yAxis = []
center_left.forEach(element => {
let monthnum = new Date(element.date).getMonth() + 1
if (monthnum == new Date().getMonth() + 1) {
element.percentOfPass = Math.round(((element.totalCount - element.badCount) / element.totalCount) * 100)
this.buhegedata = element
}
element.month = monthnum
xAxis.push(monthnum + '月')
yAxis.push(element.badCount)
});
this.disqualificationUnitChartsOption.xAxis.data = xAxis
this.disqualificationUnitChartsOption.series[0].data = yAxis
this.disqualificationUnitCharts && this.disqualificationUnitCharts.setOption(this.disqualificationUnitChartsOption);
}
echartsSetData_taskStatByOrg() {
//任务完成情况两个echarts
let task = this.statisticalData_taskStatByOrg
@ -528,27 +599,9 @@ export class HomeComponent implements OnInit {
this.completionOfTaskBarOption.series[0].data = taskBary1
this.completionOfTaskBarOption.series[1].data = taskBary2
this.completionOfTaskBar && this.completionOfTaskBar.setOption(this.completionOfTaskBarOption);
// this.completionOfTaskBar.on('click', (params) => {
// console.log(6666,params)
// });
this.completionOfTaskBar.getZr().on('click', (params) => {
let pointInPixel = [params.offsetX, params.offsetY];
if (this.completionOfTaskBar.containPixel('grid', pointInPixel)) {
let pointInGrid = this.completionOfTaskBar.convertFromPixel({
seriesIndex: 0
}, pointInPixel);
let xIndex = pointInGrid[0]; //索引
let handleIndex = Number(xIndex);
let seriesObj = this.completionOfTaskBar.getOption(); //图表object对象
var op = this.completionOfTaskBar.getOption();
//获得图表中点击的列
var month = op.xAxis[0].data[handleIndex]; //获取点击的列名
console.log(month);
// console.log(handleIndex, seriesObj);
console.log(taskBar[handleIndex].organization.id)
};
});
}
map
mapInit() {
//创建地图

56
src/app/home/statistic-analysis/home/task-list/task-list.component.html

@ -0,0 +1,56 @@
<nz-table #basicTable [nzData]="listOfData" [nzShowPagination]="false" [nzLoading]="isloading">
<thead>
<tr>
<th>任务名称</th>
<th>时间</th>
<th>单位名称</th>
<th>单位级别</th>
<th>主负责人</th>
<th [nzWidth]="'25%'">协助机构/人员</th>
<th>检查结果</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of basicTable.data">
<td>{{ item.taskType }}</td>
<td>{{ item.planTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
<td>{{ item.company.companyName }}</td>
<td>{{ item.company.companyLevel }}</td>
<td>{{item.organization.level == 'battalion'? item.creator.name : item.organization.name}}</td>
<td>
<span class="assistant">
<ng-container *ngIf="item.relatedTaskId && item.relatedTask; else elseTemplate">
<span *ngFor="let o of item.relatedTask.supervisors">
{{o.name}}
</span>
<span *ngFor="let o of item.relatedTask.assistantOrganizations">
{{o.name}}
</span>
</ng-container>
<ng-template #elseTemplate>
<span *ngFor="let o of item.supervisors">
{{o.name}}
</span>
<span *ngFor="let o of item.assistantOrganizations">
{{o.name}}
</span>
</ng-template>
</span>
</td>
<td>
{{item.inspectionResult}}
</td>
<td>
<span class="blue" (click)="look(item)">查看</span>
</td>
</tr>
</tbody>
</nz-table>
<div class="pagination">
<nz-pagination [nzHideOnSinglePage]="false" [nzPageIndex]="1" [nzTotal]="totalCount" [nzPageSize]="10"
[nzShowTotal]="totalTemplate" nzShowQuickJumper (nzPageIndexChange)="pageChange($event)">
</nz-pagination>
<ng-template #totalTemplate let-total> 10条/页,共{{totalCount}}条 </ng-template>
</div>

0
src/app/home/statistic-analysis/home/task-list/task-list.component.scss

25
src/app/home/statistic-analysis/home/task-list/task-list.component.spec.ts

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

68
src/app/home/statistic-analysis/home/task-list/task-list.component.ts

@ -0,0 +1,68 @@
import { HttpClient } from '@angular/common/http';
import { Component, Input, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
@Component({
selector: 'app-task-list',
templateUrl: './task-list.component.html',
styleUrls: ['./task-list.component.scss']
})
export class TaskListComponent implements OnInit {
@Input() data?: any;
constructor(private router: Router, private http: HttpClient, private message: NzMessageService, private modalRef: NzModalRef) { }
ngOnInit(): void {
console.log(this.data)
this.getTaskList()
}
listOfData: any = [];
isloading = false
totalCount
PageNumber = 1
PageSize = 10
getTaskList() {
this.isloading = true
let params = {
// Month: selectedTime,
// OrganizationId: this.OrganizationId,
TaskTypes: ['熟悉演练'],
// TaskName: this.searchForm.taskname,
// CompanyName: this.searchForm.unitname,
AssistantOrganizationId: this.data.id,
approvalStatuses: ['待检查', '已检查'],
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
this.http.get('/api/PlanTasks', {
params: params
}).subscribe((data: any) => {
this.isloading = false
console.log('任务列表', data);
this.totalCount = data.totalCount
this.listOfData = [...data.items]
})
}
pageChange($event) {
this.PageNumber = $event
this.getTaskList()
}
look(item) {
console.log(item)
if (item.approvalStatus == '待检查') {
this.message.create('warning', '该单位未检查');
return
}
// this.modalRef.close()
// this.router.navigate(['/statistic/taskdetails'], { queryParams: { id: item.id, company: item.company.companyName, organization: item.organization.name, legalPersonName: item.company.legalPersonName ? item.company.legalPersonName : '' } })
window.open(`/statistic/taskdetails?id=${item.id}&company=${item.company.companyName}&organization=${item.organization.name}&legalPersonName=${item.company.legalPersonName ? item.company.legalPersonName : ''}`)
}
}

18
src/app/home/task/station-task-execution/task-details/task-details.component.ts

@ -254,7 +254,23 @@ export class TaskDetailsPagesComponent implements OnInit {
organization: string
legalPersonName: string
checkTime: string
taskAlldataOfcompany: any
taskAlldataOfcompany: any = {
address: '',
datas: {
basicInfo: {
},
facilities: {
fireFightingFacilities: {
}
},
},
zhuyaosheshi: {
}
}
taskAlldataOfform: any
ngOnInit(): void {
this.company = this.route.snapshot.queryParams.company

2
src/app/home/task/station-weekly-plan/station-weekly-plan.component.ts

@ -616,7 +616,7 @@ export class StationWeeklyPlanComponent implements OnInit {
next: (data: any) => {
console.log(item)
data.company = instance.validateForm.value.unitname
item.data.push(data)
item.data.unshift(data)
item.passed += 1
// this.getTaskList()
this.getTaskListPass(this.stationData[0])

Loading…
Cancel
Save