Browse Source

Merge branch 'master' of http://39.106.78.171:3000/shaojiahao/Sinopec-Anxin

# Conflicts:
#	tsconfig.json
dev
刘向辉 3 years ago
parent
commit
765d239ce9
  1. 24
      package-lock.json
  2. 15
      src/app/pages/criminal-records-admin/criminal-records-admin.component.html
  3. 5
      src/app/pages/criminal-records-admin/criminal-records-admin.component.ts
  4. 15
      src/app/pages/criminal-records/criminal-records.component.html
  5. 2
      src/app/pages/criminal-records/criminal-records.component.ts
  6. 21
      src/app/pages/disposition/disposition.component.html
  7. 85
      src/app/pages/disposition/disposition.component.scss
  8. 33
      src/app/pages/disposition/disposition.component.ts
  9. 22
      src/app/pages/home/home.component.html
  10. 80
      src/app/pages/home/home.component.ts
  11. 25
      src/app/pages/left-domain/left-domain.component.ts
  12. 15
      src/app/pages/login/login.component.html
  13. 7
      src/app/pages/login/login.component.ts
  14. 182
      src/app/pages/oil-unloading-process/oil-unloading-process.component.html
  15. 344
      src/app/pages/oil-unloading-process/oil-unloading-process.component.scss
  16. 32
      src/app/pages/oil-unloading-process/oil-unloading-process.component.ts
  17. 6
      src/app/pages/pages.module.ts
  18. 20
      src/app/pages/plan-admin/plan-admin.component.html
  19. 1
      src/app/pages/plan-admin/plan-admin.component.ts
  20. 16
      src/app/pages/plan/plan.component.html
  21. 6
      src/app/pages/plan/plan.component.scss
  22. 74
      src/app/pages/plan/plan.component.ts
  23. 10
      src/app/pages/plan/publicPop.scss
  24. 5
      src/app/pages/today-warning-admin/today-warning-admin.component.html
  25. 2
      src/app/pages/today-warning-admin/today-warning-admin.component.scss
  26. 59
      src/app/pages/today-warning-admin/today-warning-admin.component.ts
  27. 175
      src/app/pages/today-warning/get-out-of-line-details/get-out-of-line-details.component.html
  28. 20
      src/app/pages/today-warning/get-out-of-line-details/get-out-of-line-details.component.ts
  29. 8
      src/app/pages/today-warning/today-warning.component.html
  30. 2
      src/app/pages/today-warning/today-warning.component.scss
  31. 62
      src/app/pages/today-warning/today-warning.component.ts
  32. BIN
      src/assets/images/3d.png
  33. BIN
      src/assets/images/left3.png
  34. BIN
      src/assets/images/warning.png
  35. 5
      src/assets/js/abp.signalr-client.js
  36. 4
      src/shared/helpers/SignalRAspNetCoreHelper.ts
  37. 61
      src/theme.less

24
package-lock.json generated

