Browse Source

[新增]今日预警实时更新;首页完善;油站信息填写完善;增加证照预警统计分析页面

dev
邵佳豪 3 years ago
parent
commit
8815d48053
  1. 1
      src/app/pages/criminal-records-admin/criminal-records-admin.component.html
  2. 4
      src/app/pages/criminal-records-admin/criminal-records-admin.component.ts
  3. 1
      src/app/pages/criminal-records/criminal-records.component.html
  4. 3
      src/app/pages/criminal-records/criminal-records.component.ts
  5. 16
      src/app/pages/home-page/home-page.component.html
  6. 36
      src/app/pages/home-page/home-page.component.scss
  7. 4
      src/app/pages/home/home.component.html
  8. 10
      src/app/pages/home/home.component.ts
  9. 188
      src/app/pages/oil-station-info/oil-station-info.component.html
  10. 53
      src/app/pages/oil-station-info/oil-station-info.component.scss
  11. 187
      src/app/pages/oil-station-info/oil-station-info.component.ts
  12. 1
      src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.html
  13. 20
      src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.ts
  14. 4
      src/app/pages/oil-unloading-process/oil-unloading-process.component.html
  15. 9
      src/app/pages/pages-routing.module.ts
  16. 3
      src/app/pages/pages.module.ts
  17. 38
      src/app/pages/today-warning-admin/today-warning-admin.component.html
  18. 26
      src/app/pages/today-warning-admin/today-warning-admin.component.ts
  19. 18
      src/app/pages/today-warning/today-warning.component.ts
  20. 185
      src/app/pages/warning-statistics-list/warning-statistics-list.component.html
  21. 615
      src/app/pages/warning-statistics-list/warning-statistics-list.component.scss
  22. 704
      src/app/pages/warning-statistics-list/warning-statistics-list.component.ts
  23. 22
      src/app/service/listRefresh.service.ts
  24. BIN
      src/assets/images/cameraNum.png
  25. BIN
      src/assets/images/fireNum.png
  26. BIN
      src/assets/images/licenseNum.png
  27. BIN
      src/assets/images/modelNum.png
  28. BIN
      src/assets/images/stationNum.png

1
src/app/pages/criminal-records-admin/criminal-records-admin.component.html

@ -9,6 +9,7 @@
<div class="contentitem">
<span>预警类型统计</span>
<span class="grey" (click)="goOilList()">卸油统计</span>
<!-- <span class="grey" (click)="goWarningList()">证照预警统计</span> -->
</div>
</div>
</div>

4
src/app/pages/criminal-records-admin/criminal-records-admin.component.ts

