You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
491 lines
29 KiB
491 lines
29 KiB
<!-- <p>月度任务总览</p> --> |
|
<div class="box"> |
|
<div class="timebox"> |
|
<nz-select [(ngModel)]="selectedYear" (ngModelChange)="selectYear($event)"> |
|
<nz-option [nzValue]="2022" nzLabel="2022年"></nz-option> |
|
<nz-option [nzValue]="2023" nzLabel="2023年"></nz-option> |
|
<nz-option [nzValue]="2024" nzLabel="2024年"></nz-option> |
|
<nz-option [nzValue]="2025" nzLabel="2025年"></nz-option> |
|
</nz-select> |
|
<div *ngFor="let item of months" class="monthbtn" (click)="selectMonth(item)" |
|
[ngClass]="{'selectedMonth': item.id == selectedMonth}"> |
|
{{item.name}} |
|
</div> |
|
</div> |
|
|
|
<div style="flex: 1;overflow-y: auto;"> |
|
<!-- 上部仪表盘 --> |
|
<div class="instrumentpanelbox"> |
|
<div class="instrumentpanelheader"> |
|
<span><img src="../../../../assets/images/icon/task1.png" alt=""> 上级任务指标</span> |
|
</div> |
|
<div class="instrumentpanel"> |
|
<div class="instrumentpanelitem instrumentpanelitemclose" *ngFor="let item of cardData"> |
|
<div class="itemone" *ngIf="!item.isDetails"> |
|
<div class="instrumentpanelitemleft"> |
|
<div class="panelheadername" [style]="'background:'+ item.background"> |
|
<img [src]="'../../../../assets/images/icon/'+ item.icon" alt=""> |
|
{{item.name}} |
|
</div> |
|
<div class="tasknum"> |
|
<p> |
|
<span style="margin-right: 6px;">任务分配</span> |
|
<i (click)="openDetails(item,true)" |
|
style="vertical-align: text-top;cursor: pointer;" nz-icon nzType="right-circle" |
|
nzTheme="outline"></i> |
|
</p> |
|
<p style="font-weight: 900;font-size: 36px;text-align: left;"> |
|
{{item.passed}}/{{item.data.length}}</p> |
|
</div> |
|
<div class="jindu"> |
|
<p> |
|
<span>完成率</span> |
|
<span>{{item.percentage}}%</span> |
|
</p> |
|
<nz-progress style="width: 100%;" [nzPercent]="item.percentage" nzStrokeColor="#87D068" |
|
[nzShowInfo]="false"></nz-progress> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="itemtwo" *ngIf="item.isDetails"> |
|
<p class="itemtwotitle"> |
|
<span>{{item.name}}</span> |
|
<span class="back" (click)="openDetails(item,false)"><i nz-icon nzType="rollback" |
|
nzTheme="outline"></i>返回</span> |
|
</p> |
|
<div class="itemtwocontent"> |
|
<div class="itemtwocontentitem" *ngFor="let i of item.data"> |
|
<p class="itemtwocontentitemp1"> |
|
<span class="itemtwocontentitemp1name">{{i.company.companyName}}</span> |
|
</p> |
|
<p> |
|
<span class="green" style="margin-right: 12px;">{{i.approvalStatus}}</span> |
|
</p> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<!-- 下级任务申请 --> |
|
<div class="taskaudit"> |
|
<div class="taskauditheader"> |
|
<span><img src="../../../../assets/images/icon/task.png" alt=""> 下级任务申请</span> |
|
<span (click)="istaskauditexpand()" class="expand blue"> |
|
{{istaskauditExpanded ? '收起' :'展开'}} |
|
<i nz-icon [nzType]="istaskauditExpanded ? 'down' : 'up'" nzTheme="outline"></i> |
|
</span> |
|
</div> |
|
<!-- 任务 --> |
|
<div *ngIf="istaskauditExpanded"> |
|
|
|
<div class="taskauditbox" *ngFor="let item of taskData"> |
|
<div class="header"> |
|
<div> |
|
<span style="margin-right: 18px;">{{item.name}}</span> |
|
<span> |
|
已审批: <span class="green"> {{item.finished}}/{{item.list.length}}</span> |
|
</span> |
|
</div> |
|
|
|
|
|
<span (click)="expand(item)" class="expand blue"> |
|
{{item.isExpand ? '收起' :'展开'}} |
|
<i nz-icon [nzType]="item.isExpand ? 'down' : 'up'" nzTheme="outline"></i> |
|
</span> |
|
</div> |
|
<div class="content" *ngIf="item.isExpand"> |
|
<div *ngFor="let i of item.list" class="card greencard" |
|
[ngClass]="{'redcard': i.approvalStatus == '驳回'}"> |
|
<div class="unitname"> |
|
<img src="../../../../assets/images/icon/unit.png" alt=""> |
|
<span>{{i.company.companyName}}</span> |
|
</div> |
|
<div class="info"> |
|
<span class="assistant" nz-tooltip [nzTooltipTitle]="titleTemplate"> |
|
<ng-container *ngIf="i.relatedTaskId && i.relatedTask; else elseTemplate"> |
|
<span *ngFor="let o of i.relatedTask.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span *ngFor="let o of i.relatedTask.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
</ng-container> |
|
<ng-template #elseTemplate> |
|
<span *ngFor="let o of i.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span *ngFor="let o of i.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
</ng-template> |
|
</span> |
|
<ng-template #titleTemplate let-thing> |
|
<ng-container *ngIf="i.relatedTaskId && i.relatedTask; else elseTemplate"> |
|
<span style="margin-right: 6px;" *ngFor="let o of i.relatedTask.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span style="margin-right: 6px;" |
|
*ngFor="let o of i.relatedTask.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
</ng-container> |
|
<ng-template #elseTemplate> |
|
<span style="margin-right: 6px;" *ngFor="let o of i.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span style="margin-right: 6px;" *ngFor="let o of i.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
</ng-template> |
|
</ng-template> |
|
<span>|</span> |
|
<span>申请人: {{i.organization.level == 'battalion'? i.creator.name : |
|
i.organization.name}}</span> |
|
</div> |
|
<div class="img"> |
|
<ng-container |
|
*ngIf="i.approvalStatus == '驳回' || i.approvalStatus == '通过'; else elseTemplate6"> |
|
<img *ngIf="i.approvalStatus == '驳回'" |
|
src="../../../../assets/images/icon/reject.png"> |
|
<img *ngIf="i.approvalStatus == '通过'" |
|
src="../../../../assets/images/icon/agree.png"> |
|
</ng-container> |
|
<ng-template #elseTemplate6> |
|
<ng-container *ngIf="i.approvalStatus == '已检查'; else elseTemplate8"> |
|
<span>{{i.inspectionResult}}</span> |
|
</ng-container> |
|
<ng-template #elseTemplate8> |
|
<span> {{i.approvalStatus}}</span> |
|
</ng-template> |
|
</ng-template> |
|
</div> |
|
<!-- <span (click)="xxx(i)">xxx</span> --> |
|
<nz-date-picker nzShowTime nzFormat="yyyy-MM-dd HH:mm:ss" [(ngModel)]="i.planTime" |
|
nzPlaceHolder="请选择检查日期" nzBorderless (ngModelChange)="checkTime($event,i,item)"> |
|
</nz-date-picker> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 本级部署 --> |
|
<div class="deploybox"> |
|
<div class="deployboxheader"> |
|
<span><img src="../../../../assets/images/icon/task0.png" alt=""> 本级部署</span> |
|
<span (click)="isdeployboxexpand()" class="expand blue"> |
|
{{isdeployboxExpanded ? '收起' :'展开'}} |
|
<i nz-icon [nzType]="isdeployboxExpanded ? 'down' : 'up'" nzTheme="outline"></i> |
|
</span> |
|
</div> |
|
<div class="deploycontent" *ngIf="isdeployboxExpanded"> |
|
<div class="deploycontentitem"> |
|
<div class="aaa"> |
|
<div class="title"> |
|
任务总数 |
|
<span |
|
style="font-weight: 18;font-size: 26px;margin-left: 10px;">{{countStat.statistics1.num}}</span> |
|
</div> |
|
<div class="details"> |
|
<div class="detailsname"> |
|
完成 |
|
</div> |
|
<span class="progresssquare"> |
|
<!-- <span>完成率</span> --> |
|
<nz-progress nzStrokeLinecap="square" style="width: 70%;margin-bottom: 3px;" |
|
[nzPercent]="countStat.statistics1.percentageComplete" nzStrokeColor="#87D068" |
|
[nzShowInfo]="false" [nzStrokeWidth]="18"> |
|
</nz-progress> |
|
<span>{{countStat.statistics1.percentageComplete}}%</span> |
|
</span> |
|
</div> |
|
</div> |
|
<div class="percentage"> |
|
<nz-progress [nzWidth]="80" nz-tooltip nzType="circle" |
|
[nzPercent]="countStat.statistics1.item1+countStat.statistics1.item2" |
|
nzStrokeLinecap="square" [nzShowInfo]="false" |
|
[nzSuccessPercent]="countStat.statistics1.item1"></nz-progress> |
|
<div class="typebox"> |
|
<div class="type"> |
|
<div class="tips" style="background: #87D068;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">上级指派</span><span>{{countStat.statistics1.item1}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #1890FF;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">自主任务</span><span>{{countStat.statistics1.item2}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #fff;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">申领任务</span><span>{{countStat.statistics1.item3}}%</span> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="deploycontentitem"> |
|
<div class="aaa"> |
|
<div class="title"> |
|
消防救援任务总数 |
|
<span |
|
style="font-weight: 18;font-size: 26px;margin-left: 10px;">{{countStat.statistics2.num}}</span> |
|
</div> |
|
<div class="details"> |
|
<div class="detailsname"> |
|
完成 |
|
<!-- <span style="font-weight: 18;font-size: 26px;margin-left: 10px;">15</span> --> |
|
</div> |
|
<span class="progresssquare"> |
|
<!-- <span>完成率</span> --> |
|
<nz-progress nzStrokeLinecap="square" style="width: 70%;margin-bottom: 3px;" |
|
[nzPercent]="countStat.statistics2.percentageComplete" nzStrokeColor="#87D068" |
|
[nzShowInfo]="false" [nzStrokeWidth]="18"> |
|
</nz-progress> |
|
<span>{{countStat.statistics2.percentageComplete}}%</span> |
|
</span> |
|
</div> |
|
</div> |
|
|
|
<div class="percentage"> |
|
<nz-progress [nzWidth]="80" nz-tooltip nzType="circle" |
|
[nzPercent]="countStat.statistics2.item1+countStat.statistics2.item2" |
|
nzStrokeColor="#3658c8" nzStrokeLinecap="square" [nzShowInfo]="false" |
|
[nzSuccessPercent]="countStat.statistics2.item1"></nz-progress> |
|
<div class="typebox"> |
|
<div class="type"> |
|
<div class="tips" style="background: #87D068;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">上级指派</span><span>{{countStat.statistics2.item1}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #3658c8;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">自主任务</span><span>{{countStat.statistics2.item2}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #fff;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">申领任务</span><span>{{countStat.statistics2.item3}}%</span> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="deploycontentitem"> |
|
<div class="aaa"> |
|
<div class="title"> |
|
检查员任务总数 |
|
<span |
|
style="font-weight: 18;font-size: 26px;margin-left: 10px;">{{countStat.statistics3.num}}</span> |
|
</div> |
|
<div class="details"> |
|
<div class="detailsname"> |
|
完成 |
|
<!-- <span style="font-weight: 18;font-size: 26px;margin-left: 10px;">15</span> --> |
|
</div> |
|
<span class="progresssquare"> |
|
<!-- <span>完成率</span> --> |
|
<nz-progress nzStrokeLinecap="square" style="width: 70%;margin-bottom: 3px;" |
|
[nzPercent]="countStat.statistics3.percentageComplete" nzStrokeColor="#E6D91D" |
|
[nzShowInfo]="false" [nzStrokeWidth]="18"> |
|
</nz-progress> |
|
<span>{{countStat.statistics3.percentageComplete}}%</span> |
|
</span> |
|
</div> |
|
</div> |
|
|
|
<div class="percentage"> |
|
<nz-progress [nzWidth]="80" nz-tooltip nzType="circle" |
|
[nzPercent]="countStat.statistics3.item1+countStat.statistics3.item2" |
|
nzStrokeColor="#E6D91D" [nzShowInfo]="false" |
|
[nzSuccessPercent]="countStat.statistics3.item1"></nz-progress> |
|
<div class="typebox"> |
|
<div class="type"> |
|
<div class="tips" style="background: #87D068;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">上级指派</span><span>{{countStat.statistics3.item1}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #E6D91D;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">自主任务</span><span>{{countStat.statistics3.item2}}%</span> |
|
</div> |
|
</div> |
|
<div class="type"> |
|
<div class="tips" style="background: #fff;"></div> |
|
<div style="font-size: 13px;"><span |
|
style="margin-right: 5px;">申领任务</span><span>{{countStat.statistics3.item3}}%</span> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<!-- 救援站列表 --> |
|
<div class="stationcardlistbox"> |
|
<div class="stationcardlistitembox" *ngFor="let element of stationData"> |
|
<div class="stationcardlistitem"> |
|
<div class="spin" *ngIf="element.isLoading"> |
|
<nz-spin nzSimple></nz-spin> |
|
</div> |
|
<div class="header"> |
|
<span style="width: 16%;"> |
|
<img src="../../../../assets//images/icon/station.png" alt=""> |
|
{{element.name}} |
|
</span> |
|
<span style="width: 8%;"> |
|
<span> |
|
单位总数:{{element.allUnitsNum}}/{{TuesdayThursdayNum}} |
|
</span> |
|
</span> |
|
<div style="width: 72%;" class="progress progresssquare"> |
|
<span>完成进度</span> |
|
<nz-progress nzStrokeLinecap="square" [nzStrokeWidth]="16" nzStrokeColor="#87D068" |
|
[nzPercent]="element.percentage"></nz-progress> |
|
</div> |
|
<!-- <button nz-button nzType="primary">任务下派</button> --> |
|
<span class="expand blue" (click)="expandcarditem(element)"> |
|
{{element.isExpand ? '收起' :'展开'}} |
|
<i nz-icon [nzType]="element.isExpand ? 'down' : 'up'" nzTheme="outline"></i> |
|
</span> |
|
</div> |
|
<div class="maincontent" *ngIf="element.isExpand"> |
|
<div class="maincontentitem" *ngFor="let item of element.data"> |
|
<div class="maincontentitemleft"> |
|
<div class="panelheadername" [style]="'background:'+ item.background"> |
|
<img [src]="'../../../../assets/images/icon/'+ item.icon" alt=""> |
|
{{item.name}} |
|
</div> |
|
<div class="num"> |
|
<div class="round" style="background: #2C4DC0;"></div> |
|
<span class="word">已分配</span> |
|
<span class="boldspan">{{item.data.length}}</span> |
|
</div> |
|
<div class="num"> |
|
<div class="round" style="background: #87D068;"></div> |
|
<span class="word">已完成</span> |
|
<span class="boldspan">{{item.finished}}</span> |
|
</div> |
|
</div> |
|
<div class="maincontentitemright"> |
|
<div class="maincontentitemrightitem" *ngFor="let i of item.data"> |
|
<div class="flexcol namebox"> |
|
<span class="ellipsi" [title]="i.company.companyName"> |
|
{{i.company.companyName}} |
|
</span> |
|
<span> |
|
单位名称 |
|
</span> |
|
</div> |
|
<div class="flexcol"> |
|
<span class="ellipsi" [title]="i.company.useNature"> |
|
{{i.company.useNature}} |
|
</span> |
|
<span> |
|
级别 |
|
</span> |
|
</div> |
|
<div class="flexcol"> |
|
<span class="ellipsi" [title]="i.organization.level == 'battalion'? i.creator.name : |
|
i.organization.name"> |
|
{{i.organization.level == 'battalion'? i.creator.name : |
|
i.organization.name}} |
|
</span> |
|
<span> |
|
责任机构 |
|
</span> |
|
</div> |
|
<div class="flexcol flexcolassistant"> |
|
<span class="assistant ellipsi" nz-tooltip [nzTooltipTitle]="titleTemplate"> |
|
<span *ngFor="let o of i.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span *ngFor="let o of i.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
<span></span> |
|
</span> |
|
<ng-template #titleTemplate let-thing> |
|
<span style="margin-right: 6px;" *ngFor="let o of i.supervisors"> |
|
{{o.name}} |
|
</span> |
|
<span style="margin-right: 6px;" *ngFor="let o of i.assistantOrganizations"> |
|
{{o.name}} |
|
</span> |
|
</ng-template> |
|
<span> |
|
协助人员 |
|
</span> |
|
</div> |
|
<div class="flexcol"> |
|
<span class="ellipsi"> |
|
{{i.isSpread ? '已宣传' : '未宣传'}} |
|
</span> |
|
<span> |
|
同步工作 |
|
</span> |
|
</div> |
|
<div class="flexcol"> |
|
<span class="ellipsi" [title]="i.approvalStatus"> |
|
{{i.approvalStatus}} |
|
</span> |
|
<span> |
|
任务状态 |
|
</span> |
|
</div> |
|
<div class="flexcol"> |
|
<span class="ellipsi" [title]="i.inspectionResult"> |
|
{{i.inspectionResult}} |
|
</span> |
|
<span> |
|
检查结果 |
|
</span> |
|
</div> |
|
|
|
<div class="flexcol" style="flex: 2;"> |
|
<span class="ellipsi"> |
|
<nz-date-picker nzShowTime nzFormat="yyyy-MM-dd HH:mm:ss" |
|
[(ngModel)]="i.planTime" nzPlaceHolder="请选择检查日期" nzBorderless |
|
(ngModelChange)="checkTime($event,i,element)"> |
|
</nz-date-picker> |
|
</span> |
|
<span> |
|
检查时间 |
|
</span> |
|
</div> |
|
|
|
<div class="flexcol" style="flex: 1;"> |
|
<span class="ellipsi"> |
|
<span style="cursor: pointer;margin-right: 5px;" (click)="look(i)">查看</span> |
|
<span style="cursor: pointer;color: rgb(255, 64, 77);" (click)="deleteTask(item,i)">删除</span> |
|
</span> |
|
<span> |
|
操作 |
|
</span> |
|
</div> |
|
</div> |
|
|
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="cutoffrule"></div> |
|
</div> |
|
|
|
</div> |