@ -4874,7 +4874,7 @@
}, },
"ascli": { "ascli": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.nlark.com/ascli/download/ascli-1.0.1.tgz", "resolved": "https://registry.npm.taobao.org/ascli/download/ascli-1.0.1.tgz",
"integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
"requires": { "requires": {
"colour": "~0.7.1", "colour": "~0.7.1",
@ -5516,7 +5516,7 @@
"dependencies": { "dependencies": {
"long": { "long": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmmirror.com/long/download/long-3.2.0.tgz?cache=0&sync_timestamp=1635674102680&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flong%2Fdownload%2Flong-3.2.0.tgz", "resolved": "https://registry.npm.taobao.org/long/download/long-3.2.0.tgz",
"integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
} }
} }
@ -5936,7 +5936,7 @@
}, },
"colour": { "colour": {
"version": "0.7.1", "version": "0.7.1",
"resolved": "https://registry.nlark.com/colour/download/colour-0.7.1.tgz", "resolved": "https://registry.npm.taobao.org/colour/download/colour-0.7.1.tgz",
"integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
}, },
"combined-stream": { "combined-stream": {
@ -8226,7 +8226,7 @@
}, },
"grpc": { "grpc": {
"version": "1.24.2", "version": "1.24.2",
"resolved": "https://registry.npmmirror.com/grpc/download/grpc-1.24.2.tgz", "resolved": "https://registry.npm.taobao.org/grpc/download/grpc-1.24.2.tgz",
"integrity": "sha1-dtBHv6ewW2B8u+OruZBl3O/gwJk=", "integrity": "sha1-dtBHv6ewW2B8u+OruZBl3O/gwJk=",
"requires": { "requires": {
"@types/bytebuffer": "^5.0.40", "@types/bytebuffer": "^5.0.40",
@ -8271,7 +8271,7 @@
}, },
"camelcase": { "camelcase": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-2.1.1.tgz?cache=0&sync_timestamp=1636945122112&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-2.1.1.tgz", "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz",
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
}, },
"chownr": { "chownr": {
@ -8280,7 +8280,7 @@
}, },
"cliui": { "cliui": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.nlark.com/cliui/download/cliui-3.2.0.tgz", "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1573943458671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"requires": { "requires": {
"string-width": "^1.0.1", "string-width": "^1.0.1",
@ -8396,7 +8396,7 @@
}, },
"invert-kv": { "invert-kv": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.nlark.com/invert-kv/download/invert-kv-1.0.0.tgz?cache=0&sync_timestamp=1630996775723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finvert-kv%2Fdownload%2Finvert-kv-1.0.0.tgz", "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz",
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
@ -8537,7 +8537,7 @@
}, },
"os-locale": { "os-locale": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmmirror.com/os-locale/download/os-locale-1.4.0.tgz?cache=0&sync_timestamp=1633618260196&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fos-locale%2Fdownload%2Fos-locale-1.4.0.tgz", "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"requires": { "requires": {
"lcid": "^1.0.0" "lcid": "^1.0.0"
@ -8565,7 +8565,7 @@
}, },
"protobufjs": { "protobufjs": {
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.nlark.com/protobufjs/download/protobufjs-5.0.3.tgz", "resolved": "https://registry.npm.taobao.org/protobufjs/download/protobufjs-5.0.3.tgz",
"integrity": "sha1-5N/p+2fJCyYw0VhoJJvMSWFGehc=", "integrity": "sha1-5N/p+2fJCyYw0VhoJJvMSWFGehc=",
"requires": { "requires": {
"ascli": "~1", "ascli": "~1",
@ -8694,7 +8694,7 @@
}, },
"yargs": { "yargs": {
"version": "3.32.0", "version": "3.32.0",
"resolved": "https://registry.npmmirror.com/yargs/download/yargs-3.32.0.tgz", "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.32.0.tgz?cache=0&sync_timestamp=1577940861093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.32.0.tgz",
"integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
"requires": { "requires": {
"camelcase": "^2.0.1", "camelcase": "^2.0.1",
@ -10875,7 +10875,7 @@
}, },
"lodash.clone": { "lodash.clone": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.nlark.com/lodash.clone/download/lodash.clone-4.5.0.tgz", "resolved": "https://registry.npm.taobao.org/lodash.clone/download/lodash.clone-4.5.0.tgz",
"integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
}, },
"lodash.clonedeep": { "lodash.clonedeep": {
@ -12053,7 +12053,7 @@
}, },
"optjs": { "optjs": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.nlark.com/optjs/download/optjs-3.2.2.tgz", "resolved": "https://registry.npm.taobao.org/optjs/download/optjs-3.2.2.tgz",
"integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
}, },
"ora": { "ora": {

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

@ -110,7 +110,7 @@
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
预警类型 预警类型
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="3">
所属公司 所属公司
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
@ -119,7 +119,7 @@
<div nz-col nzSpan="1"> <div nz-col nzSpan="1">
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="3">
加油站 加油站
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
@ -128,6 +128,9 @@
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
预警时间 预警时间
</div> </div>
<div nz-col nzSpan="2">
状态
</div>
<div nz-col nzSpan="1"> <div nz-col nzSpan="1">
操作 操作
</div> </div>
@ -153,7 +156,7 @@
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
{{item.violation.violationType}} {{item.violation.violationType}}
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="3">
{{item.gasStation.companyName}} {{item.gasStation.companyName}}
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
@ -162,7 +165,7 @@
<div nz-col nzSpan="1" style="text-align: right;box-sizing: border-box;padding-right: 8px;"> <div nz-col nzSpan="1" style="text-align: right;box-sizing: border-box;padding-right: 8px;">
<!-- <span class="ziying">自营</span> --> <!-- <span class="ziying">自营</span> -->
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="3">
{{item.gasStation.stationName}} {{item.gasStation.stationName}}
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
@ -171,6 +174,10 @@
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}} {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="2">
<span *ngIf="item.handleTime">已处置</span>
<span *ngIf="!item.handleTime" style="color: #FF4B65;">未处置</span>
</div>
<div nz-col nzSpan="1"> <div nz-col nzSpan="1">
<span class="look" (click)="look(item)">查看</span> <span class="look" (click)="look(item)">查看</span>
</div> </div>

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

@ -10,6 +10,7 @@ import { debounceTime } from 'rxjs/operators';
import * as moment from 'moment'; import * as moment from 'moment';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component'; import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
import { OilUnloadingProcessComponent } from '../oil-unloading-process/oil-unloading-process.component';
@Component({ @Component({
selector: 'app-criminal-records-admin', selector: 'app-criminal-records-admin',
templateUrl: './criminal-records-admin.component.html', templateUrl: './criminal-records-admin.component.html',
@ -146,7 +147,7 @@ export class CriminalRecordsAdminComponent implements OnInit {
left: '42px', left: '42px',
right: '30px', right: '30px',
bottom: '38px', bottom: '38px',
top: '60px' top: '80px'
} }
}; };
baroption2 = { baroption2 = {
@ -515,6 +516,8 @@ export class CriminalRecordsAdminComponent implements OnInit {
look(item) { look(item) {
// GetOutOfLineDetailsComponent
// OilUnloadingProcessComponent
const modal = this.modal.create({ const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent, nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef, nzViewContainerRef: this.viewContainerRef,

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

@ -106,10 +106,10 @@
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
预警级别 预警级别
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="4">
预警类型 预警类型
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="4">
预警信息 预警信息
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
@ -118,6 +118,9 @@
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
预警时间 预警时间
</div> </div>
<div nz-col nzSpan="2">
状态
</div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
操作 操作
</div> </div>
@ -140,10 +143,10 @@
<span *ngIf="item.violation.level == 3">Ⅲ级</span> <span *ngIf="item.violation.level == 3">Ⅲ级</span>
<span *ngIf="item.violation.level == 4">Ⅳ级</span> <span *ngIf="item.violation.level == 4">Ⅳ级</span>
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="4">
{{item.violation.violationType}} {{item.violation.violationType}}
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="4">
{{item.violation.violationName}} {{item.violation.violationName}}
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
@ -152,6 +155,10 @@
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}} {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="2">
<span *ngIf="item.handleTime">已处置</span>
<span *ngIf="!item.handleTime" style="color: #FF4B65;">未处置</span>
</div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
<span class="look" (click)="look(item)">查看</span> <span class="look" (click)="look(item)">查看</span>
</div> </div>

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

@ -143,7 +143,7 @@ export class CriminalRecordsComponent implements OnInit {
left: '42px', left: '42px',
right: '30px', right: '30px',
bottom: '38px', bottom: '38px',
top: '60px' top: '80px'
} }
}; };
baroption2 = { baroption2 = {

21
src/app/pages/disposition/disposition.component.html

@ -0,0 +1,21 @@
<div class="box" id="addequipment">
<div class="title">
<div class="titlecontent">
处置
</div>
<i nz-icon nzType="close" nzTheme="outline" (click)="destroyModal()"></i>
</div>
<form nz-form [formGroup]="validateForm" class="form">
<p>处置内容</p>
<nz-form-item>
<nz-form-control>
<textarea formControlName="content"></textarea>
</nz-form-control>
</nz-form-item>
<p>处置人: <span>{{peopleName}}</span> </p>
<div class="btnbox">
<button nz-button type="submit" class="ok" (click)="ok()">确定</button>
<button nz-button type="button" class="cancel" (click)="destroyModal()">取消</button>
</div>
</form>
</div>

85
src/app/pages/disposition/disposition.component.scss

@ -0,0 +1,85 @@
.box {
.title {
font-family: sybold;
width: 100%;
height: 48px;
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.57) 50%, rgba(35, 153, 255, 0) 100%);
display: flex;
align-items: center;
position: relative;
.titlecontent {
width: 100%;
height: 32px;
line-height: 32px;
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.57) 50%, rgba(35, 153, 255, 0) 100%);
text-align: center;
color: #91CCFF;
font-size: 16px;
}
i {
position: absolute;
right: 12px;
color: #fff;
font-size: 18px;
cursor: pointer;
}
}
.form {
box-sizing: border-box;
padding: 0 17px;
p {
margin-bottom: 0;
color: #C4E2FC;
margin: 16px 0;
}
nz-form-item {
margin-bottom: 0;
textarea {
color: rgba(145, 204, 255, 0.95) !important;
width: 100%;
height: 300px;
background: #173d60;
}
}
nz-date-picker {
background-color: #143c61;
width: 100%;
}
.btnbox {
width: 100%;
margin-top: 24px;
margin-bottom: 17px;
display: flex;
justify-content: flex-end;
button {
border-radius: 0px;
color: #91CCFF;
}
button:nth-child(2) {
margin-left: 16px;
}
.ok {
background: rgba(0, 129, 255, 0.4);
}
.cancel {
border: 1px solid #C4E2FC;
background: #0c1e38;
color: rgba(99, 102, 105, 0.6);
box-shadow: 0 0 3px 0 #fff inset;
}
}
}
}

33
src/app/pages/disposition/disposition.component.ts

@ -0,0 +1,33 @@
import { Component, OnInit } from '@angular/core';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-disposition',
templateUrl: './disposition.component.html',
styleUrls: ['./disposition.component.scss']
})
export class DispositionComponent implements OnInit {
validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder) { }
peopleName:string
ngOnInit(): void {
if(sessionStorage.getItem('isGasStation') == 'true'){
this.peopleName = JSON.parse(sessionStorage.getItem('userdataOfgasstation')).name
}else{
this.peopleName = JSON.parse(sessionStorage.getItem('userdata')).name
}
this.validateForm = this.fb.group({
content: [null, [Validators.required]]
});
}
destroyModal(){
this.modal.destroy();
}
ok(){
this.modal.triggerOk()
}
}

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

@ -59,4 +59,24 @@
<div class="content"> <div class="content">
<router-outlet></router-outlet> <router-outlet></router-outlet>
</div> </div>
</div> </div>
<ng-template #warning let-item="data">
<div class="topbox">
<div>
<img src="../assets/images/warning.png" alt="">
</div>
<div class="text">
<span class="name">您有一条新的预警提醒!</span>
<span class="details">{{item.notification.data.properties.ViolationName}}</span>
</div>
</div>
<div class="btnbox">
<div class="look" (click)="look(item)">
查看
</div>
<div class="lose" (click)="close(item)">
忽略
</div>
</div>
</ng-template>

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

@ -1,14 +1,17 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, ViewChild, TemplateRef, ViewContainerRef } from '@angular/core';
import { Router, NavigationEnd, ActivatedRoute } from '@angular/router'; import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';
import { Title } from '@angular/platform-browser' import { Title } from '@angular/platform-browser'
import { filter } from 'rxjs/operators'; import { filter } from 'rxjs/operators';
import { NavChangeService } from 'src/app/service/navChange.service'; import { NavChangeService } from '../../service/navChange.service';
import { CacheTokenService } from '../../service/cache-token.service' //引入服务 import { CacheTokenService } from '../../service/cache-token.service' //引入服务
import { CookieService } from 'ngx-cookie-service'; import { CookieService } from 'ngx-cookie-service';
import { NzMessageService } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message';
import { SignalRAspNetCoreHelper } from '../../../shared/helpers/SignalRAspNetCoreHelper'; import { SignalRAspNetCoreHelper } from '../../../shared/helpers/SignalRAspNetCoreHelper';
import { NzNotificationService } from 'ng-zorro-antd/notification';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
import { NzModalService } from 'ng-zorro-antd/modal';
import { HttpClient } from '@angular/common/http';
declare var abp: any
@Component({ @Component({
selector: 'app-home', selector: 'app-home',
@ -16,9 +19,10 @@ import { SignalRAspNetCoreHelper } from '../../../shared/helpers/SignalRAspNetCo
styleUrls: ['./home.component.scss'] styleUrls: ['./home.component.scss']
}) })
export class HomeComponent implements OnInit { export class HomeComponent implements OnInit {
@ViewChild('warning', { static: false }) template?: TemplateRef<{}>;
constructor(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) { }
constructor(private router: Router, private navChangeService: NavChangeService, public token: CacheTokenService,
private cookieService: CookieService, private message: NzMessageService) { }
isGasStationNav: boolean isGasStationNav: boolean
isGasStation: boolean isGasStation: boolean
isGasStationBack: boolean isGasStationBack: boolean
@ -78,13 +82,73 @@ export class HomeComponent implements OnInit {
this.userName = JSON.parse(sessionStorage.getItem('userdata')).userName this.userName = JSON.parse(sessionStorage.getItem('userdata')).userName
} }
}
ngAfterViewInit() {
SignalRAspNetCoreHelper.initSignalR(); SignalRAspNetCoreHelper.initSignalR();
abp.event.on('abp.notifications.received', function (userNotification) { abp.event.on('abp.notifications.received', (userNotification) => {
console.log('abp.notifications.received成功收到了哈哈哈', userNotification); console.log('abp.notifications.received收到通知', userNotification);
this.receiptOfNotification(userNotification)
}); });
}
messageId = []
receiptOfNotification(userNotification) {
let obj = {
id: userNotification.notification.entityId,
messageId: this.notificationService.template(this.template!, { nzPlacement: 'bottomRight', nzClass: 'receiptOfNotification', nzDuration: 0, nzData: userNotification }).messageId
}
this.messageId.push(obj)
}
look(item) {
let params = {
id: item.notification.entityId
}
this.http.get('/api/services/app/ViolateRecord/Get', {
params: params
}).subscribe((data: any) => {
const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1200,
nzBodyStyle: {
'border': '1px solid #6d9cc7',
'border-radius': '0px',
'padding': '0px',
'box-shadow': '0 0 8px 0 #fff',
'background': '#000D21',
},
nzComponentParams: {
data: data.result
},
nzFooter: null,
nzOnOk: async () => {
}
});
const instance = modal.getContentComponent();
this.messageId.forEach((element) => {
if (element.id == item.notification.entityId) {
this.notificationService.remove(element.messageId)
}
})
})
} }
close(item) {
// console.log(item)
this.messageId.forEach((element) => {
if (element.id == item.notification.entityId) {
this.notificationService.remove(element.messageId)
}
})
}
ngOnDestroy() {
abp.signalr.disconnect()
}
//获得时间 //获得时间
time: string time: string