@ -657,7 +657,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
goOilList() {
this.router.navigate(['/records/oliunloadinglist'])
}
goWarningList(){
this.router.navigate(['/records/warningstatisticslist'])
}
dispose(item) {
console.log(item)

1
src/app/pages/criminal-records/criminal-records.component.html

@ -8,6 +8,7 @@
<div class="contentitem">
<span>预警类型统计</span>
<span class="grey" (click)="goOilList()">卸油统计</span>
<!-- <span class="grey" (click)="goWarningList()">证照预警统计</span> -->
</div>
</div>
</div>

3
src/app/pages/criminal-records/criminal-records.component.ts

@ -564,6 +564,9 @@ export class CriminalRecordsComponent implements OnInit {
goOilList() {
this.router.navigate(['/records/petrolStation/oliunloadinglist'])
}
goWarningList(){
this.router.navigate(['/records/petrolStation/warningstatisticslist'])
}
dispose(item) {
console.log(item)
const modal = this.modal.create({

16
src/app/pages/home-page/home-page.component.html

@ -125,7 +125,7 @@
{{key + 1}}
</ng-template>
</div>
{{item.companyName}} {{item.stationName}}
{{item.companyName}} {{item.stationName}}
</div>
<div class="progressbox">
<div class="progress">
@ -195,6 +195,20 @@
<span>摄像头(个)</span>
</div>
</div>
<div class="numlistbox">
<img src="../../../assets/images/licenseNum.png" alt="">
<div class="content">
<span class="lightspan lightspan3">{{HomeAggregatioData.dev.cameraCount}}</span>
<span>证照预警数量</span>
</div>
</div>
<div class="numlistbox">
<img src="../../../assets/images/fireNum.png" alt="">
<div class="content">
<span class="lightspan lightspan3">{{HomeAggregatioData.dev.cameraCount}}</span>
<span>消防设备预警数量</span>
</div>
</div>
<div class="angle-border left-top-border"></div>
<div class="angle-border right-top-border"></div>
<div class="angle-border left-bottom-border"></div>

36
src/app/pages/home-page/home-page.component.scss

@ -331,7 +331,7 @@
border: 0;
.warningnum {
width: 70px;
width: 170px;
position: absolute;
left: 50%;
transform: translateX(-50%);
@ -400,13 +400,13 @@
padding: 12px 0;
.numlistbox {
height: 64px;
height: 56px;
width: 61%;
display: flex;
img {
width: 64px;
height: 64px;
width: 56px;
height: 56px;
margin-right: 24px;
}
@ -420,10 +420,10 @@
}
.lightspan {
font-size: 36px;
font-size: 30px;
font-weight: 600;
line-height: 36px;
margin-bottom: 8px;
line-height: 30px;
margin-bottom: 5px;
}
.lightspan1 {
@ -821,7 +821,7 @@
flex: .8;
.warningnum {
width: 70px;
width: 170px;
position: absolute;
left: 50%;
transform: translateX(-50%);
@ -872,22 +872,22 @@
padding: 12px 0;
.numlistbox {
height: 64px;
height: 46px;
width: 70%;
display: flex;
align-items: center;
img {
width: 49px;
height: 49px;
width: 40px;
height: 40px;
margin-right: 16px;
}
.content {
.lightspan {
font-size: 23px;
line-height: 23px;
margin-bottom: 4px;
font-size: 20px;
line-height: 20px;
margin-bottom: 0px;
}
.lightspan1 {
@ -1163,7 +1163,7 @@
flex: .8;
.warningnum {
width: 70px;
width: 170px;
position: absolute;
left: 50%;
transform: translateX(-50%);
@ -1214,14 +1214,14 @@
padding: 8px 0;
.numlistbox {
height: 60px;
height:40px;
width: 80%;
display: flex;
align-items: center;
img {
width: 36px;
height: 36px;
width: 30px;
height: 30px;
margin-right: 12px;
}

4
src/app/pages/home/home.component.html

@ -13,7 +13,7 @@
<li [routerLink]="['/plan']" routerLinkActive="router-link-active">
数字油站
</li>
<li [routerLink]="['/warning']" routerLinkActive="router-link-active">
<li [routerLink]="['/todaywarning']" routerLinkActive="router-link-active">
今日预警
</li>
<li [routerLink]="['/records']" routerLinkActive="router-link-active">
@ -24,7 +24,7 @@
<li [routerLink]="['/plan/petrolStation']" routerLinkActive="router-link-active">
数字油站
</li>
<li [routerLink]="['/warning/petrolStation']" routerLinkActive="router-link-active">
<li [routerLink]="['/todaywarning/petrolStation']" routerLinkActive="router-link-active">
今日预警
</li>
<li [routerLink]="['/records/petrolStation']" routerLinkActive="router-link-active">

10
src/app/pages/home/home.component.ts

@ -11,6 +11,7 @@ import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-d
import { NzModalService } from 'ng-zorro-antd/modal';
import { HttpClient } from '@angular/common/http';
import { ChangePasswordComponent } from '../change-password/change-password.component';
import { listRefreshService } from '../../service/listRefresh.service';
declare var abp: any
@Component({
@ -20,7 +21,7 @@ declare var abp: any
})
export class HomeComponent implements OnInit {
@ViewChild('warning', { static: false }) template?: TemplateRef<{}>;
constructor(private http: HttpClient, private router: Router, private navChangeService: NavChangeService, public token: CacheTokenService,
constructor(private listRefreshService: listRefreshService, private http: HttpClient, private router: Router, private navChangeService: NavChangeService, public token: CacheTokenService,
private cookieService: CookieService, private message: NzMessageService, private notificationService: NzNotificationService, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { }
isGasStationNav: boolean
@ -87,6 +88,9 @@ export class HomeComponent implements OnInit {
reloadPage = (userNotification) => {
console.log('abp.notifications.received收到通知', userNotification);
if (this.router.url.indexOf('todaywarning') != -1) {
this.listRefreshService.sendMessage(userNotification);//发布一条消息
}
this.receiptOfNotification(userNotification)
};
@ -106,14 +110,14 @@ export class HomeComponent implements OnInit {
modalData
look(item) {
console.log('推送信息',item)
console.log('推送信息', item)
let params = {
id: item.notification.entityId
}
this.http.get('/api/services/app/ViolateRecord/Get', {
params: params
}).subscribe((data: any) => {
console.log('推送信息后获取信息',data)
console.log('推送信息后获取信息', data)
const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzWrapClassName: "vertical-center-modal",

188
src/app/pages/oil-station-info/oil-station-info.component.html

@ -83,7 +83,8 @@
<nz-form-item>
<nz-form-control>
<nz-input-group>
<input required [(ngModel)]="httpBody.companyName" nz-input type="text" formControlName="companyName" />
<input required [(ngModel)]="httpBody.companyName" nz-input type="text"
formControlName="companyName" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
@ -299,125 +300,92 @@
</td>
</tr>
</table>
<table formGroupName="validityTime" class="imgtable" id="images">
<tr>
<td class="head">营业执照</td>
<table class="imgtable" id="images">
<tr *ngFor="let item of httpBody.licenses;let key = index">
<td class="head" [title]="item.name">{{item.name}}</td>
<td colspan="3" class="imgbox">
<div class="uploadDivbox">
<div class="uploadDiv">
<img *ngIf="httpBody.businessLicenseImage" style="width: 100%;height: 100%;"
[src]="httpBody.businessLicenseImage" alt="">
<input *ngIf="!httpBody.businessLicenseImage" (change)="filechange($event,'businessLicense')"
class="fileinput" type="file" name="" id="">
<button *ngIf="!httpBody.businessLicenseImage" nz-button [nzLoading]="isLoadingOne"><i nz-icon
nzType="upload" nzTheme="outline"></i>上传图片</button>
<img *ngIf="item.imageUrl" style="width: 100%;height: 100%;" [src]="item.imageUrl" alt="">
<input *ngIf="!item.imageUrl" (change)="filechange($event,key)" class="fileinput" type="file"
name="" id="">
<button *ngIf="!item.imageUrl" nz-button [nzLoading]=""><i nz-icon nzType="upload"
nzTheme="outline"></i>上传图片</button>
</div>
<div class="uploadDiv" *ngIf="httpBody.businessLicenseImage">
<input (change)="filechange($event,'businessLicense')" class="fileinput" type="file" name="" id="">
<button nz-button [nzLoading]="isLoadingOne"><i nz-icon nzType="upload"
nzTheme="outline"></i>重新上传</button>
<div class="uploadDiv" *ngIf="item.imageUrl">
<input (change)="filechange($event,key)" class="fileinput" type="file" name="" id="">
<button nz-button [nzLoading]=""><i nz-icon nzType="upload" nzTheme="outline"></i>重新上传</button>
</div>
<div class="timeDiv">
<nz-form-item style="width: 40%;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-range-picker [(ngModel)]="businessLicensevalidityTime"
formControlName="businessLicensevalidityTime">
</nz-range-picker>
</nz-form-control>
</nz-form-item>
<span><span style="color: red;">*</span>提前预警时间天数:</span>
<nz-form-item style="width: 50px;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-input-group>
<input style="padding: 0;text-align: center;" [(ngModel)]="httpBody.validityTermDays" nz-input
type="number" formControlName="businessLicensevalidityTimeDay" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<span></span>
<div class="timeDiv" style="min-width: 454px;">
<div class="timeDivflex">
<nz-form-item style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker required [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'开始时间'"
[(ngModel)]="item.startTime" (ngModelChange)="onChange($event)"></nz-date-picker>
</nz-form-control>
</nz-form-item>
<nz-form-item style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'结束时间'"
[(ngModel)]="item.endTime" (ngModelChange)="onChange($event)"></nz-date-picker>
</nz-form-control>
</nz-form-item>
</div>
<div class="timeDivflex" style="margin: 6px 0;">
<nz-form-item style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'一次提醒时间'"
[(ngModel)]="item.firstWarnTime" (ngModelChange)="onChange($event)"></nz-date-picker>
</nz-form-control>
</nz-form-item>
<nz-form-item style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'二次提醒时间'"
[(ngModel)]="item.secondWarnTime" (ngModelChange)="onChange($event)"></nz-date-picker>
</nz-form-control>
</nz-form-item>
</div>
<div class="timeDivflex timeDivflex2">
<!-- <nz-form-item style="margin-right: 10px;color: white;">
<nz-form-control>
<nz-input-group>
</nz-input-group>
</nz-form-control>
</nz-form-item> -->
<label style="color: white;" [ngModelOptions]="{standalone: true}" nz-checkbox
[(ngModel)]="item.hasAnnualInspection">是否年检</label>
<nz-form-item *ngIf="item.hasAnnualInspection" style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'年检时间'"
[(ngModel)]="item.annualInspectionTime" (ngModelChange)="onChange($event)"></nz-date-picker>
</nz-form-control>
</nz-form-item>
<nz-form-item *ngIf="item.hasAnnualInspection" style="border: 1px solid #91CCFF">
<nz-form-control>
<nz-date-picker [ngModelOptions]="{standalone: true}" [nzPlaceHolder]="'年检提醒时间'"
[(ngModel)]="item.annualInspectionWarnTime" (ngModelChange)="onChange($event)">
</nz-date-picker>
</nz-form-control>
</nz-form-item>
</div>
</div>
</div>
<a class="deleteTr" nz-popconfirm nzPopconfirmTitle="确定删除该证照吗?" nzPopconfirmPlacement="bottom"
(nzOnConfirm)="deleteTrConfirm(key)">
<i *ngIf="item.name != '营业执照' && item.name != '危险化学品' && item.name != '成品油零售'" nz-icon nzType="close"
nzTheme="outline"></i>
</a>
</td>
</tr>
<tr>
<td class="head">危险化学品<br>经营许可证</td>
<td colspan="3" class="imgbox">
<div class="uploadDivbox">
<div class="uploadDiv">
<img *ngIf="httpBody.dangerousChemicalLicenseImage" style="width: 100%;height: 100%;"
[src]="httpBody.dangerousChemicalLicenseImage" alt="">
<input *ngIf="!httpBody.dangerousChemicalLicenseImage"
(change)="filechange($event,'dangerousChemical')" class="fileinput" type="file" name="" id="">
<button *ngIf="!httpBody.dangerousChemicalLicenseImage" nz-button [nzLoading]="isLoadingTwo"><i
nz-icon nzType="upload" nzTheme="outline"></i>上传图片</button>
</div>
<div class="uploadDiv" *ngIf="httpBody.dangerousChemicalLicenseImage">
<input (change)="filechange($event,'dangerousChemical')" class="fileinput" type="file" name=""
id="">
<button nz-button [nzLoading]="isLoadingTwo"><i nz-icon nzType="upload"
nzTheme="outline"></i>重新上传</button>
</div>
<div class="timeDiv">
<nz-form-item style="width: 40%;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-range-picker [(ngModel)]="hazardousLicensevalidityTime"
formControlName="hazardousLicensevalidityTime">
</nz-range-picker>
</nz-form-control>
</nz-form-item>
<span><span style="color: red;">*</span>提前预警时间天数:</span>
<nz-form-item style="width: 50px;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-input-group>
<input style="padding: 0;text-align: center;" [(ngModel)]="httpBody.dangerousTermDays" nz-input
type="number" formControlName="hazardousLicensevalidityTimeDay" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<span></span>
</div>
</div>
</td>
</tr>
<tr>
<td class="head">成品油零售<br>经营许可证</td>
<td colspan="3" class="imgbox">
<div class="uploadDivbox">
<div class="uploadDiv">
<img *ngIf="httpBody.gasSellLicenseImage" style="width: 100%;height: 100%;"
[src]="httpBody.gasSellLicenseImage" alt="">
<input *ngIf="!httpBody.gasSellLicenseImage" (change)="filechange($event,'retailOfRefinedOil')"
class="fileinput" type="file" name="" id="">
<button *ngIf="!httpBody.gasSellLicenseImage" nz-button [nzLoading]="isLoadingThree"><i nz-icon
nzType="upload" nzTheme="outline"></i>上传图片</button>
</div>
<div class="uploadDiv" *ngIf="httpBody.gasSellLicenseImage">
<input (change)="filechange($event,'retailOfRefinedOil')" class="fileinput" type="file" name=""
id="">
<button nz-button [nzLoading]="isLoadingThree"><i nz-icon nzType="upload"
nzTheme="outline"></i>重新上传</button>
</div>
<div class="timeDiv">
<nz-form-item style="width: 40%;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-range-picker [(ngModel)]="oilLicensevalidityTime" formControlName="oilLicensevalidityTime">
</nz-range-picker>
</nz-form-control>
</nz-form-item>
<span><span style="color: red;">*</span>提前预警时间天数:</span>
<nz-form-item style="width: 50px;border: 1px solid #91CCFF;margin-right: 12px;">
<nz-form-control>
<nz-input-group>
<input style="padding: 0;text-align: center;" [(ngModel)]="httpBody.sellLicenseTermDays" nz-input
type="number" formControlName="oilLicensevalidityTimeDay" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<span></span>
</div>
</div>
<tr style="height: 50px;">
<td colspan="4">
<i style="cursor: pointer;" nz-icon nzType="plus" nzTheme="outline" (click)="showModal()"></i>
<nz-modal [nzWidth]="380" [(nzVisible)]="isVisible" nzTitle="新增证照" (nzOnCancel)="handleCancel()"
(nzOnOk)="handleOk()">
<input [ngModelOptions]="{standalone: true}" nz-input placeholder="请输入证照名称" [(ngModel)]="addName" />
</nz-modal>
</td>
</tr>
</table>

53
src/app/pages/oil-station-info/oil-station-info.component.scss

@ -69,14 +69,17 @@
color: #23D9FF;
text-align: right;
padding: 0 16px;
max-width: 170px;
}
.text {
width: 33%;
}
.text2 {
width: 83%;
}
.organizations {
text-align: left;
color: #fff;
@ -89,10 +92,17 @@
tr,
td {
height: 98px;
height: 138px;
}
.imgbox {
position: relative;
.deleteTr{
position: absolute;
right: 5px;
top: 5px;
cursor: pointer;
}
.uploadDivbox {
width: 100%;
height: 100%;
@ -102,15 +112,7 @@
align-items: center;
position: relative;
}
.timeDiv{
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
display: flex;
align-items: center;
justify-content: flex-end;
}
.uploadDiv {
margin-left: 16px;
width: 120px;
@ -142,6 +144,37 @@
color: #91CCFF;
}
}
.timeDiv {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: space-around;
.timeDivflex {
width: 100%;
display: flex;
nz-form-item {
width: 45%;
margin-right: 15px;
}
}
.timeDivflex2 {
align-items: center;
nz-form-item {
width: 36%;
margin-right: 9px;
}
}
}
}
}
}

187
src/app/pages/oil-station-info/oil-station-info.component.ts

@ -27,7 +27,6 @@ export class OilStationInfoComponent implements OnInit {
oilStationType: [null],
laneNumber: [null],
address: [null],
// validityTime: [null, [Validators.required]],//营业执照有效期
locationName: [null],
companyName: [null],
leaderName: [null],
@ -55,30 +54,24 @@ export class OilStationInfoComponent implements OnInit {
distance: [null],
contactInformation: [null]
}),
validityTime: this.fb.group({
businessLicensevalidityTime: [null],
businessLicensevalidityTimeDay: [null, [Validators.required]],
hazardousLicensevalidityTime: [null],
hazardousLicensevalidityTimeDay: [null, [Validators.required]],
oilLicensevalidityTime: [null],
oilLicensevalidityTimeDay: [null, [Validators.required]]
})
// validityTime: this.fb.group({
// businessLicensevalidityTime: [null],
// businessLicensevalidityTimeDay: [null, [Validators.required]],
// hazardousLicensevalidityTime: [null],
// hazardousLicensevalidityTimeDay: [null, [Validators.required]],
// oilLicensevalidityTime: [null],
// oilLicensevalidityTimeDay: [null, [Validators.required]]
// })
});
this.getInfo()
}
validityTime: any = []//营业执照有效期
businessLicensevalidityTime: any = []//营业执照有效期
hazardousLicensevalidityTime: any = []//危化品有效期
oilLicensevalidityTime: any = []//成品油有效期
//获取油站信息
gallery
gasStationId
getInfo() {
this.http.get('/api/services/app/GasStation/Get', {
params: {
@ -87,40 +80,26 @@ export class OilStationInfoComponent implements OnInit {
}).subscribe((data: any) => {
console.log('油站信息', data)
this.httpBody = data.result
this.gasStationId = data.result.id
if (!data.result.govUnitDetail) {
if (!this.httpBody.govUnitDetail) {
this.httpBody.govUnitDetail = {
policeStation: {},
hospital: {},
fireBrigade: {}
}
} else {
this.httpBody.govUnitDetail = JSON.parse(data.result.govUnitDetail)
console.log('走这里了', data.result.govUnitDetail)
this.policeStation = data.result.govUnitDetail.policeStation
this.hospital = data.result.govUnitDetail.hospital
this.fireBrigade = data.result.govUnitDetail.fireBrigade
}
this.httpBody.stationType = String(this.httpBody.stationType)
this.businessLicensevalidityTime[0] = data.result.validityStartTime
this.businessLicensevalidityTime[1] = data.result.validityEndTime
this.businessLicensevalidityTime = [...this.businessLicensevalidityTime]
this.hazardousLicensevalidityTime[0] = data.result.dangerousStartTime
this.hazardousLicensevalidityTime[1] = data.result.dangerousEndTime
this.hazardousLicensevalidityTime = [...this.hazardousLicensevalidityTime]
this.oilLicensevalidityTime[0] = data.result.sellLicenseStartTime
this.oilLicensevalidityTime[1] = data.result.sellLicenseEndTime
this.oilLicensevalidityTime = [...this.oilLicensevalidityTime]
// if (this.httpBody.govUnitDetail) {
// //
// } else {
// }
if (this.httpBody.licenses.length == 0) {
this.httpBody.licenses = [
{ name: '营业执照', startTime: '', endTime: '', firstWarnTime: '', secondWarnTime: '', imageUrl: '', annualInspectionTime: '', annualInspectionWarnTime: '', type: 1, hasAnnualInspection: true },
{ name: '危险化学品', startTime: '', endTime: '', firstWarnTime: '', secondWarnTime: '', imageUrl: '', annualInspectionTime: '', annualInspectionWarnTime: '', type: 3, hasAnnualInspection: false },
{ name: '成品油零售', startTime: '', endTime: '', firstWarnTime: '', secondWarnTime: '', imageUrl: '', annualInspectionTime: '', annualInspectionWarnTime: '', type: 2, hasAnnualInspection: true }
]
}
this.httpBody.stationType ? this.httpBody.stationType = String(this.httpBody.stationType) : null
setTimeout(() => {
this.gallery = new Viewer(document.getElementById('images'), {
show: () => { // 动态加载图片后,更新实例
@ -138,7 +117,7 @@ export class OilStationInfoComponent implements OnInit {
const httpOptions = {
responseType: 'blob' as 'json'
};
this.http.get(`/api/services/app/GasStation/ExportExcelFile?gasStationId=${this.gasStationId}`, httpOptions).subscribe((data: any) => {
this.http.get(`/api/services/app/GasStation/ExportExcelFile?gasStationId=${this.httpBody.id}`, httpOptions).subscribe((data: any) => {
// console.log('导出成功')
// 文件名中有中文 则对文件名进行转码
const link = document.createElement('a');
@ -177,15 +156,6 @@ export class OilStationInfoComponent implements OnInit {
id: null,
stationName: JSON.parse(sessionStorage.getItem('userdata')).organization.displayName,
organizationUnitId: JSON.parse(sessionStorage.getItem('userdata')).organization.id,
validityStartTime: '',
validityEndTime: '',
dangerousStartTime: '',
dangerousEndTime: '',
sellLicenseStartTime: '',
sellLicenseEndTime: '',
validityTermDays: null,
dangerousTermDays: null,
sellLicenseTermDays: null,
openTime: '',
stationType: '',
laneCount: '',
@ -205,27 +175,50 @@ export class OilStationInfoComponent implements OnInit {
},
businessLicenseImage: '',
dangerousChemicalLicenseImage: '',
gasSellLicenseImage: ''
gasSellLicenseImage: '',
licenses: [
]
}
onChange($event) {
}
addName = ''
isVisible = false;
showModal(): void {
console.log(this.addName)
this.addName = ''
this.isVisible = true;
}
handleOk(): void {
this.isVisible = false;
if(this.addName){
this.addTr()
}
}
handleCancel(): void {
console.log('Button cancel clicked!');
this.isVisible = false;
}
addTr() {
this.httpBody.licenses.push(
{ name: this.addName, startTime: '', endTime: '', firstWarnTime: '', secondWarnTime: '', imageUrl: '', annualInspectionTime: '', annualInspectionWarnTime: '', type: -1, hasAnnualInspection: false },
)
}
deleteTrConfirm(key){
console.log(key)
this.httpBody.licenses.splice(key, 1);
}
goback() {
this.router.navigate(['/warning/petrolStation'])
}
submitForm() {
// console.log(this.validateForm)
// console.log(this.httpBody)
if (this.validateForm.valid) {
this.isLoadingSave = true
this.httpBody.openTime = moment(this.httpBody.openTime).format('YYYY-MM-MM')//开业时间格式化
this.httpBody.validityStartTime = moment(this.businessLicensevalidityTime[0]).format('YYYY-MM-MM')//
this.httpBody.validityEndTime = moment(this.businessLicensevalidityTime[1]).format('YYYY-MM-MM')//
this.httpBody.dangerousStartTime = moment(this.hazardousLicensevalidityTime[0]).format('YYYY-MM-MM')//
this.httpBody.dangerousEndTime = moment(this.hazardousLicensevalidityTime[1]).format('YYYY-MM-MM')//
this.httpBody.sellLicenseStartTime = moment(this.oilLicensevalidityTime[0]).format('YYYY-MM-MM')//
this.httpBody.sellLicenseEndTime = moment(this.oilLicensevalidityTime[1]).format('YYYY-MM-MM')//
this.httpBody.govUnitDetail.policeStation = this.validateForm.value.policeStation
this.httpBody.govUnitDetail.hospital = this.validateForm.value.hospital
this.httpBody.govUnitDetail.fireBrigade = this.validateForm.value.fireBrigade
@ -233,25 +226,15 @@ export class OilStationInfoComponent implements OnInit {
let body = JSON.parse(JSON.stringify(this.httpBody))
body.stationType
body.govUnitDetail = JSON.stringify(this.httpBody.govUnitDetail)
if (this.httpBody.id) {
this.http.put('/api/services/app/GasStation/Update', body).subscribe((data: any) => {
this.isLoadingSave = false
this.message.create('success', '保存成功!');
}, err => {
this.isLoadingSave = false
this.message.create('error', '保存失败!');
})
} else {
this.http.post('/api/services/app/GasStation/Create', body).subscribe((data: any) => {
this.httpBody.id = data.result.id
this.isLoadingSave = false
this.message.create('success', '保存成功!');
}, err => {
this.isLoadingSave = false
this.message.create('error', '保存失败!');
})
}
console.log(body)
this.http.put('/api/services/app/GasStation/Update', body).subscribe((data: any) => {
this.isLoadingSave = false
this.message.create('success', '保存成功!');
this.httpBody.licenses = data.result.licenses
}, err => {
this.isLoadingSave = false
this.message.create('error', '保存失败!');
})
} else {
this.message.create('warning', '请填写完整!');
return false
@ -259,23 +242,11 @@ export class OilStationInfoComponent implements OnInit {
}
isLoadingOne: boolean = false
isLoadingTwo: boolean = false
isLoadingThree: boolean = false
isLoadingSave: boolean = false
uploadType: string
filechange(e, type) {
uploadIndex: string
filechange(e, index) {
let file = e.target.files[0] || null //获取上传的文件
this.uploadType = type
if (this.uploadType == 'businessLicense') {//营业执照
this.isLoadingOne = true
}
if (this.uploadType == 'dangerousChemical') {//危化品销售
this.isLoadingTwo = true
}
if (this.uploadType == 'retailOfRefinedOil') {//成品油零售
this.isLoadingThree = true
}
this.uploadIndex = index
this.openFileSelect(file, `stationPhotos/${this.userdata.organization.id}/`)
}
//设置文件路径并上传
@ -307,18 +278,7 @@ export class OilStationInfoComponent implements OnInit {
this.objectsSrv.postFile(this.postFilePath, file).subscribe(data => {
let dataObj = data as any;
let filePath: string = ObjectsSimpleService.baseUrl + dataObj.objectName;
if (this.uploadType == 'businessLicense') {//营业执照
this.httpBody.businessLicenseImage = filePath
this.isLoadingOne = false
}
if (this.uploadType == 'dangerousChemical') {//危化品
this.httpBody.dangerousChemicalLicenseImage = filePath
this.isLoadingTwo = false
}
if (this.uploadType == 'retailOfRefinedOil') {//成品油
this.httpBody.gasSellLicenseImage = filePath
this.isLoadingThree = false
}
this.httpBody.licenses[this.uploadIndex].imageUrl = filePath
resolve('success')
});
})
@ -331,18 +291,7 @@ export class OilStationInfoComponent implements OnInit {
postFileByMul(file: File) {
this.objectsSrv.postFile_MultipartUpload(this.postFilePath, file).then((value) => {
let dataObj = value as any;
if (this.uploadType == 'businessLicense') {//营业执照
this.httpBody.businessLicenseImage = dataObj.filePath
this.isLoadingOne = false
}
if (this.uploadType == 'dangerousChemical') {//危化品
this.httpBody.dangerousChemicalLicenseImage = dataObj.filePath
this.isLoadingTwo = false
}
if (this.uploadType == 'retailOfRefinedOil') {//成品油
this.httpBody.gasSellLicenseImage = dataObj.filePath
this.isLoadingThree = false
}
this.httpBody.licenses[this.uploadIndex].imageUrl = dataObj.filePath
});
}

1
src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.html

@ -8,6 +8,7 @@
<div class="contentitem">
<span class="grey" (click)="gorecordList()">预警类型统计</span>
<span>卸油统计</span>
<!-- <span class="grey" (click)="goWarningList()">证照预警统计</span> -->
</div>
</div>
</div>

20
src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.ts

@ -563,7 +563,7 @@ export class OilUnloadingProcessListComponent implements OnInit {
})
}
//获取统计信息
chartsSpin:boolean = false
chartsSpin: boolean = false
getAggregations() {
this.chartsSpin = true
let organizationUnitId
@ -590,7 +590,7 @@ export class OilUnloadingProcessListComponent implements OnInit {
MaxResultCount: string = '50'
list: any = []
totalCount: string
tableSpin:boolean = false
tableSpin: boolean = false
getViolateRecordList() {
this.tableSpin = true
let organizationUnitId
@ -642,7 +642,7 @@ export class OilUnloadingProcessListComponent implements OnInit {
console.log(JSON.parse(sessionStorage.getItem('userdata')).organization.id)
// this.validateForm.value.organization = JSON.parse(sessionStorage.getItem('userdata')).organization.id
this.validateForm.patchValue({
organization:JSON.parse(sessionStorage.getItem('userdata')).organization.id,
organization: JSON.parse(sessionStorage.getItem('userdata')).organization.id,
datePicker: [this.startdate, this.enddate]
});
this.list = []
@ -686,7 +686,17 @@ export class OilUnloadingProcessListComponent implements OnInit {
}
gorecordList() {
// this.router.navigate(['/records/records'])
history.go(-1)
if (this.router.url.indexOf('petrolStation') != -1) {
this.router.navigate(['/records/petrolStation'])
} else {
this.router.navigate(['/records'])
}
}
goWarningList() {
if (this.router.url.indexOf('petrolStation') != -1) {
this.router.navigate(['/records/petrolStation/warningstatisticslist'])
} else {
this.router.navigate(['/records/warningstatisticslist'])
}
}
}

4
src/app/pages/oil-unloading-process/oil-unloading-process.component.html

@ -134,10 +134,6 @@
<div class="colimglist">
<div class="imgbox">
<!-- <span class="timespan"><i nz-icon nzType="clock-circle" nzTheme="outline"></i>暂无步骤</span>
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div> -->
<span class="name">开始卸油</span>
</div>
<img class="rightArrow" src="../../../assets/images/rightArrow.png" alt="">

9
src/app/pages/pages-routing.module.ts

@ -3,7 +3,7 @@ import { NgModule } from '@angular/core';
import { PlanComponent } from './plan/plan.component';
import { TodayWarningComponent } from './today-warning/today-warning.component';
import { CriminalRecordsComponent } from './criminal-records/criminal-records.component';
import {AuthGuard} from '../auth.guard'
import { AuthGuard } from '../auth.guard'
import { TodayWarningAdminComponent } from './today-warning-admin/today-warning-admin.component';
import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal-records-admin.component';
import { OilStationInfoComponent } from './oil-station-info/oil-station-info.component';
@ -12,17 +12,20 @@ import { PlanAdminComponent } from './plan-admin/plan-admin.component';
import { HomePageComponent } from './home-page/home-page.component';
import { OilUnloadingProcessListComponent } from './oil-unloading-process-list/oil-unloading-process-list.component';
import { init3DGuard } from './init3D.guard';
import { WarningStatisticsListComponent } from './warning-statistics-list/warning-statistics-list.component';
const routes: Routes = [
{ path: 'homepage', component: HomePageComponent },
{ path: 'plan', component: PlanAdminComponent },
{ path: 'plan/petrolStation', component: PlanComponent, canActivate: [init3DGuard], },
{ path: 'warning', component: TodayWarningAdminComponent },
{ path: 'warning/petrolStation', component: TodayWarningComponent },
{ path: 'todaywarning', component: TodayWarningAdminComponent },
{ path: 'todaywarning/petrolStation', component: TodayWarningComponent },
{ path: 'records', component: CriminalRecordsAdminComponent },
{ path: 'records/petrolStation', component: CriminalRecordsComponent },
{ path: 'records/oliunloadinglist', component: OilUnloadingProcessListComponent },
{ path: 'records/petrolStation/oliunloadinglist', component: OilUnloadingProcessListComponent },
{ path: 'records/warningstatisticslist', component: WarningStatisticsListComponent },
{ path: 'records/petrolStation/warningstatisticslist', component: WarningStatisticsListComponent },
{ path: 'equipmentInfo', component: EquipmentInfoComponent },
{ path: 'oliStationInfo', component: OilStationInfoComponent }
];

3
src/app/pages/pages.module.ts

@ -55,11 +55,12 @@ import { HomePageComponent } from './home-page/home-page.component';
import { OilUnloadingProcessListComponent } from './oil-unloading-process-list/oil-unloading-process-list.component';
import { ChangePasswordComponent } from './change-password/change-password.component';
import { FacilitySortPipe } from './facility-sort.pipe';
import { WarningStatisticsListComponent } from './warning-statistics-list/warning-statistics-list.component';
@NgModule({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,
TodayWarningAdminComponent, CriminalRecordsAdminComponent, LeftDomainComponent, EquipmentInfoComponent, OilStationInfoComponent,
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent, DispositionComponent, OilUnloadingProcessComponent, HomePageComponent, OilUnloadingProcessListComponent, ChangePasswordComponent, FacilitySortPipe],
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent, DispositionComponent, OilUnloadingProcessComponent, HomePageComponent, OilUnloadingProcessListComponent, ChangePasswordComponent, FacilitySortPipe, WarningStatisticsListComponent],
imports: [

38
src/app/pages/today-warning-admin/today-warning-admin.component.html

@ -22,15 +22,17 @@
<nz-form-item class="searchParams searchParamsLong">
<nz-form-control>
<nz-tree-select [nzAllowClear]="false" [nzDropdownClassName]="'maxHeightTreeSelect'" nzShowSearch [(ngModel)]="defaultOrId"
formControlName="organization" [nzNodes]="nodes" nzPlaceHolder="请选择所属机构" [nzExpandedIcon]="multiExpandedIconTpl">
<nz-tree-select [nzAllowClear]="false" [nzDropdownClassName]="'maxHeightTreeSelect'" nzShowSearch
[(ngModel)]="defaultOrId" formControlName="organization" [nzNodes]="nodes" nzPlaceHolder="请选择所属机构"
[nzExpandedIcon]="multiExpandedIconTpl">
</nz-tree-select>
<ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate">
</ng-container>
<ng-template #elseTemplate>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'" class="ant-tree-switcher-line-icon"></i>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'"
class="ant-tree-switcher-line-icon"></i>
</ng-template>
</ng-template>
</nz-form-control>
@ -77,13 +79,15 @@
</nz-form-item>
<nz-form-item class="searchParams">
<nz-form-control>
<nz-time-picker [nzAllowEmpty]="false" nzPlaceHolder="请选择开始时间" formControlName="datePickerStart" nzFormat="HH:mm"></nz-time-picker>
<nz-time-picker [nzAllowEmpty]="false" nzPlaceHolder="请选择开始时间" formControlName="datePickerStart"
nzFormat="HH:mm"></nz-time-picker>
</nz-form-control>
</nz-form-item>
<i style="display: flex;align-items: center;color: #fff;" nz-icon nzType="swap-right" nzTheme="outline"></i>
<nz-form-item class="searchParams">
<nz-form-control>
<nz-time-picker [nzAllowEmpty]="false" nzPlaceHolder="请选择结束时间" formControlName="datePickerEnd" nzFormat="HH:mm"></nz-time-picker>
<nz-time-picker [nzAllowEmpty]="false" nzPlaceHolder="请选择结束时间" formControlName="datePickerEnd"
nzFormat="HH:mm"></nz-time-picker>
</nz-form-control>
</nz-form-item>
@ -102,7 +106,7 @@
</form>
</div>
<div class="listbox" style="text-align: center;">
<div nz-row class="listitem listitemhead">
<div nz-col nzSpan="2" style="box-sizing: border-box;padding-left: 30px;">
预警级别
@ -110,13 +114,13 @@
<div nz-col nzSpan="2">
预警类型
</div>
<div nz-col nzSpan="3">
<div nz-col nzSpan="2">
预警事件
</div>
<div nz-col nzSpan="2">
所属公司
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="3">
管理区域
</div>
<div nz-col nzSpan="2">
@ -138,7 +142,7 @@
操作
</div>
</div>
<div nz-row class="listitem" *ngFor="let item of list">
<div nz-col nzSpan="2" class="imgbox">
<span *ngIf="item.violation.violationType == '卸油作业检查'">
@ -167,25 +171,25 @@
Ⅳ级
</span>
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="2" [title]="item.violation.violationType">
{{item.violation.violationType}}
</div>
<div nz-col nzSpan="3">
<div nz-col nzSpan="2" [title]="item.violation.eventSystemName">
{{item.violation.eventSystemName}}
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="2" [title]="item.gasStation.companyName">
{{item.gasStation.companyName}}
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="3" [title]="item.gasStation.locationName">
{{item.gasStation.locationName}}
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="2" [title]="item.gasStation.stationName">
{{item.gasStation.stationName}}
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="2" [title]="item.violateArea">
{{item.violateArea}}
</div>
<div nz-col nzSpan="2">
<div nz-col nzSpan="2" [title]="item.cameraNo">
{{item.cameraNo}}
</div>
<div nz-col nzSpan="3">

26
src/app/pages/today-warning-admin/today-warning-admin.component.ts

@ -15,7 +15,7 @@ import { NavChangeService } from '../../service/navChange.service';
import 'linqjs';
import { DispositionComponent } from '../disposition/disposition.component';
import { NzMessageService } from 'ng-zorro-antd/message';
import { listRefreshService } from '../../service/listRefresh.service';
@Component({
selector: 'app-today-warning-admin',
templateUrl: './today-warning-admin.component.html',
@ -24,8 +24,8 @@ import { NzMessageService } from 'ng-zorro-antd/message';
export class TodayWarningAdminComponent implements OnInit {
validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder, private router: Router, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService, private message: NzMessageService) { }
isSpin:boolean = false
constructor(private listRefreshService: listRefreshService, private http: HttpClient, private fb: FormBuilder, private router: Router, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService, private message: NzMessageService) { }
isSpin: boolean = false
ngOnInit(): void {
this.validateForm = this.fb.group({
level: [null],
@ -40,11 +40,25 @@ export class TodayWarningAdminComponent implements OnInit {
this.warningType()
this.isSpin = true
this.getAllOrganization()
this.listRefreshService.getMessage().subscribe((message: any) => {
// console.log('需要更新列表了', message);//send a message
this.getEarlyWarningList()
// let params = {
// id: message.notification.entityId
// }
// this.http.get('/api/services/app/ViolateRecord/Get', {
// params: params
// }).subscribe((data: any) => {
// this.list.unshift(data.result)
// console.log('新获取一条', data.result)
// })
});
}
//预警类型接口
warningTypes: any //预警接口数据
warningTypesDetailsMetadata:any
warningTypesDetailsMetadata: any
warningTypesDetails: any
warningType() {
this.http.get('/api/services/app/Violation/GetAllList').subscribe((data: any) => {
@ -55,7 +69,7 @@ export class TodayWarningAdminComponent implements OnInit {
}
typeChange(e) {
// console.log(e)
if(!e){
if (!e) {
this.warningTypesDetails = this.warningTypesDetailsMetadata
}
this.warningTypes.forEach(element => {
@ -196,7 +210,7 @@ export class TodayWarningAdminComponent implements OnInit {
},
nzFooter: null,
nzOnOk: async () => {
console.log(99999,instance.content)
console.log(99999, instance.content)
}
});
const instance = modal.getContentComponent();

18
src/app/pages/today-warning/today-warning.component.ts

@ -10,6 +10,7 @@ import { NavChangeService } from '../../service/navChange.service';
import * as moment from 'moment';
import { DispositionComponent } from '../disposition/disposition.component';
import { NzMessageService } from 'ng-zorro-antd/message';
import { listRefreshService } from '../../service/listRefresh.service';
@Component({
selector: 'app-today-warning',
templateUrl: './today-warning.component.html',
@ -17,7 +18,7 @@ import { NzMessageService } from 'ng-zorro-antd/message';
})
export class TodayWarningComponent implements OnInit {
validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService, private message: NzMessageService) { }
constructor(private listRefreshService: listRefreshService, private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService, private message: NzMessageService) { }
ngOnInit(): void {
this.validateForm = this.fb.group({
@ -30,6 +31,19 @@ export class TodayWarningComponent implements OnInit {
});
this.warningType()
this.getEarlyWarningList()
this.listRefreshService.getMessage().subscribe((message: any) => {
// console.log('需要更新列表了', message);//send a message
this.getEarlyWarningList()
// let params = {
// id: message.notification.entityId
// }
// this.http.get('/api/services/app/ViolateRecord/Get', {
// params: params
// }).subscribe((data: any) => {
// this.list.unshift(data.result)
// console.log('新获取一条', data.result)
// })
});
}
//预警类型接口
@ -54,7 +68,7 @@ export class TodayWarningComponent implements OnInit {
list: any = [
]
totalCount: string //预警总数
isSpin:boolean = false
isSpin: boolean = false
getEarlyWarningList() {
let ViolationIds = []
if (this.validateForm.value.type) {

185
src/app/pages/warning-statistics-list/warning-statistics-list.component.html

@ -0,0 +1,185 @@
<div class="recordsbox" id="recordsbox">
<div class="content">
<div class="title">
<div class="titlebox">
<img src="../../../assets/images/logosm.png" alt="">
<div class="content">
<div class="contentitem">
<span class="grey" (click)="gorecordList()">预警类型统计</span>
<span class="grey" (click)="goOilList()">卸油统计</span>
<span>证照预警统计</span>
</div>
</div>
</div>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div>
<div class="chartsbox" [hidden]="!isEcharts">
<div class="chart">
<div class="leftbox" style="position: relative;">
<span class="chartname">
<img src="../../../assets/images/flower.png" alt="">
证照预警统计
</span>
<div class="centerContent">
<div class="num">{{num}}</div>
<div class="numname">总数</div>
</div>
<span *ngIf="isgoback" class="goback" (click)="goback()">返回</span>
<div class="piechart" id="piechart">
</div>
<nz-spin *ngIf="chartsSpin" nzSimple class="nzspin"></nz-spin>
</div>
<div class="rightbox" style="position: relative;">
<span class="chartname">
<img src="../../../assets/images/flower.png" alt="">
近30天证照预警走势
</span>
<div class="barchart" id="barchart">
</div>
<nz-spin *ngIf="chartsSpin" nzSimple class="nzspin"></nz-spin>
</div>
</div>
</div>
<div class="title">
<app-title [name]="'证照预警列表'"></app-title>
</div>
<div class="search" [hidden]="!isEcharts">
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<!-- <nz-form-item class="searchParams">
<nz-form-control>
<nz-select nzAllowClear formControlName="state" nzPlaceHolder="请选择状态">
<nz-option nzValue="0" nzLabel="预警"></nz-option>
<nz-option nzValue="1" nzLabel="合规"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item> -->
<nz-form-item class="searchParams searchParamsLong" *ngIf="isOrShow">
<nz-form-control>
<nz-tree-select [nzAllowClear]="false" [nzDropdownClassName]="'maxHeightTreeSelect'"
nzShowSearch [(ngModel)]="defaultOrId" formControlName="organization" [nzNodes]="nodes"
nzPlaceHolder="请选择所属机构" [nzExpandedIcon]="multiExpandedIconTpl">
</nz-tree-select>
<ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate">
</ng-container>
<ng-template #elseTemplate>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'"
class="ant-tree-switcher-line-icon"></i>
</ng-template>
</ng-template>
</nz-form-control>
</nz-form-item>
<nz-form-item class="searchParams searchParams2">
<nz-form-control>
<nz-range-picker [nzAllowClear]="false" formControlName="datePicker"></nz-range-picker>
<br />
</nz-form-control>
</nz-form-item>
<nz-form-item class="btn">
<nz-form-control>
<button nz-button type="submit" class="submit"><i nz-icon [nzType]="'search'"></i>查询</button>
</nz-form-control>
</nz-form-item>
<nz-form-item class="btn">
<nz-form-control>
<button nz-button type="button" class="reset" (click)="resetForm($event)"><i nz-icon
[nzType]="'sync'"></i>重置</button>
</nz-form-control>
</nz-form-item>
</form>
</div>
<div class="tablebox">
<div class="table">
<div nz-row class="th">
<!-- <div nz-col nzSpan="1">
</div> -->
<div nz-col nzSpan="3">
<span style="margin-left: 26px;">油站名称</span>
</div>
<div nz-col nzSpan="2">
公司名称
</div>
<div nz-col nzSpan="2">
区域
</div>
<div nz-col nzSpan="3">
卸油开始时间
</div>
<div nz-col nzSpan="3">
卸油结束时间
</div>
<div nz-col nzSpan="3">
操作前准备预警节点数量
</div>
<div nz-col nzSpan="3">
操作中准备预警节点数量
</div>
<div nz-col nzSpan="3">
全流程准备预警节点数量
</div>
<div nz-col nzSpan="1">
状态
</div>
<div nz-col nzSpan="1">
操作
</div>
</div>
<div class="tbody" id="tbody">
<div nz-row class="tr" *ngFor="let item of list">
<!-- <div nz-col nzSpan="1">
</div> -->
<div nz-col nzSpan="3" [title]="item.gasStation.stationName">
<span style="margin-left: 26px;">{{item.gasStation.stationName}}</span>
</div>
<div nz-col nzSpan="2" [title]="item.gasStation.companyName">
{{item.gasStation.companyName}}
</div>
<div nz-col nzSpan="2">
{{item.gasStation.locationName}}
</div>
<div nz-col nzSpan="3">
{{item.startTime ? (item.startTime | date:"yyyy-MM-dd HH:mm:ss") : '/'}}
</div>
<div nz-col nzSpan="3">
{{item.endTime ? (item.endTime | date:"yyyy-MM-dd HH:mm:ss") : '/'}}
</div>
<div nz-col nzSpan="3">
{{item.proccessBeforeCount}}
</div>
<div nz-col nzSpan="3">
{{item.proccessingCount}}
</div>
<div nz-col nzSpan="3">
{{item.allProccessCount}}
</div>
<div nz-col nzSpan="1">
<ng-container
*ngIf="item.proccessBeforeCount == 0 && item.proccessingCount == 0 && item.allProccessCount == 0; else elseTemplate">
<span style="color: #4BFFD4;">合规</span>
</ng-container>
<ng-template #elseTemplate>
<span style="color: #FF4B65;">预警</span>
</ng-template>
</div>
<div nz-col nzSpan="1">
<span style="color: #36A2FF;cursor: pointer;" (click)="look(item)">查看</span>
</div>
</div>
<div nz-row class="tr" *ngIf="tableSpin">
<div nz-col nzSpan="24" style="text-align: center;">
<nz-spin nzSimple></nz-spin>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

615
src/app/pages/warning-statistics-list/warning-statistics-list.component.scss

@ -0,0 +1,615 @@
.recordsbox {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.search {
box-sizing: border-box;
padding: 0 36px;
width: 100%;
height: 32px;
margin-bottom: 16px;
form {
width: 100%;
height: 32px;
display: flex;
justify-content: flex-start;
.searchParams,
.btn {
margin: 0 3px;
}
.searchParams {
// flex: 10;
width: 150px;
}
.searchParamsLong {
width: 250px;
}
.searchParams2 {
width: 220px;
}
.btn {
// flex: 1;
}
nz-select {
color: rgba(145, 204, 255, 0.95);
}
nz-tree-select {
color: rgba(145, 204, 255, 0.95);
}
nz-range-picker {
background-color: rgba(0, 0, 0, 0);
width: 100%;
}
}
}
.content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.title {
margin: 13px 0;
width: 100%;
height: 64px;
box-sizing: border-box;
padding: 0 28px;
position: relative;
.titlebox {
width: 100%;
height: 100%;
display: flex;
align-items: center;
img {
width: 65px;
height: 65px;
}
.content {
flex: 1;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
// background-image: linear-gradient(to right, #002147, #033565, #064e8e, #064e8e, #033565, #002147);
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.32) 50%, rgba(35, 153, 255, 0) 100%);
.contentitem {
width: 100%;
height: 32px;
display: flex;
align-items: center;
// background-image: linear-gradient(to right, #002147, #0f5ca0, #1c88e6, #1c88e6, #0f5ca0, #002147);
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.8) 50%, rgba(35, 153, 255, 0) 100%);
span {
margin-left: 10px;
color: #bce0ff;
font-size: 20px;
font-family: titlefont;
cursor: pointer;
}
span:nth-child(1) {
margin-left: 12px;
}
.grey {
color: #68829F;
}
}
}
}
.packup {
position: absolute;
right: 33px;
top: 16px;
cursor: pointer;
}
}
.chartsbox {
width: 100%;
display: flex;
justify-content: center;
.chartname {
position: absolute;
left: 20px;
top: 12px;
}
.chart {
width: 97%;
height: 350px;
box-sizing: border-box;
padding: 0 10px;
display: flex;
div {
display: flex;
flex-direction: column;
span {
font-family: titlefont;
display: flex;
align-items: center;
height: 28px;
color: #bee1ff;
font-size: 16px;
}
div {
flex: 1;
}
}
.leftbox {
width: 360px;
position: relative;
border: 0px;
box-shadow: 0 0 26px 0px #1a7fd7 inset;
margin-right: 16px;
.centerContent {
position: absolute;
top: 34%;
left: 50%;
transform: translateX(-50%);
width: 170px;
div {
text-align: center;
}
.numname {
// font-family: titlefont;
color: #bee1ff;
}
.num {
color: #FFFFFF;
font-size: 38px;
text-shadow: 0px 0px 16px #3A9AFF;
font-weight: bold;
height: 46px;
line-height: 46px;
}
}
.goback {
position: absolute;
right: 20px;
top: 14px;
color: #C4E2FC;
font-family: synormal;
font-size: 14px;
z-index: 999;
cursor: pointer;
}
}
.rightbox {
flex: 1;
position: relative;
border: 0px;
box-shadow: 0 0 26px 0px #1a7fd7 inset;
.btnbox {
position: absolute;
right: 28px;
top: 12px;
display: flex;
flex-direction: row;
z-index: 999;
button {
border: 1px solid #91CCFF;
color: #91CCFF;
border-radius: 0px;
box-shadow: 0 0 5px 0 #2399FF inset;
background: none;
}
.rankingBtn {
margin-right: 16px;
}
.selectedbtn {
background: linear-gradient(180deg, #000D21 0%, #001331 27%, #2399FF 100%);
color: white;
}
}
}
}
}
.tablebox {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
overflow: hidden;
.table {
color: white;
flex: 1;
width: 96%;
display: flex;
flex-direction: column;
overflow: hidden;
.th {
height: 38px;
line-height: 38px;
background: rgba(35, 153, 255, 0.2);
border: 1px solid rgba(35, 217, 255, 0.4);
box-shadow: 0 0 3px 0 rgba(35, 217, 255, 0.4) inset;
color: #23D9FF;
}
.tbody {
flex: 1;
overflow-y: auto;
.tr {
height: 38px;
line-height: 38px;
border-bottom: 1px solid #0d3761;
div {
color: #91CCFF;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
.look {
color: #36A2FF;
cursor: pointer;
}
}
}
}
}
.pagination {
margin: 15px 0;
display: flex;
align-items: center;
justify-content: center;
}
::-webkit-scrollbar {
width: 0px;
}
}
}
// 适配125%
@media screen and (max-height: 750px) {
.search {
box-sizing: border-box;
padding: 0 30px;
height: 32px;
margin-bottom: 12px;
form {
width: 100%;
height: 32px;
}
}
.content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.title {
height: 42px;
padding: 0 20px;
margin: 8px 0;
.titlebox {
width: 100%;
height: 100%;
display: flex;
align-items: center;
img {
width: 46px;
height: 46px;
}
.content {
height: 36px;
.contentitem {
width: 100%;
height: 25px;
span {
margin-left: 6px;
font-size: 16px;
}
span:nth-child(1) {
margin-left: 8px;
}
}
}
}
.packup {
position: absolute;
right: 33px;
top: 4px;
cursor: pointer;
}
}
.chartsbox {
width: 100%;
height: 43%;
.chartname {
position: absolute;
left: 20px;
top: 12px;
}
.chart {
width: 97%;
height: 100%;
div {
span {
font-size: 14px;
}
div {
flex: 1;
}
}
.leftbox {
width: 300px;
box-shadow: 0 0 20px 0px #1a7fd7 inset;
margin-right: 12px;
.centerContent {
.num {
color: #FFFFFF;
font-size: 42px;
text-shadow: 0px 0px 16px #3A9AFF;
font-weight: bold;
height: 49px;
line-height: 50px;
}
}
}
.rightbox {
flex: 1;
position: relative;
border: 0px;
box-shadow: 0 0 26px 0px #1a7fd7 inset;
.btnbox {
position: absolute;
right: 28px;
top: 12px;
display: flex;
flex-direction: row;
z-index: 999;
.rankingBtn {
margin-right: 12px;
}
}
}
}
}
.tablebox {
.table {
.th {
height: 32px;
line-height: 32px;
font-size: 12px !important;
}
.tbody {
.tr {
height: 32px;
line-height: 32px;
div {
font-size: 12px !important;
}
img {
width: 32px;
}
}
}
}
}
}
}
// 适配150%
@media screen and (max-height: 600px) {
.search {
box-sizing: border-box;
padding: 0 22px;
height: 32px;
margin-bottom: 6px;
form {
width: 100%;
height: 32px;
}
}
.content {
.title {
height: 36px;
padding: 0 20px;
margin: 3px 0;
.titlebox {
width: 100%;
height: 100%;
display: flex;
align-items: center;
img {
width: 36px;
height: 36px;
}
.content {
height: 30px;
.contentitem {
width: 100%;
height: 22px;
span {
margin-left: 6px;
font-size: 13px;
}
span:nth-child(1) {
margin-left: 12px;
}
}
}
}
.packup {
position: absolute;
right: 33px;
top: 2px;
cursor: pointer;
}
}
.chartsbox {
width: 100%;
height: 40%;
.chartname {
position: absolute;
left: 20px;
top: 12px;
}
.chart {
width: 97%;
height: 100%;
div {
span {
font-size: 14px;
}
div {
flex: 1;
}
}
.leftbox {
width: 260px;
box-shadow: 0 0 20px 0px #1a7fd7 inset;
margin-right: 8px;
.centerContent {
.num {
color: #FFFFFF;
font-size: 32px;
text-shadow: 0px 0px 12px #3A9AFF;
font-weight: bold;
height: 42px;
line-height: 42px;
}
}
}
.rightbox {
box-shadow: 0 0 22px 0px #1a7fd7 inset;
.btnbox {
position: absolute;
right: 28px;
top: 12px;
display: flex;
flex-direction: row;
z-index: 999;
.rankingBtn {
margin-right: 8px;
}
}
}
}
}
.tablebox {
.table {
.th {
height: 28px;
line-height: 28px;
font-size: 10px !important;
}
.tbody {
.tr {
height: 28px;
line-height: 28px;
div {
font-size: 10px !important;
}
img {
width: 30px;
}
}
}
}
}
}
}

704
src/app/pages/warning-statistics-list/warning-statistics-list.component.ts

@ -0,0 +1,704 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit, ViewContainerRef, ElementRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import * as echarts from 'echarts';
import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
import * as moment from 'moment';
import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { Router } from '@angular/router';
import { OilUnloadingProcessComponent } from '../oil-unloading-process/oil-unloading-process.component';
import { TreeService } from 'src/app/service/tree.service';
@Component({
selector: 'app-warning-statistics-list',
templateUrl: './warning-statistics-list.component.html',
styleUrls: ['./warning-statistics-list.component.scss']
})
export class WarningStatisticsListComponent implements OnInit {
validateForm!: FormGroup;
constructor(private toTree: TreeService, private http: HttpClient, private fb: FormBuilder, private router: Router, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private element: ElementRef) { }
myChart: any //左侧饼图
mybarChart: any //柱状图
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;
}
isEcharts: boolean = true
isEchartsShow() {
this.isEcharts = !this.isEcharts
}
startdate
enddate
isOrShow: boolean
ngOnInit(): void {
//当前日期
let myDate: any = new Date();
let nowY = myDate.getFullYear();
let nowM = myDate.getMonth() + 1;
let nowD = myDate.getDate();
this.enddate = nowY + "-" + (nowM < 10 ? "0" + nowM : nowM) + "-" + (nowD < 10 ? "0" + nowD : nowD);//当前日期
//获取三十天前日期
let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 30);//最后一个数字30可改,30天的意思
let lastY = lw.getFullYear();
let lastM = lw.getMonth() + 1;
let lastD = lw.getDate();
this.startdate = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD);//三十天之前日期
this.validateForm = this.fb.group({
// state: [null],
organization: [null],
datePicker: [[this.startdate, this.enddate]]
});
// 饼图
this.myChart = echarts.init(document.getElementById('piechart'));
//柱状折线图
this.mybarChart = echarts.init(document.getElementById('barchart'));
this.tableSpin = true
this.getAllOrganization()
this.getAggregations()
if (this.router.url.indexOf('petrolStation') != -1) {
this.isOrShow = false
} else {
this.isOrShow = true
}
}
//刷新饼图图表数据
num
echartsData: any
//一级饼图
oilchartpieOption = {
color: ['#FF4B65', '#36A2FF'],
tooltip: {
trigger: 'item'//触发类型
},
legend: {
bottom: '12%',
left: 'center',
itemGap: 40,
itemWidth: 8,
itemHeight: 8,
formatter: (name) => {
let data = this.oilchartpieOptionPieData1
let value
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
value = data[i].value;
}
}
return '{a|' + name + '}' + '{b|' + value + '}';
},
textStyle: {
color: '#fff',
rich: {
a: {
width: 80
}
}
}
},
series: [
{
type: 'pie',
radius: ['50%', '60%'],
bottom: '10%',
avoidLabelOverlap: false,//防止标签重叠策略
label: {//每一个标签外网延伸的引导说明
show: false,
position: 'outside'
},
data: [],
tooltip: {//鼠标移入提示
position: 'right',
padding: [14, 19],
backgroundColor: 'rgba(28, 129, 218, 0.4)',
textStyle: {
color: '#fff',
fontSize: 12
}
}
}
]
};
oilchartpieOptionPieData1: any
//一级柱状图
oilchartbarOption = {
xAxis: {
type: 'category',
data: [],
axisLine: {
show: false,
lineStyle: {
color: '#91CCFF'
}
},
axisTick: {//刻度线
show: false
},
inverse: true
},
yAxis: {
type: 'value',
nameTextStyle: {
color: '#C4E2FC'
},
splitLine: {//分割线
lineStyle: {
color: ['#0f4374'],
width: 2
}
},
axisTick: {//刻度线
show: false
},
axisLine: {//轴线
show: false,
lineStyle: {
color: '#C4E2FC'
}
}
},
tooltip: {
// trigger: 'axis'
},
series: [
{
name: '证照预警事件',
data: [],
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%'
},
{
name: '证照预警事件',
data: [],
type: 'line',
symbol: 'circle',
symbolSize: 8,
label: {
show: true
},
itemStyle: {
color: '#fff',
shadowColor: '#fff',
shadowBlur: 10
},
lineStyle: {
color: '#FFCC8A',
width: 1
}
}
],
legend: {
data: ['证照预警事件'],
textStyle: {
color: '#fff'
},
right: 28,
top: 18,
itemWidth: 8,
itemHeight: 8,
},
grid: {
left: '42px',
right: '30px',
bottom: '38px',
top: '80px'
}
};
//二级饼图
oilchartpieOption2 = {
color: ['#36A2FF', '#FFBD4B', '#46DFFF'],
tooltip: {
trigger: 'item'//触发类型
},
legend: {
bottom: '8%',
left: 'center',
itemGap: 10,
itemWidth: 8,
itemHeight: 8,
formatter: (name) => {
let data = this.oilchartpieOptionPieData2
let value
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
value = data[i].value;
}
}
return '{a|' + name + '}' + '{b|' + value + '}';
},
textStyle: {
color: '#fff',
rich: {
a: {
width: 60
}
}
}
},
series: [
{
type: 'pie',
radius: ['50%', '60%'],
bottom: '10%',
avoidLabelOverlap: false,//防止标签重叠策略
label: {//每二个标签外网延伸的引导说明
show: false,
position: 'outside'
},
data: [],
tooltip: {//鼠标移入提示
position: 'right',
padding: [14, 19],
backgroundColor: 'rgba(28, 129, 218, 0.4)',
textStyle: {
color: '#fff',
fontSize: 12
}
}
}
]
};
oilchartpieOptionPieData2: any
//二级柱状图
oilchartbarOption2 = {
tooltip: {
// trigger: 'axis'
},
xAxis: {
type: 'category',
data: [],
axisLine: {
show: false,
lineStyle: {
color: '#91CCFF'
}
},
axisTick: {//刻度线
show: false
},
inverse: true
},
yAxis: {
type: 'value',
nameTextStyle: {
color: '#C4E2FC'
},
splitLine: {//分割线
lineStyle: {
color: ['#0f4374'],
width: 2
}
},
axisTick: {//刻度线
show: false
},
axisLine: {//轴线
show: false,
lineStyle: {
color: '#C4E2FC'
}
}
},
legend: {
data: ['事前准备', '事中操作', '全程监测'],
textStyle: {
color: '#fff'
},
right: 18,
top: 18,
itemWidth: 8,
itemHeight: 8,
},
series: [
{
name: '',
data: [],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(54, 162, 255, 1)' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(54, 162, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '25%'
},
{
name: '',
data: [],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(255, 189, 75, 1)' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(255, 189, 75, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '25%'
},
{
name: '',
data: [],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(70, 223, 255, 1)' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(70, 223, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '25%'
}
],
grid: {
left: '42px',
right: '30px',
bottom: '38px',
top: '80px'
}
};
isgoback: boolean = false
refreshEchartsData1(data) {
this.num = data.totalCount
//饼图
this.oilchartpieOptionPieData1 = [
{ name: '消防器材预警', value: data.notCorrectCount },
{ name: '证照预警', value: data.correctCount },
]
this.oilchartpieOption.series[0].data = this.oilchartpieOptionPieData1
this.myChart.setOption(this.oilchartpieOption);
this.myChart.off('legendselectchanged')
this.myChart.off('click')
this.myChart.on('legendselectchanged', (params) => {
this.myChart.setOption({
legend: { selected: { [params.name]: true } }
})
if (params.name == '预警事件') {
this.isgoback = true
this.refreshEchartsData2(this.echartsData)
this.validateForm.patchValue({
state: '0'
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
});
this.myChart.on('click', (params) => {
if (params.name == '预警事件') {
this.isgoback = true
this.refreshEchartsData2(this.echartsData)
this.validateForm.patchValue({
state: '0'
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
});
//柱状图
let monthArr = []
let valuedata = []
data.list.forEach(element => {
monthArr.push(moment(element.key).format('MM.DD'))
valuedata.push(element.totalCount)
});
this.oilchartbarOption.xAxis.data = monthArr
this.oilchartbarOption.series[0].data = valuedata
this.oilchartbarOption.series[1].data = valuedata
this.mybarChart.setOption(this.oilchartbarOption);
}
refreshEchartsData2(data) {
this.num = Number(data.proccessBeforeCount + data.proccessingCount + data.allProccessCount)
//饼图
this.oilchartpieOptionPieData2 = [
{ name: '事前准备', value: data.proccessBeforeCount },
{ name: '事中操作', value: data.proccessingCount },
{ name: '全程检测', value: data.allProccessCount }
]
this.oilchartpieOption2.series[0].data = this.oilchartpieOptionPieData2
this.myChart.setOption(this.oilchartpieOption2);
//柱状图
let monthArr = []
let valuedataBefore = []
let valuedataIng = []
let valuedataAll = []
data.list.forEach(element => {
monthArr.push(moment(element.key).format('MM.DD'))
valuedataBefore.push(element.proccessBeforeCount)
valuedataIng.push(element.proccessingCount)
valuedataAll.push(element.allProccessCount)
});
this.oilchartbarOption2.xAxis.data = monthArr
this.oilchartbarOption2.series[0].name = '事前准备'
this.oilchartbarOption2.series[0].data = valuedataBefore
this.oilchartbarOption2.series[1].name = '事中操作'
this.oilchartbarOption2.series[1].data = valuedataIng
this.oilchartbarOption2.series[2].name = '全程监测'
this.oilchartbarOption2.series[2].data = valuedataAll
this.mybarChart.setOption(this.oilchartbarOption2);
}
goback() {
this.isgoback = false
this.myChart.clear();
this.mybarChart.clear();
this.refreshEchartsData1(this.echartsData)
this.validateForm.patchValue({
state: null
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
defaultOrId: string
//获取所有组织机构
nodes: any = []
getAllOrganization() {
let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true"
}
this.http.get('/api/services/app/Organization/GetAll', {
params: params
}).subscribe((data: any) => {
data.result.items.forEach(element => {
if (element.id == OrganizationUnitId) {
element.parentId = null
}
element.key = element.id
element.title = element.displayName
});
this.nodes = [...this.toTree.toTree(data.result.items)]
this.defaultOrId = JSON.parse(sessionStorage.getItem('userdata')).organization.id
this.validateForm.value.organization = JSON.parse(sessionStorage.getItem('userdata')).organization.id
this.validateForm.patchValue({
datePicker: [this.startdate, this.enddate]
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
})
}
//获取统计信息
chartsSpin: boolean = false
getAggregations() {
this.chartsSpin = true
let organizationUnitId
if (this.router.url.indexOf('petrolStation') != -1) {
organizationUnitId = JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id
} else {
organizationUnitId = JSON.parse(sessionStorage.getItem('userdata')).organization.id
}
let params: any = {
OrganizationUnitId: organizationUnitId,
IsContainsChildren: 'true'
}
this.http.get('/api/services/app/OilUnloadingProcess/GetAllCountByDays', { params: params }).subscribe((data: any) => {
console.log('统计信息', data)
this.chartsSpin = false
this.echartsData = data.result
this.refreshEchartsData1(this.echartsData)
// this.refreshBarLineData(this.echartsData)
})
}
//获得卸油记录列表
SkipCount: string = '0'
MaxResultCount: string = '50'
list: any = []
totalCount: string
tableSpin: boolean = false
getViolateRecordList() {
this.tableSpin = true
let organizationUnitId
if (this.router.url.indexOf('petrolStation') != -1) {
organizationUnitId = JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id
} else {
organizationUnitId = this.validateForm.value.organization
}
let IsCorrect = null
if (this.validateForm.value.state) {
this.validateForm.value.state == '0' ? IsCorrect = 'false' : IsCorrect = 'true'
}
let params = {
IsCorrect: IsCorrect,
StartTime: moment(this.validateForm.value.datePicker[0]).format('yyyy-MM-DD'),
EndTime: moment(this.validateForm.value.datePicker[1]).format('yyyy-MM-DD'),
IsContainsChildren: 'true',
OrganizationUnitId: organizationUnitId,
SkipCount: this.SkipCount,
MaxResultCount: this.MaxResultCount
}
this.http.get('/api/services/app/OilUnloadingProcess/GetAll', {
params: params
}).subscribe((data: any) => {
this.tableSpin = false
this.list = this.list.concat(data.result.items);
this.list = [...this.list]
this.totalCount = data.result.totalCount
console.log('获取卸油流程列表', data.result.items)
})
}
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
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();
}
console.log(JSON.parse(sessionStorage.getItem('userdata')).organization.id)
// this.validateForm.value.organization = JSON.parse(sessionStorage.getItem('userdata')).organization.id
this.validateForm.patchValue({
organization: JSON.parse(sessionStorage.getItem('userdata')).organization.id,
datePicker: [this.startdate, this.enddate]
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
ngAfterViewInit(): void {
fromEvent(this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe((event: any) => { //监听 DOM 滚动事件
if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) {
if (this.totalCount > this.list.length) {
console.log('需要加载数据了', event)
this.SkipCount = String(Number(this.SkipCount) + 50)
this.getViolateRecordList()
}
}
});
}
look(item) {
const modal = this.modal.create({
nzContent: OilUnloadingProcessComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1000,
nzBodyStyle: {
'border': '1px solid #6d9cc7',
'border-radius': '0px',
'padding': '0px',
'box-shadow': '0 0 8px 0 #fff',
'background': '#000D21',
},
nzComponentParams: {
data: item
},
nzFooter: null,
nzOnOk: async () => {
}
});
const instance = modal.getContentComponent();
}
goOilList() {
if (this.router.url.indexOf('petrolStation') != -1) {
this.router.navigate(['/records/petrolStation/oliunloadinglist'])
} else {
this.router.navigate(['/records/oliunloadinglist'])
}
}
gorecordList() {
if (this.router.url.indexOf('petrolStation') != -1) {
this.router.navigate(['/records/petrolStation'])
} else {
this.router.navigate(['/records'])
}
}
}

22
src/app/service/listRefresh.service.ts

@ -0,0 +1,22 @@
import { Injectable } from '@angular/core';
import { Observable, ReplaySubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class listRefreshService {
constructor() { }
private _sendMessage: ReplaySubject<any> = new ReplaySubject<any>(1);
/** * **
* @param message *
* @returns {Observavle<any>} */
public sendMessage(message: any) {
this._sendMessage.next(message);
}
public getMessage(): Observable<any> {
return this._sendMessage.asObservable();
}
}

BIN
src/assets/images/cameraNum.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/images/fireNum.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/images/licenseNum.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/images/modelNum.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/assets/images/stationNum.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Loading…
Cancel
Save