25
src/app/pages/left-domain/left-domain.component.ts

@ -38,6 +38,8 @@ export class LeftDomainComponent implements OnInit {
//初始化组件 //初始化组件
initComponent(type?: number) { initComponent(type?: number) {
this.selectPlanId = null
this.selectNodeId = null
if (type != undefined && type != null) { if (type != undefined && type != null) {
this.beforeFence = type this.beforeFence = type
this.handleFacility() this.handleFacility()
@ -50,12 +52,9 @@ export class LeftDomainComponent implements OnInit {
//处理 设备data //处理 设备data
handleFacility() { handleFacility() {
if (this.beforeFence === 7) { //应急预案 if (this.beforeFence === 7) { //应急预案
MarkWindow.instance ? this.allMarkPlanData = MarkWindow.instance.allMarkPlanData : null if (MarkWindow.instance) {
EventManager.addListener(Event_GetAllMarkPlanData, (data: Event_GetAllMarkPlanData) => { this.allMarkPlanData = MarkWindow.instance.allMarkPlanData
this.allMarkPlanData = data.data }
PlanComponent.instance.allMarkPlanData = this.allMarkPlanData
})
PlanComponent.instance.allMarkPlanData = this.allMarkPlanData
return return
} }
let list: FacilityInfoUIItem[] = [] let list: FacilityInfoUIItem[] = []
@ -210,31 +209,33 @@ export class LeftDomainComponent implements OnInit {
//选中 数据节点 //选中 数据节点
selectNode(item: MarkPlanData, e: MarkNodeData, index: number) { selectNode(item: MarkPlanData, e: MarkNodeData, index: number) {
if (this.selectPlanId != item.id || this.selectNodeId != e.id) { //选中 if (this.selectPlanId != item.id || this.selectNodeId != e.id) { //选中
this.selectPlanId = item.id
this.selectNodeId = e.id
PlanComponent.instance.beforeEmergencyPlan = item
PlanComponent.instance.beforePlanNode = e
if (PlanComponent.instance.progressList.length != item.nodes.length) { if (PlanComponent.instance.progressList.length != item.nodes.length) {
PlanComponent.instance.updateProgressList() PlanComponent.instance.updateProgressList()
} }
this.updateFatherData(index) //更新/初始化父组件 数据 this.updateFatherData(index) //更新/初始化父组件 数据
this.selectPlanId = item.id PlanComponent.instance.initViewer()
this.selectNodeId = e.id
MarkWindow.instance.selectMarkNode(item.id, e.id) MarkWindow.instance.selectMarkNode(item.id, e.id)
PlanComponent.instance.beforeEmergencyPlan = item
PlanComponent.instance.beforePlanNode = MarkWindow.instance.currentMarkNodeInfo.nodeData PlanComponent.instance.beforePlanNode = MarkWindow.instance.currentMarkNodeInfo.nodeData
} else if (this.selectPlanId === item.id && this.selectNodeId === e.id) { //取消选中 } else if (this.selectPlanId === item.id && this.selectNodeId === e.id) { //取消选中
this.selectPlanId = null
this.selectNodeId = null
PlanComponent.instance.beforeEmergencyPlan = new MarkPlanData(-99, "请选择节点") PlanComponent.instance.beforeEmergencyPlan = new MarkPlanData(-99, "请选择节点")
PlanComponent.instance.beforePlanNode = new MarkNodeData(-99, "请选择节点") PlanComponent.instance.beforePlanNode = new MarkNodeData(-99, "请选择节点")
this.updateFatherData(index) //更新/初始化父组件 数据 this.updateFatherData(index) //更新/初始化父组件 数据
this.selectPlanId = null
this.selectNodeId = null
MarkWindow.instance.selectMarkNode(null, null) MarkWindow.instance.selectMarkNode(null, null)
} }
} }
//更新/初始化父组件 数据 //更新/初始化父组件 数据
updateFatherData(index) { updateFatherData(index) {
PlanComponent.instance.updateTimer? window.clearTimeout(PlanComponent.instance.updateTimer) : null //清除定时器
PlanComponent.instance.progressList.forEach((item,key)=>{ key >= index? PlanComponent.instance.progressList[key] = 0 : PlanComponent.instance.progressList[key] = 100 }) PlanComponent.instance.progressList.forEach((item,key)=>{ key >= index? PlanComponent.instance.progressList[key] = 0 : PlanComponent.instance.progressList[key] = 100 })
PlanComponent.instance.nzCurrent = index PlanComponent.instance.nzCurrent = index
PlanComponent.instance.isSuspend = true //暂停 PlanComponent.instance.isSuspend = true //暂停
PlanComponent.instance.updateTimer? window.clearTimeout(PlanComponent.instance.updateTimer) : null //清除定时器
} }
saveDisposalDialog: boolean = false; //整体保存预案 弹窗 saveDisposalDialog: boolean = false; //整体保存预案 弹窗

15
src/app/pages/login/login.component.html

@ -61,18 +61,3 @@
</div> </div>
<ng-template>
<div class="topbox">
<div>
<img src="../assets/images/AnXinQQ.jpg" alt="">
</div>
<div class="text">
<span>您有一条新的预警提醒!</span>
<span>这是详细描述这是详细描述这是详细描述...</span>
</div>
</div>
<div class="btnbox">
<button class="look" nz-button type="button">查看</button>
<button class="lose" nz-button type="button">忽略</button>
</div>
</ng-template>

7
src/app/pages/login/login.component.ts

@ -1,4 +1,4 @@
import { Component, OnInit, AfterViewInit, ViewChild, TemplateRef } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http' import { HttpClient } from '@angular/common/http'
import { Router, ActivatedRoute } from '@angular/router' import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from '../../service/cache-token.service'//引入服务 import { CacheTokenService } from '../../service/cache-token.service'//引入服务
@ -18,7 +18,6 @@ declare var abp: any
export class LoginComponent implements OnInit { export class LoginComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
@ViewChild(TemplateRef, { static: false }) template?: TemplateRef<{}>;
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, private cookieService: CookieService, private fb: FormBuilder, private message: NzMessageService, private notificationService: NzNotificationService) { } constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, private cookieService: CookieService, private fb: FormBuilder, private message: NzMessageService, private notificationService: NzNotificationService) { }
ngOnInit() { ngOnInit() {
@ -149,10 +148,6 @@ export class LoginComponent implements OnInit {
) )
} }
receiptOfNotification() {
this.notificationService.template(this.template!, { nzPlacement: 'bottomRight', nzClass: 'receiptOfNotification', nzDuration: 0 });
}
roleList = [ roleList = [
'管理员', '职工' '管理员', '职工'
] ]

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

@ -0,0 +1,182 @@
<div class="box">
<div class="titlebox">
<div class="title">
<div>
卸油全流程
<div class="border"></div>
</div>
</div>
</div>
<div class="content">
<div class="oilbox">
<div class="leftbox">
<div class="lefttop" >
<div class="title">
事前准备
</div>
<div class="content">
<div class="imglist1">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">油罐车朝向检察</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">卸油效率检查</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">设置隔离检查</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">轮胎固定检察</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">放置灭火器检察</span>
</div>
</div>
<div class="line">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="imglist2">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">静电接地检查15分钟</span>
</div>
</div>
</div>
</div>
<!-- <img style="height: 42px;" src="../../../../assets/images/down.png" alt=""> -->
<div class="leftbottom">
<div class="title">
事中操作
</div>
<div class="content">
<div class="colimglist">
<div class="colimglist1">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">卸油车取样</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">连接卸油管</span>
</div>
</div>
<div class="colline">
</div>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">1.第三方确认检查</span>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">2.拆除卸油管</span>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">3.作业现场清理</span>
</div>
<img class="goout1" style="height: 42px;" src="../../../../assets/images/right3.png" alt="">
<div class="imgbox goout2">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">车辆出场</span>
</div>
</div>
</div>
</div>
<div class="rightbox">
<div class="righttop">
<div class="imgbox">
<div class="img selectedimg">
<img [src]="'' ? '' : '../../../../assets/images/nopng.png'" alt="">
</div>
<span class="name">车辆进场</span>
</div>
</div>
<img style="height: 42px;margin: 18px 0;" src="../../../../assets/images/down.png" alt="">
<div class="rightbottom">
<div class="title" style="text-align: center;">
卸油过程全程监测
</div>
<div class="content">
<div class="imgbox">
<span class="name">卸油全程监卸</span>
<div class="img errimg">
<img src="../../../../assets/images/bgImg.png" alt="">
<img class="err" src="../../../../assets/images/err.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">卸油员及司押人员服装</span>
<div class="img">
<img (click)="lookImg()" src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">登车防护检查</span>
<div class="img">
<img (click)="lookImg()" src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">油品泄漏检查</span>
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="topline">
</div>
<img class="toplinearrows" style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="bottomline">
</div>
<img class="bottomlinearrows" style="height: 42px;" src="../../../../assets/images/left3.png" alt="">
</div>
</div>
<div id="viewerjs" style="display:none">
</div>

344
src/app/pages/oil-unloading-process/oil-unloading-process.component.scss

@ -0,0 +1,344 @@
.box {
width: 100%;
// height: 700px;
color: #fff;
display: flex;
flex-direction: column;
background-image: linear-gradient(#003B6E, #000D21);
position: relative;
::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
}
.titlebox {
width: 100%;
height: 48px;
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.57) 50%, rgba(35, 153, 255, 0) 100%);
display: flex;
align-items: center;
.title {
width: 100%;
height: 32px;
background: linear-gradient(270deg, rgba(35, 153, 255, 0) 0%, rgba(35, 153, 255, 0.57) 50%, rgba(35, 153, 255, 0) 100%);
display: flex;
justify-content: center;
div {
width: 120px;
height: 32px;
text-align: center;
line-height: 32px;
font-family: sybold;
font-size: 16px;
position: relative;
cursor: pointer;
margin: 0 18px;
.border {
position: absolute;
bottom: -7px;
left: -18px;
width: 120px;
height: 4px;
}
}
.selected {
background: linear-gradient(90deg, rgba(35, 153, 255, 0.57) 0%, #25b7d4 50%, rgba(35, 153, 255, 0.57) 100%);
.border {
background: linear-gradient(90deg, rgba(35, 217, 255, 0) 0%, #25b7d4 50%, rgba(35, 217, 255, 0) 100%);
}
}
}
}
.ant-modal-close {
color: #fff;
}
.content {
flex: 1;
box-sizing: border-box;
padding: 18px;
max-height: 700px;
overflow-y: auto;
position: relative;
.oilbox {
display: flex;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 18px 20px;
.title {
width: 100%;
height: 30px;
line-height: 30px;
background: rgba(35, 153, 255, 0.2);
text-align: left;
border-bottom: 1px solid rgba(54, 162, 255, 0.47);
box-sizing: border-box;
padding-left: 16px;
color: #36A2FF;
}
.leftbox {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
margin-right: 70px;
.lefttop,
.leftbottom {
width: 840px;
border: 1px solid rgba(54, 162, 255, 0.47);
display: flex;
.title {
height: 100%;
width: 26px;
text-align: center;
padding: 0;
}
.content {
flex: 1;
background: #001d3c;
}
}
.lefttop {
margin-bottom: 16px;
.content {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.imglist1 {
width: 100%;
display: flex;
justify-content: space-around;
}
.line {
width: 80%;
display: flex;
margin-top: 6px;
div {
flex: 1;
height: 6px;
border-right: 1px solid #91CCFF;
border-bottom: 1px solid #91CCFF;
}
div:nth-child(1) {
border-left: 1px solid #91CCFF;
}
}
.imglist2 {
margin-top: -6px;
width: 100%;
display: flex;
justify-content: center;
}
}
}
.leftbottom {
.content {
position: relative;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
.colimglist {
display: flex;
flex-direction: column;
align-items: center;
.colimglist1 {
display: flex;
align-items: center;
justify-content: center;
.img {
margin: 0 50px;
}
}
.colline {
height: 6px;
width: 200px;
border-right: 1px solid #91CCFF;
border-left: 1px solid #91CCFF;
border-bottom: 1px solid #91CCFF;
}
}
width: 100%;
.goout1 {
position: absolute;
bottom: 52px;
right: 280px;
}
.goout2 {
position: absolute;
bottom: 18px;
right: 160px;
}
}
}
}
.rightbox {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
.rightbottom {
width: 160px;
height: 538px;
display: flex;
flex-direction: column;
border: 1px solid rgba(54, 162, 255, 0.47);
.content {
padding: 6px;
flex: 1;
background: #001d3c;
display: flex;
flex-direction: column;
justify-content: space-around;
// align-items:;
.imgbox{
.name{
margin-bottom: 3px;
}
}
}
}
}
.imgbox {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.img {
width: 96px;
height: 64px;
box-shadow: 0px 0px 6px #36A2FF;
border: 1px solid #C4E2FC;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
img {
width: 100%;
height: 100%;
cursor: pointer;
}
.err {
width: 24px;
height: 24px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
.selectedimg {
box-shadow: 0px 0px 8px #FF4B65;
border: 1px solid #FF4B65;
background: #3f213b;
img {
width: 24px;
height: 24px;
}
}
.errimg {
box-shadow: 0px 0px 8px #FF4B65;
border: 1px solid #FF4B65;
}
.name {
margin-top: 3px;
color: #FFFFFF;
font-size: 14px;
}
}
}
.topline{
position: absolute;
top: 18px;
right: 136px;
width: 576px;
height:16px;
border-top: 1px solid #91CCFF;
border-right: 1px solid #91CCFF;
}
.toplinearrows{
position: absolute;
top: 5px;
right: 690px;
}
.bottomlinearrows{
position: absolute;
bottom: -88px;
right: 428px;
}
.bottomline{
position: absolute;
bottom: -68px;
right: 136px;
width: 300px;
height: 17px;
border-bottom: 1px solid #91CCFF;
border-right: 1px solid #91CCFF;
}
}
.longleft1,
.longleft2 {
position: absolute;
}
.longleft1 {
right: 213px;
top: 102px;
}
.longleft2 {
right: 250px;
bottom: 137px;
width: 100px;
}

32
src/app/pages/oil-unloading-process/oil-unloading-process.component.ts

@ -0,0 +1,32 @@
import { Component, OnInit, Input } from '@angular/core';
import Viewer from 'viewerjs'
@Component({
selector: 'app-oil-unloading-process',
templateUrl: './oil-unloading-process.component.html',
styleUrls: ['./oil-unloading-process.component.scss']
})
export class OilUnloadingProcessComponent implements OnInit {
@Input() data: any
constructor() { }
ngOnInit(): void {
}
lookImg() {
let dom = document.getElementById(`viewerjs`)
let pObjs = dom.childNodes;
let node = document.createElement("img")
node.style.display = "none";
node.src = "../../../../assets/images/bgImg.png";
node.id = 'img'
dom.appendChild(node)
setTimeout(() => {
let viewer = new Viewer(document.getElementById(`viewerjs`), {
hidden: () => {
dom.removeChild(pObjs[0]);
viewer.destroy();
}
});
node.click();
}, 0);
}
}

6
src/app/pages/pages.module.ts

@ -49,11 +49,13 @@ import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
import { PlanAdminComponent } from './plan-admin/plan-admin.component'; import { PlanAdminComponent } from './plan-admin/plan-admin.component';
import { GetOutOfLineDetailsComponent } from './today-warning/get-out-of-line-details/get-out-of-line-details.component'; import { GetOutOfLineDetailsComponent } from './today-warning/get-out-of-line-details/get-out-of-line-details.component';
import { NzNotificationModule } from 'ng-zorro-antd/notification'; import { NzNotificationModule } from 'ng-zorro-antd/notification';
import { DispositionComponent } from './disposition/disposition.component';
import { OilUnloadingProcessComponent } from './oil-unloading-process/oil-unloading-process.component';
@NgModule({ @NgModule({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent, declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,
TodayWarningAdminComponent, CriminalRecordsAdminComponent, LeftDomainComponent, EquipmentInfoComponent, OilStationInfoComponent, TodayWarningAdminComponent, CriminalRecordsAdminComponent, LeftDomainComponent, EquipmentInfoComponent, OilStationInfoComponent,
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent], AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent, DispositionComponent, OilUnloadingProcessComponent],
imports: [ imports: [
@ -94,7 +96,7 @@ import { NzNotificationModule } from 'ng-zorro-antd/notification';
NzPopconfirmModule, NzPopconfirmModule,
NzBadgeModule NzBadgeModule
], ],
entryComponents: [AddequipmentComponent, EditequipmentComponent,GetOutOfLineDetailsComponent], entryComponents: [AddequipmentComponent, EditequipmentComponent,GetOutOfLineDetailsComponent,DispositionComponent,OilUnloadingProcessComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })

20
src/app/pages/plan-admin/plan-admin.component.html

@ -5,9 +5,9 @@
<app-title [name]="'组织机构'"></app-title> <app-title [name]="'组织机构'"></app-title>
</div> </div>
<div class="or"> <div class="or">
<nz-tree [nzExpandedKeys]="nzExpandedKeys" [nzSelectedKeys]="nzSelectedKeys" [nzShowExpand]="false" #nzTreeComponent [nzExpandAll]="nzExpandAll" <nz-tree [nzExpandedKeys]="nzExpandedKeys" [nzSelectedKeys]="nzSelectedKeys" [nzShowExpand]="false"
nzBlockNode [nzData]="nodes" (nzClick)="activeNode($event)" [nzTreeTemplate]="nzTreeTemplate" #nzTreeComponent [nzExpandAll]="nzExpandAll" nzBlockNode [nzData]="nodes" (nzClick)="activeNode($event)"
[nzMultiple]="false"></nz-tree> [nzTreeTemplate]="nzTreeTemplate" [nzMultiple]="false"></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<ng-container *ngIf="node.origin.parentId == null; else elseTemplate"> <ng-container *ngIf="node.origin.parentId == null; else elseTemplate">
<img style="vertical-align: bottom;" src="../../../assets/images/flower.png" alt=""> <img style="vertical-align: bottom;" src="../../../assets/images/flower.png" alt="">
@ -52,10 +52,12 @@
</div> </div>
<div class="tablebox" id="tablebox"> <div class="tablebox" id="tablebox">
<nz-table [nzPageSize]='999' #headerTable [nzData]="list" [nzShowPagination]="false" [nzScroll]="{ y:tableheight() }"> <nz-table [nzPageSize]='999' #headerTable [nzData]="list" [nzShowPagination]="false"
[nzScroll]="{ y:tableheight() }">
<thead> <thead>
<tr> <tr>
<th style="text-align: center;">加油站名称</th> <th></th>
<th>加油站名称</th>
<th>区域</th> <th>区域</th>
<th>所属公司</th> <th>所属公司</th>
<th>联系人</th> <th>联系人</th>
@ -70,7 +72,9 @@
</thead> </thead>
<tbody id="table"> <tbody id="table">
<tr *ngFor="let item of headerTable.data;let key = index"> <tr *ngFor="let item of headerTable.data;let key = index">
<th style="text-align: center;">{{item.stationName}}</th> <th style="text-align: right;box-sizing: border-box;padding-right: 8px;"><img
src="../../../assets/images/3d.png" alt="" *ngIf="item.hasBuildingInfo"></th>
<th>{{item.stationName}}</th>
<th>{{item.locationName}}</th> <th>{{item.locationName}}</th>
<th>{{item.companyName}}</th> <th>{{item.companyName}}</th>
<th>{{item.leaderName}}</th> <th>{{item.leaderName}}</th>
@ -88,7 +92,7 @@
</nz-table> </nz-table>
<!-- <!--
<div class="pagination"> <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate" <nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination> nzShowQuickJumper></nz-pagination>
@ -96,4 +100,4 @@
</div> --> </div> -->
</div> </div>
</div> </div>
</div> </div>

1
src/app/pages/plan-admin/plan-admin.component.ts

@ -181,7 +181,6 @@ export class PlanAdminComponent implements OnInit {
// this.list = this.list.concat(data.result.items); // this.list = this.list.concat(data.result.items);
this.list = [...data.result.items] this.list = [...data.result.items]
resolve(data) resolve(data)
// console.log(999999, data)
}) })
}) })
} }

16
src/app/pages/plan/plan.component.html

@ -26,7 +26,7 @@
<canvas id="center"></canvas> <canvas id="center"></canvas>
<!-- 左侧子组件 --> <!-- 左侧子组件 -->
<div class="leftChildComponent" *ngIf="editMode && isShowChildComponent && selectFence != 4" [ngStyle]="{ 'left': isShowLeftBuilding && editMode && userMode? '15%' : null }" [ngClass]="{'publicMoveUp': selectFence === 7}"> <div class="leftChildComponent" *ngIf="isShowChildComponent && selectFence != 4 || (!editMode && selectFence != 7)" [ngStyle]="{ 'left': isShowLeftBuilding && editMode && userMode? '15%' : null }" [ngClass]="{'publicMoveUp': selectFence === 7}">
<div class="leftChildHeader"> <div class="leftChildHeader">
<div><i nz-icon nzType="star" nzTheme="outline"></i></div> <div><i nz-icon nzType="star" nzTheme="outline"></i></div>
<div>{{allFence[selectFence]}}<i nz-icon nzType="plus-circle" nzTheme="outline" *ngIf="selectFence === 7 && editMode" (click)="noticeChildComponent(true)"></i><i nz-icon nzType="save" nzTheme="outline" *ngIf="selectFence === 7 && editMode" (click)="noticeChildComponent(false)"></i></div> <div>{{allFence[selectFence]}}<i nz-icon nzType="plus-circle" nzTheme="outline" *ngIf="selectFence === 7 && editMode" (click)="noticeChildComponent(true)"></i><i nz-icon nzType="save" nzTheme="outline" *ngIf="selectFence === 7 && editMode" (click)="noticeChildComponent(false)"></i></div>
@ -146,8 +146,16 @@
<p><input type="text" [(ngModel)]="beforePlanNode.name" [disabled]="!editMode"></p> <p><input type="text" [(ngModel)]="beforePlanNode.name" [disabled]="!editMode"></p>
<textarea [(ngModel)]="beforePlanNode.describe" [disabled]="!editMode"></textarea> <textarea [(ngModel)]="beforePlanNode.describe" [disabled]="!editMode"></textarea>
</div> </div>
<div class="planHeaderImg"><a href="javascript:;" class="bottomPlanUpload"><input type="file"><img src="../../../assets/images/uploadImg.png"></a></div> <div class="planHeaderImg" id="planNodeImg">
<div class="planHeaderVideo"><a href="javascript:;" class="bottomPlanUpload" style="width: 100px;"><input type="file"><img src="../../../assets/images/uploadVideo.png"></a></div> <img class="imgSrc" [src]="beforePlanNode.texture" [hidden]="!beforePlanNode.texture" [attr.data-original]="beforePlanNode.texture">
<a href="javascript:;" class="imgAndVideoUpload uploadImage" *ngIf="editMode && beforePlanNode.texture"><input type="file" accept="image/*" (change)='uploadImgVideo($event, false)'><i nz-icon nzType="border-inner" nzTheme="outline"></i></a>
<a href="javascript:;" class="bottomPlanUpload" *ngIf="editMode && !beforePlanNode.texture"><input type="file" accept="image/*" (change)='uploadImgVideo($event, false)'><img src="../../../assets/images/uploadImg.png"></a>
</div>
<div class="planHeaderVideo">
<video [src]="beforePlanNode.video" [hidden]="!beforePlanNode.video" (click)="openVideo(beforePlanNode.video)"></video>
<a href="javascript:;" class="imgAndVideoUpload uploadVideo" *ngIf="editMode && beforePlanNode.video"><input type="file" accept="video/*" (change)='uploadImgVideo($event, true)'><i nz-icon nzType="border-inner" nzTheme="outline"></i></a>
<a href="javascript:;" class="bottomPlanUpload" style="width: 100px;" *ngIf="editMode && !beforePlanNode.video"><input type="file" accept="video/*" (change)='uploadImgVideo($event, true)'><img src="../../../assets/images/uploadVideo.png"></a>
</div>
</div> </div>
<div style="height: 5px;"></div> <div style="height: 5px;"></div>
<div class="pulicPlanDiv bottomPlanCenter"> <div class="pulicPlanDiv bottomPlanCenter">
@ -235,7 +243,7 @@
<!-- 应急预案设备任务弹窗 --> <!-- 应急预案设备任务弹窗 -->
<!-- 全景图/视频弹窗 --> <!-- 全景图/视频弹窗 -->
<nz-modal nzClassName="videoDialog" [(nzVisible)]="videoDialogType.url" nzFooter="null" (nzOnCancel)="videoDialogType.url = null;" nzWidth="90%"> <nz-modal nzClassName="videoDialog" [(nzVisible)]="videoDialogType.url" nzFooter="null" (nzOnCancel)="videoDialogType.url = null;" nzWidth="90%">
<video [src]="videoDialogType.url" style="width: 100%; height: 100%;" [hidden]="!videoDialogType.isVideo"></video> <video [src]="videoDialogType.url" controls="controls" autoplay style="width: 100%; height: 100%;" [hidden]="!videoDialogType.isVideo"></video>
<canvas id="panorama" [hidden]="videoDialogType.isVideo"></canvas> <canvas id="panorama" [hidden]="videoDialogType.isVideo"></canvas>
</nz-modal> </nz-modal>
<!-- 全景图/视频弹窗 --> <!-- 全景图/视频弹窗 -->

6
src/app/pages/plan/plan.component.scss

@ -335,8 +335,10 @@
input{ border: none; outline: none; background-color: transparent; width: 100%; height: 100%; } input{ border: none; outline: none; background-color: transparent; width: 100%; height: 100%; }
textarea{ width: 100%; height: 50px; background: rgba(145, 204, 255, 0.41); border: 1px solid #91CCFF; padding: 0; resize: none; outline: none; } textarea{ width: 100%; height: 50px; background: rgba(145, 204, 255, 0.41); border: 1px solid #91CCFF; padding: 0; resize: none; outline: none; }
} }
.planHeaderImg{ width: 100px; height: 100%; text-align: center; } .planHeaderImg{ width: 140px; height: 100%; text-align: center; line-height: 80px; .imgSrc{ width: 100px; height: auto; max-height: 100%; } }
.planHeaderVideo{ width: 120px; height: 100%; text-align: center; } .uploadImage{ width: 20px; height: 20px; line-height: 20px; float: right; margin-top: 30px; }
.planHeaderVideo{ width: 180px; height: 100%; text-align: center; line-height: 80px; video{ width: 120px; height: auto; max-height: 100%; } }
.uploadVideo{ width: 30px; height: 30px; line-height: 30px; float: right; margin-top: 25px; }
} }
.bottomPlanCenter{ .bottomPlanCenter{
height: 35px; height: 35px;

74
src/app/pages/plan/plan.component.ts

@ -1,4 +1,5 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import Viewer from 'viewerjs';
import { Game } from 'src/app/babylon/game'; import { Game } from 'src/app/babylon/game';
import { LoginSatus } from 'src/app/babylon/controller/status/login-status'; import { LoginSatus } from 'src/app/babylon/controller/status/login-status';
import { StatusManager } from 'src/app/babylon/controller/status/status-manager'; import { StatusManager } from 'src/app/babylon/controller/status/status-manager';
@ -23,6 +24,9 @@ import { AllMarkData } from 'src/app/babylon/model/data/mark/all-mark-data';
import { MarkData, MarkTask } from 'src/app/babylon/model/data/mark/mark-data'; import { MarkData, MarkTask } from 'src/app/babylon/model/data/mark/mark-data';
import { MarkWindow } from 'src/app/babylon/view/mark-window/mark-window'; import { MarkWindow } from 'src/app/babylon/view/mark-window/mark-window';
import { AllMarkPlanData, MarkNodeData, MarkPlanData } from 'src/app/babylon/model/data/mark/mark-plan-data'; import { AllMarkPlanData, MarkNodeData, MarkPlanData } from 'src/app/babylon/model/data/mark/mark-plan-data';
import { DataManager, ResType } from 'src/app/babylon/controller/data-manager';
import { EventManager as babylonEventManager } from 'src/app/babylon/controller/event-manager/event-manager';
import { Event_GetAllMarkPlanData } from 'src/app/babylon/controller/event-manager/events/event-get-markplandata-success';
@ -41,6 +45,7 @@ export class PlanComponent implements OnInit {
public canvas: HTMLCanvasElement; //canvas 实例 public canvas: HTMLCanvasElement; //canvas 实例
public editMode: boolean = true; //编辑/查看 模式 public editMode: boolean = true; //编辑/查看 模式
public userMode: boolean = ModeManager.s_isMakeMode; //是否为 内部权限 public userMode: boolean = ModeManager.s_isMakeMode; //是否为 内部权限
public bucketName: string = ObjectsService.getFullPath("文件路径"); //当前桶名
public isShowLoading: boolean = true; //显隐 loading加载条 public isShowLoading: boolean = true; //显隐 loading加载条
ngOnInit(): void { ngOnInit(): void {
@ -133,10 +138,23 @@ export class PlanComponent implements OnInit {
if (this.selectFence === 7) { //初始化 应急预案模块 if (this.selectFence === 7) { //初始化 应急预案模块
this.initializePlan() this.initializePlan()
} }
this.isShowChildComponent && this.leftDomain && type != 4 ? this.leftDomain.initComponent(type) : null; //手动初始化子组件 if (type === 7) { //初始化 应急预案 data
this.selectFence = type this.isShowChildComponent && this.leftDomain? this.leftDomain.initComponent(type) : null; //手动初始化子组件
this.isShowChildComponent = true this.selectFence = type
buildingWindow.changeJYZInfoModel(fenceType, true) this.isShowChildComponent = true
buildingWindow.changeJYZInfoModel(fenceType, true)
MarkWindow.instance ? this.allMarkPlanData = MarkWindow.instance.allMarkPlanData : null;
babylonEventManager.addListener(Event_GetAllMarkPlanData, (data: Event_GetAllMarkPlanData) => {
this.allMarkPlanData = MarkWindow.instance.allMarkPlanData
this.isShowChildComponent && this.leftDomain? this.leftDomain.allMarkPlanData = MarkWindow.instance.allMarkPlanData : null
})
this.isShowChildComponent && this.leftDomain? this.leftDomain.allMarkPlanData = MarkWindow.instance.allMarkPlanData : null
} else {
this.isShowChildComponent && this.leftDomain && type != 4 ? this.leftDomain.initComponent(type) : null; //手动初始化子组件
this.selectFence = type
this.isShowChildComponent = true
buildingWindow.changeJYZInfoModel(fenceType, true)
}
} else { //取消选中 } else { //取消选中
this.selectFence = -1 this.selectFence = -1
this.isShowChildComponent = false this.isShowChildComponent = false
@ -354,10 +372,11 @@ export class PlanComponent implements OnInit {
publicToggleNode() { publicToggleNode() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.beforePlanNode = this.beforeEmergencyPlan.nodes[this.nzCurrent] this.beforePlanNode = this.beforeEmergencyPlan.nodes[this.nzCurrent]
this.isShowChildComponent && this.leftDomain ? this.leftDomain.selectPlanId = this.beforeEmergencyPlan.id : null this.isShowChildComponent && this.leftDomain? this.leftDomain.selectPlanId = this.beforeEmergencyPlan.id : null
this.isShowChildComponent && this.leftDomain ? this.leftDomain.selectNodeId = this.beforePlanNode.id : null this.isShowChildComponent && this.leftDomain? this.leftDomain.selectNodeId = this.beforePlanNode.id : null
MarkWindow.instance.selectMarkNode(this.beforeEmergencyPlan.id, this.beforePlanNode.id, false, true) MarkWindow.instance.selectMarkNode(this.beforeEmergencyPlan.id, this.beforePlanNode.id, false, true)
this.beforePlanNode = MarkWindow.instance.currentMarkNodeInfo.nodeData this.beforePlanNode = MarkWindow.instance.currentMarkNodeInfo.nodeData
this.initViewer()
this.updateProgress() //更新进度条 this.updateProgress() //更新进度条
resolve(true) resolve(true)
}) })
@ -543,6 +562,49 @@ export class PlanComponent implements OnInit {
} }
videoDialogType: videoDialog = new videoDialog(true, null); //全景图/视频 弹窗 videoDialogType: videoDialog = new videoDialog(true, null); //全景图/视频 弹窗
planNodeImg: Viewer; //应急预案图片Viewer 实例
//初始化 Viewer图片
initViewer() {
if (this.beforePlanNode.texture) {
window.setTimeout(() => {
this.planNodeImg = new Viewer(this.element.nativeElement.querySelector('#planNodeImg'), { url: 'data-original' });
}, 0)
}
}
//上传 图片/视频
uploadImgVideo(e, isVideo: boolean) {
if (e.target.files.length) {
let maxSize = 30 * 1024 * 1024 //限制30MB
let file = e.target.files[0]
if (file.size > maxSize) { //超出限制
this.message.info("上传资源需小于30MB");
return
}
this.isShowLoading = true //打开遮罩
let institutionKey = sessionStorage.getItem('unitId') || "ceshi"; //单位id
let resType = isVideo? ResType.Video : ResType.Texture
let key = `${(new Date()).getMonth() + 1}-${(new Date()).getDate()}-${(new Date()).getHours()}`
let url = DataManager.getResPath_mark(institutionKey, resType, key) //url
ServeManager.instance.openFileSelect(file, url, (name: string, path: string) => { //上传
if (!isVideo) { //img
this.beforePlanNode.texture = ObjectsService.getFullPath(path + name)
this.initViewer()
} else { //video
this.beforePlanNode.video = ObjectsService.getFullPath(path + name)
}
this.isShowLoading = false //关闭遮罩
this.message.info("上传成功!");
})
}
}
//打开视频弹窗
openVideo(src: string) {
this.videoDialogType.isVideo = true
this.videoDialogType.url = src
}
selectRightTopFast: number = 0; //当前选择功能 快捷栏 selectRightTopFast: number = 0; //当前选择功能 快捷栏
selectAdsorb: boolean = false; //吸附状态 selectAdsorb: boolean = false; //吸附状态

10
src/app/pages/plan/publicPop.scss

@ -26,7 +26,15 @@
overflow: hidden; overflow: hidden;
display: inline-block; display: inline-block;
} }
.uploadBackGround input,.bottomPlanUpload input { .imgAndVideoUpload{
position: relative;
cursor: pointer;
background: rgba(145, 204, 255, 0.41);
border: 1px dashed #91CCFF;
overflow: hidden;
display: inline-block;
}
.uploadBackGround input,.bottomPlanUpload input,.imgAndVideoUpload input {
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;

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

@ -164,8 +164,9 @@
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}} {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
<button nz-button (click)="look(item)">查看</button> <button nz-button (click)="look(item)" style="margin-right: 16px;">查看</button>
<!-- <img style="margin-left: 24px;cursor: pointer;" src="../../../assets/images/excel.png" alt=""> --> <button *ngIf="!item.handleTime" nz-button (click)="dispose(item)">处置</button>
<span *ngIf="item.handleTime" style="color: #23D9FF;margin-left: 10px;">已处置</span>
</div> </div>
</div> </div>
</div> </div>

2
src/app/pages/today-warning-admin/today-warning-admin.component.scss

@ -95,7 +95,7 @@
background: linear-gradient(180deg, rgba(3, 0, 0, 0) 0%, rgba(0, 46, 91, 0.68) 100%); background: linear-gradient(180deg, rgba(3, 0, 0, 0) 0%, rgba(0, 46, 91, 0.68) 100%);
box-sizing: border-box; box-sizing: border-box;
padding-left: 20px; padding-left: 20px;
padding-right: 60px;
div { div {
font-size: 15px; font-size: 15px;
text-align: left; text-align: left;

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

@ -2,15 +2,19 @@ import { Component, OnInit, ViewContainerRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { TreeService } from 'src/app/service/tree.service';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component'; import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
import * as moment from 'moment'; import * as moment from 'moment';
import { NavChangeService } from 'src/app/service/navChange.service'; // import { TreeService } from 'src/app/service/tree.service';
// import { NavChangeService } from 'src/app/service/navChange.service';
import { TreeService } from '../../service/tree.service';
import { NavChangeService } from '../../service/navChange.service';
import 'linqjs'; import 'linqjs';
import { DispositionComponent } from '../disposition/disposition.component';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
selector: 'app-today-warning-admin', selector: 'app-today-warning-admin',
@ -20,7 +24,7 @@ import 'linqjs';
export class TodayWarningAdminComponent implements OnInit { export class TodayWarningAdminComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder, private router: Router, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService) { } 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) { }
ngOnInit(): void { ngOnInit(): void {
this.validateForm = this.fb.group({ this.validateForm = this.fb.group({
@ -105,6 +109,8 @@ export class TodayWarningAdminComponent implements OnInit {
ViolateArea: this.validateForm.value.area, ViolateArea: this.validateForm.value.area,
organizationUnitId: this.validateForm.value.organization, organizationUnitId: this.validateForm.value.organization,
ViolateTime: (this.validateForm.value.datePickerEnd && this.validateForm.value.datePickerStart) ? [moment(this.validateForm.value.datePickerStart).format('yyyy-MM-DD HH:mm:ss'), moment(this.validateForm.value.datePickerEnd).format('yyyy-MM-DD HH:mm:ss')] : null, ViolateTime: (this.validateForm.value.datePickerEnd && this.validateForm.value.datePickerStart) ? [moment(this.validateForm.value.datePickerStart).format('yyyy-MM-DD HH:mm:ss'), moment(this.validateForm.value.datePickerEnd).format('yyyy-MM-DD HH:mm:ss')] : null,
// ViolateTime: ['2021-10-27', '2021-11-26'],
IsContainsChildren: 'true',
SkipCount: '0', SkipCount: '0',
MaxResultCount: '9999' MaxResultCount: '9999'
} }
@ -155,6 +161,12 @@ export class TodayWarningAdminComponent implements OnInit {
look(item) { look(item) {
let type
if (item.violation.violationType.indexOf('卸油')) {
type = 1
} else {
type = 0
}
const modal = this.modal.create({ const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent, nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef, nzViewContainerRef: this.viewContainerRef,
@ -176,4 +188,43 @@ export class TodayWarningAdminComponent implements OnInit {
}); });
const instance = modal.getContentComponent(); const instance = modal.getContentComponent();
} }
dispose(item) {
console.log(item)
const modal = this.modal.create({
nzContent: DispositionComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 380,
nzBodyStyle: {
'border': '1px solid #91CCFF',
'border-radius': '0px',
'padding': '7px',
'box-shadow': '0 0 8px 0 #fff',
'background-image': 'linear-gradient(#003665, #000f25)'
},
nzComponentParams: {},
nzFooter: null,
nzClosable: false,
nzOnOk: async () => {
if (instance.validateForm.valid) {
await new Promise(resolve => {
let body = {
id: item.id,
handleRecord: instance.validateForm.value.content
}
this.http.post('/api/services/app/ViolateRecord/HandleViolateRecord', body).subscribe(data => {
resolve(data)
this.message.create('success', '处置成功!');
item.handleTime = new Date()
return true
})
})
} else {
this.message.create('warning', '请填写完整!');
return false
}
},
});
const instance = modal.getContentComponent();
}
} }

175
src/app/pages/today-warning/get-out-of-line-details/get-out-of-line-details.component.html

@ -1,7 +1,6 @@
<!-- <p>get-out-of-line-details works!</p> -->
<div class="box"> <div class="box">
<div class="titlebox"> <div class="titlebox">
<div class="title" *ngIf="data.type == 0"> <div class="title">
<div (click)="contentType('img')" [ngClass]="{'selected': selectedType == 'img'}"> <div (click)="contentType('img')" [ngClass]="{'selected': selectedType == 'img'}">
预警截图 预警截图
<div class="border"></div> <div class="border"></div>
@ -11,15 +10,9 @@
<div class="border"></div> <div class="border"></div>
</div> </div>
</div> </div>
<div class="title" *ngIf="data.type != 0">
<div (click)="contentType('xieyou')" [ngClass]="{'selected': selectedType == 'img'}">
卸油作业
<div class="border"></div>
</div>
</div>
</div> </div>
<div class="content"> <div class="content">
<div *ngIf="data.type == 0 && selectedType == 'img'" class="imgbox"> <div *ngIf="selectedType == 'img'" class="imgbox">
<!-- <div class="imglist"> <!-- <div class="imglist">
<span class="imglisttitle">截图列表</span> <span class="imglisttitle">截图列表</span>
<div class="img"> <div class="img">
@ -30,171 +23,9 @@
<img [src]="imgUrl" alt=""> <img [src]="imgUrl" alt="">
</div> </div>
</div> </div>
<div style="width: 100%;height: 100%;" *ngIf="data.type == 0 && selectedType == 'video'" class="vediobox"> <div style="width: 100%;height: 100%;" *ngIf="selectedType == 'video'" class="vediobox">
<video controls style="width: 100%;height: 100%;" [src]="vedioUrl"></video> <video controls style="width: 100%;height: 100%;" [src]="vedioUrl"></video>
</div> </div>
<div *ngIf="data.type != 0" class="oilbox">
<div class="leftbox">
<div class="lefttop">
<div class="title">
事前准备
</div>
<div class="content">
<div class="imglist1">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">油罐车朝向检察</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">卸油效率检查</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">设置隔离检查</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">轮胎固定检察</span>
</div>
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">放置灭火器检察</span>
</div>
</div>
<div class="line">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="imglist2">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">静电接地检查15分钟</span>
</div>
</div>
</div>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="leftbottom">
<div class="title">
事中操作
</div>
<div class="content">
<div class="colimglist">
<div class="colimglist1">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">卸油车取样</span>
</div>
<div class="imgbox" style="margin-top: 12px;">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">连接卸油管</span>
</div>
</div>
<div class="colline">
</div>
</div>
<img style="height: 42px;" src="../../../../assets/images/right3.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">1.第三方确认检查</span>
</div>
<img style="height: 42px;" src="../../../../assets/images/right3.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">2.拆除卸油管</span>
</div>
<img style="height: 42px;" src="../../../../assets/images/right3.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">3.作业现场清理</span>
</div>
<img style="height: 42px;" src="../../../../assets/images/right3.png" alt="">
<div class="imgbox">
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
<span class="name">车辆出场</span>
</div>
</div>
</div>
</div>
<div class="rightbox">
<div class="righttop">
<div class="imgbox">
<div class="img selectedimg" >
<img [src]="'' ? '' : '../../../../assets/images/nopng.png'" alt="">
</div>
<span class="name">车辆进场</span>
</div>
</div>
<img style="height: 42px;" src="../../../../assets/images/down.png" alt="">
<div class="rightbottom">
<div class="title" style="text-align: center;">
卸油过程全程监测
</div>
<div class="content">
<div class="imgbox">
<span class="name">卸油全程监卸</span>
<div class="img errimg">
<img src="../../../../assets/images/bgImg.png" alt="">
<img class="err" src="../../../../assets/images/err.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">卸油员及司押人员服装</span>
<div class="img">
<img (click)="lookImg()" src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">登车防护检查</span>
<div class="img">
<img (click)="lookImg()" src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
<div class="imgbox">
<span class="name">油品泄漏检查</span>
<div class="img">
<img src="../../../../assets/images/bgImg.png" alt="">
</div>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<img class="longleft1" src="../../../../assets/images/longleft.png" style="width: 82px;" alt="">
<img class="longleft2" src="../../../../assets/images/longleft.png" alt="">
</div>
<div id="viewerjs" style="display:none">
</div> </div>

20
src/app/pages/today-warning/get-out-of-line-details/get-out-of-line-details.component.ts

@ -1,5 +1,4 @@
import { Component, OnInit, Input } from '@angular/core'; import { Component, OnInit, Input } from '@angular/core';
import Viewer from 'viewerjs'
@Component({ @Component({
selector: 'app-get-out-of-line-details', selector: 'app-get-out-of-line-details',
templateUrl: './get-out-of-line-details.component.html', templateUrl: './get-out-of-line-details.component.html',
@ -15,7 +14,6 @@ export class GetOutOfLineDetailsComponent implements OnInit {
imgUrl: string imgUrl: string
vedioUrl: string vedioUrl: string
ngOnInit(): void { ngOnInit(): void {
this.data.type = 1
this.imgUrl = this.data.violateImage this.imgUrl = this.data.violateImage
this.vedioUrl = this.data.violateVideo this.vedioUrl = this.data.violateVideo
} }
@ -25,22 +23,4 @@ export class GetOutOfLineDetailsComponent implements OnInit {
contentType(type) { contentType(type) {
this.selectedType = type this.selectedType = type
} }
lookImg() {
let dom = document.getElementById(`viewerjs`)
let pObjs = dom.childNodes;
let node = document.createElement("img")
node.style.display = "none";
node.src = "../../../../assets/images/bgImg.png";
node.id = 'img'
dom.appendChild(node)
setTimeout(() => {
let viewer = new Viewer(document.getElementById(`viewerjs`), {
hidden: () => {
dom.removeChild(pObjs[0]);
viewer.destroy();
}
});
node.click();
}, 0);
}
} }

8
src/app/pages/today-warning/today-warning.component.html

@ -111,11 +111,9 @@
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}} {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
<button nz-button (click)="look(item)" style="margin-right: 8px;">查看</button> <button nz-button (click)="look(item)" style="margin-right: 16px;">查看</button>
<button *ngIf="!item.handleTime" nz-button (click)="disposition(item)">处置</button> <button *ngIf="!item.handleTime" nz-button (click)="dispose(item)">处置</button>
<span *ngIf="item.handleTime" style="color: #23D9FF;margin-left: 10px;">已处置</span>
<span *ngIf="item.handleTime" class="dispositioned">已处置</span>
<!-- <img style="margin-left: 24px;cursor: pointer;" src="../../../assets/images/excel.png" alt=""> -->
</div> </div>
</div> </div>
</div> </div>

2
src/app/pages/today-warning/today-warning.component.scss

@ -88,7 +88,7 @@
margin-bottom: 12px; margin-bottom: 12px;
background: linear-gradient(180deg, rgba(3, 0, 0, 0) 0%, rgba(0, 46, 91, 0.68) 100%); background: linear-gradient(180deg, rgba(3, 0, 0, 0) 0%, rgba(0, 46, 91, 0.68) 100%);
box-sizing: border-box; box-sizing: border-box;
padding-right: 36px; padding-right: 60px;
div { div {
font-size: 15px; font-size: 15px;
text-align: center; text-align: center;

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

@ -3,9 +3,13 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from './get-out-of-line-details/get-out-of-line-details.component'; import { GetOutOfLineDetailsComponent } from './get-out-of-line-details/get-out-of-line-details.component';
import { TreeService } from 'src/app/service/tree.service'; // import { TreeService } from 'src/app/service/tree.service';
import { NavChangeService } from 'src/app/service/navChange.service'; // import { NavChangeService } from 'src/app/service/navChange.service';
import { TreeService } from '../../service/tree.service';
import { NavChangeService } from '../../service/navChange.service';
import * as moment from 'moment'; import * as moment from 'moment';
import { DispositionComponent } from '../disposition/disposition.component';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
selector: 'app-today-warning', selector: 'app-today-warning',
templateUrl: './today-warning.component.html', templateUrl: './today-warning.component.html',
@ -13,7 +17,7 @@ import * as moment from 'moment';
}) })
export class TodayWarningComponent implements OnInit { export class TodayWarningComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService) { } constructor(private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private navChangeService: NavChangeService, private message: NzMessageService) { }
ngOnInit(): void { ngOnInit(): void {
this.validateForm = this.fb.group({ this.validateForm = this.fb.group({
@ -62,6 +66,8 @@ export class TodayWarningComponent implements OnInit {
ViolateArea: this.validateForm.value.area, ViolateArea: this.validateForm.value.area,
organizationUnitId: JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id, organizationUnitId: JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id,
ViolateTime: (this.validateForm.value.datePickerEnd && this.validateForm.value.datePickerStart) ? [moment(this.validateForm.value.datePickerStart).format('yyyy-MM-DD HH:mm:ss'), moment(this.validateForm.value.datePickerEnd).format('yyyy-MM-DD HH:mm:ss')] : null, ViolateTime: (this.validateForm.value.datePickerEnd && this.validateForm.value.datePickerStart) ? [moment(this.validateForm.value.datePickerStart).format('yyyy-MM-DD HH:mm:ss'), moment(this.validateForm.value.datePickerEnd).format('yyyy-MM-DD HH:mm:ss')] : null,
// ViolateTime: ['2021-10-27', '2021-11-26'],
IsContainsChildren: 'true',
SkipCount: '0', SkipCount: '0',
MaxResultCount: '9999' MaxResultCount: '9999'
} }
@ -107,6 +113,12 @@ export class TodayWarningComponent implements OnInit {
look(item) { look(item) {
let type
if (item.violation.violationType.indexOf('卸油')) {
type = 1
} else {
type = 0
}
const modal = this.modal.create({ const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent, nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef, nzViewContainerRef: this.viewContainerRef,
@ -129,7 +141,47 @@ export class TodayWarningComponent implements OnInit {
const instance = modal.getContentComponent(); const instance = modal.getContentComponent();
} }
disposition(item){ dispose(item) {
console.log(item)
if (item.isEnableHandle) {
const modal = this.modal.create({
nzContent: DispositionComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 380,
nzBodyStyle: {
'border': '1px solid #91CCFF',
'border-radius': '0px',
'padding': '7px',
'box-shadow': '0 0 8px 0 #fff',
'background-image': 'linear-gradient(#003665, #000f25)'
},
nzComponentParams: {},
nzFooter: null,
nzClosable: false,
nzOnOk: async () => {
if (instance.validateForm.valid) {
await new Promise(resolve => {
let body = {
id: item.id,
handleRecord: instance.validateForm.value.content
}
this.http.post('/api/services/app/ViolateRecord/HandleViolateRecord', body).subscribe(data => {
resolve(data)
this.message.create('success', '处置成功!');
item.handleTime = new Date()
return true
})
})
} else {
this.message.create('warning', '请填写完整!');
return false
}
},
});
const instance = modal.getContentComponent();
} else {
this.message.create('warning', '无处置权限!');
}
} }
} }

BIN
src/assets/images/3d.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

BIN
src/assets/images/left3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/assets/images/warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

5
src/assets/js/abp.signalr-client.js

@ -84,7 +84,10 @@ var abp = abp || {};
abp.log.debug(error.message); abp.log.debug(error.message);
}); });
} }
abp.signalr.disconnect = function() {
abp.signalr.autoReconnect = false
abp.signalr.hubs.common.stop()
};
// Starts a connection with transport fallback - if the connection cannot be started using // Starts a connection with transport fallback - if the connection cannot be started using
// the webSockets transport the function will fallback to the serverSentEvents transport and // the webSockets transport the function will fallback to the serverSentEvents transport and
// if this does not work it will try longPolling. If the connection cannot be started using // if this does not work it will try longPolling. If the connection cannot be started using

4
src/shared/helpers/SignalRAspNetCoreHelper.ts

@ -1,6 +1,6 @@
declare var abp: any
export class SignalRAspNetCoreHelper { export class SignalRAspNetCoreHelper {
static initSignalR(callback?: () => void): void { static initSignalR(callback?: () => void): void {
const encryptedAuthToken = sessionStorage.getItem("encryptedAccessToken"); const encryptedAuthToken = sessionStorage.getItem("encryptedAccessToken");
let url = "http://39.106.78.171:8906"; let url = "http://39.106.78.171:8906";
abp.signalr = { abp.signalr = {

61
src/theme.less

@ -68,7 +68,7 @@
.receiptOfNotification { .receiptOfNotification {
height: 160px; height: 160px;
background-color: rgba(1, 13, 27, 0.9); background-color: rgba(1, 13, 27, 0.9);
box-shadow: 0 0 36px 3px #8f1622 inset; box-shadow: 0 0 28px 3px #8f1622 inset;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 5px; padding: 5px;
@ -77,40 +77,53 @@
position: relative; position: relative;
flex: 1; flex: 1;
display: flex; display: flex;
align-items: center;
img { img {
max-width: 64px; width: 90px;
max-height: 64px; height: 80px;
margin-left: 10px;
margin-right: 14px;
} }
.text { .text {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
color: white;
justify-content: center; justify-content: center;
.name {
font-size: 16px;
color: #ffaaaa;
margin-top: 4px;
margin-bottom: 6px;
}
.details {
font-size: 14px;
color: white;
}
} }
} }
.btnbox { .btnbox {
height: 30px; height: 36px;
line-height: 36px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 12px 0; margin: 12px 0;
button { div {
margin: 0 5px; width: 80px;
height: 32px;
line-height: 32px;
text-align: center;
margin: 0 8px;
color: #FFFFFF;
cursor: pointer;
} }
} }
button {
width: 64px;
height: 30px;
line-height: 30px;
background-color: rgba(1, 13, 27, 0.9);
color: white;
border: 0px;
}
.look { .look {
box-shadow: 0 0 12px #8f1622 inset; box-shadow: 0 0 12px #8f1622 inset;
@ -177,7 +190,8 @@
#recordsbox, #recordsbox,
#warningbox, #warningbox,
#warningboxadmin, #warningboxadmin,
#addequipment,#stationPlanBox { #addequipment,
#stationPlanBox {
::-webkit-input-placeholder { ::-webkit-input-placeholder {
/* WebKit browsers */ /* WebKit browsers */
color: #345d85; color: #345d85;
@ -278,7 +292,7 @@
#stationPlanBox { #stationPlanBox {
.ant-tree .ant-tree-node-content-wrapper:hover, .ant-tree .ant-tree-node-content-wrapper:hover,
.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected { .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected {
background: linear-gradient(90deg, rgba(0, 13, 33, 0) 0%, #2399FF 50%, rgba(0, 13, 33, 0) 100%); background: linear-gradient(90deg, rgba(0, 13, 33, 0) 0%, #2399FF 50%, rgba(0, 13, 33, 0) 100%);
@ -342,20 +356,25 @@
padding: 0; padding: 0;
color: #91CCFF; color: #91CCFF;
} }
.look { .look {
color: #36A2FF; color: #36A2FF;
cursor: pointer; cursor: pointer;
} }
.ant-table-measure-now{
.ant-table-measure-now {
display: none; display: none;
} }
.ant-empty-description{
.ant-empty-description {
color: #23D9FF; color: #23D9FF;
} }
.ant-table-tbody > tr > td{
.ant-table-tbody>tr>td {
border-bottom: none; border-bottom: none;
} }
.ant-table-tbody > tr > td:hover{
.ant-table-tbody>tr>td:hover {
background: none; background: none;
} }
} }

Loading…
Cancel
Save