Browse Source

[新增]完成卸油流程页面,剩余卸油详情单条查看

dev
邵佳豪 3 years ago
parent
commit
aaf9e4c441
  1. 10
      src/app/pages/criminal-records-admin/criminal-records-admin.component.html
  2. 45
      src/app/pages/criminal-records-admin/criminal-records-admin.component.scss
  3. 12
      src/app/pages/criminal-records-admin/criminal-records-admin.component.ts
  4. 10
      src/app/pages/criminal-records/criminal-records.component.html
  5. 50
      src/app/pages/criminal-records/criminal-records.component.scss
  6. 13
      src/app/pages/criminal-records/criminal-records.component.ts
  7. 119
      src/app/pages/home-page/home-page.component.html
  8. 51
      src/app/pages/home-page/home-page.component.scss
  9. 359
      src/app/pages/home-page/home-page.component.ts
  10. 25
      src/app/pages/home/home.component.ts
  11. 167
      src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.html
  12. 284
      src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.scss
  13. 617
      src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.ts
  14. 3
      src/app/pages/pages-routing.module.ts
  15. 3
      src/app/pages/pages.module.ts
  16. 2
      src/app/pages/plan-admin/plan-admin.component.ts
  17. BIN
      src/assets/images/cameraNum.png
  18. BIN
      src/assets/images/modelNum.png
  19. BIN
      src/assets/images/stationNum.png

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

@ -2,7 +2,15 @@
<div class="content">
<div class="title">
<app-title [name]="'预警类型统计'"></app-title>
<div class="titlebox">
<img src="../../../assets/images/logosm.png" alt="">
<div class="content">
<div class="contentitem">
<span>预警类型统计</span>
<span class="grey" (click)="goOilList()">卸油统计</span>
</div>
</div>
</div>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div>
<div class="search" [hidden]="!isEcharts">

45
src/app/pages/criminal-records-admin/criminal-records-admin.component.scss

@ -53,6 +53,51 @@
padding: 0 28px;
margin: 13px 0;
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;

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

@ -103,6 +103,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
}
}
},
tooltip: {
trigger: 'axis'
},
series: [
{
data: [],
@ -155,6 +158,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
type: 'value',
show: false
},
tooltip: {
trigger: 'axis'
},
yAxis: {
type: 'category',
data: [],
@ -570,4 +576,10 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.refreshBarLineData(this.echartsData, 'eventTop')
}
}
//跳转卸油统计页面
goOilList(){
this.router.navigate(['/records/oliunloadinglist'])
}
}

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

@ -2,7 +2,15 @@
<div class="content">
<div class="title">
<app-title [name]="'预警类型统计'"></app-title>
<div class="titlebox">
<img src="../../../assets/images/logosm.png" alt="">
<div class="content">
<div class="contentitem">
<span>预警类型统计</span>
<span class="grey" (click)="goOilList()">卸油统计</span>
</div>
</div>
</div>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div>
<div class="search" [hidden]="!isEcharts">

50
src/app/pages/criminal-records/criminal-records.component.scss

@ -54,6 +54,52 @@
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;
@ -66,11 +112,13 @@
width: 100%;
display: flex;
justify-content: center;
.chartname {
position: absolute;
left: 20px;
top: 12px;
}
.chart {
width: 97%;
height: 350px;
@ -102,6 +150,7 @@
border: 0px;
box-shadow: 0 0 26px 0px #1a7fd7 inset;
margin-right: 16px;
.centerContent {
position: absolute;
top: 42%;
@ -133,6 +182,7 @@
position: relative;
border: 0px;
box-shadow: 0 0 26px 0px #1a7fd7 inset;
.btnbox {
position: absolute;
right: 28px;

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

@ -7,6 +7,7 @@ import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-d
import * as moment from 'moment';
import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { Router } from '@angular/router';
@Component({
selector: 'app-criminal-records',
templateUrl: './criminal-records.component.html',
@ -14,7 +15,7 @@ import { debounceTime } from 'rxjs/operators';
})
export class CriminalRecordsComponent implements OnInit {
validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private element: ElementRef) { }
constructor(private http: HttpClient, private fb: FormBuilder, private router: Router, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private element: ElementRef) { }
myChart: any //左侧饼图
option = {
@ -99,6 +100,9 @@ export class CriminalRecordsComponent implements OnInit {
}
}
},
tooltip: {
trigger: 'axis'
},
series: [
{
data: [],
@ -151,6 +155,9 @@ export class CriminalRecordsComponent implements OnInit {
type: 'value',
show: false
},
tooltip: {
trigger: 'axis'
},
yAxis: {
type: 'category',
data: [],
@ -520,4 +527,8 @@ export class CriminalRecordsComponent implements OnInit {
const instance = modal.getContentComponent();
}
goOilList(){
this.router.navigate(['/records/petrolStation/oliunloadinglist'])
}
}

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

@ -2,7 +2,7 @@
<div class="informbox">
<div class="warningnumber">
<img src="../../../assets/images/warningnum.png" alt="">
<span class="num">26</span>
<span class="num">{{totalCount}}</span>
<span class="today">今日预警</span>
</div>
<div class="inform">
@ -14,54 +14,14 @@
<div id="container" (mouseenter)="mouseEnter()" (mouseleave)="mouseleave()">
<div id="list-wrapper" style="top: 0">
<ul class="notice-list" id="notice-list">
<li class="info">
<li class="info" *ngFor="let item of unreadMessageList;let key = index">
<div class="infoitem">
<img src="../../../assets/images/warning1.png" alt="">
您有一条新的预警信息!员工服务:加油员未穿工作服加油或顾客自行加油。
您有一条新的预警信息!{{item.notification.data.violationName}}
</div>
<div class="btn">
<span>查看</span>
<span>忽略</span>
</div>
</li>
<li class="info">
<div class="infoitem">
<img src="../../../assets/images/warning1.png" alt="">
您有一条新的预警信息!员工服务:加油员未穿工作服加油或顾客自行加油。
</div>
<div class="btn">
<span>查看</span>
<span>忽略</span>
</div>
</li>
<li class="info">
<div class="infoitem">
<img src="../../../assets/images/warning1.png" alt="">
您有一条新的预警信息!员工服务:加油员未穿工作服加油或顾客自行加油。
</div>
<div class="btn">
<span>查看</span>
<span>忽略</span>
</div>
</li>
<li class="info">
<div class="infoitem">
<img src="../../../assets/images/warning1.png" alt="">
您有一条新的预警信息!员工服务:加油员未穿工作服加油或顾客自行加油。
</div>
<div class="btn">
<span>查看</span>
<span>忽略</span>
</div>
</li>
<li class="info">
<div class="infoitem">
<img src="../../../assets/images/warning1.png" alt="">
您有一条新的预警信息!员工服务:加油员未穿工作服加油或顾客自行加油。
</div>
<div class="btn">
<span>查看</span>
<span>忽略</span>
<span (click)="look(item)">查看</span>
<span (click)="ignore(key)">忽略</span>
</div>
</li>
</ul>
@ -79,7 +39,7 @@
<div class="leftboxcontent">
<div class="leftitem">
<div class="warningnum">
<h1>312</h1>
<h1>{{HomeAggregatioData.recordCount}}</h1>
<span>预警总数</span>
</div>
<img class="bucket" src="../../../assets/images/bucket.png" alt="">
@ -88,7 +48,7 @@
<div class="leftitem">
<span class="itemname">区域排名</span>
<div class="box areabox">
<div class="areaboxitem" *ngFor="let item of areaList;let key = index">
<div class="areaboxitem" *ngFor="let item of HomeAggregatioData.areaAgg;let key = index">
<div class="areaboxitemtop">
<span>
<span style="margin-right: 12px;"
@ -96,16 +56,16 @@
TOP {{key + 1}}
</span>
<span>
{{item.name}}
{{item.key}}
</span>
</span>
<span>
{{item.num}}
{{item.count}}
</span>
</div>
<div class="progress">
<div class="colorbar" [ngStyle]="width(item.num)"
<div class="colorbar" [ngStyle]="width(item.count,HomeAggregatioData.areaAgg[0].count)"
[ngClass]="{'red': key < 2,'yellow': key > 1 && key <4,'blue': key > 3 && key <10 }">
</div>
</div>
@ -119,8 +79,9 @@
<div class="leftitem">
<span class="itemname">事件排名</span>
<div class="box eventbox">
<div class="eventboxitem" *ngFor="let item of eventList;let key = index">
<div class="eventname">
<div class="eventboxitem"
*ngFor="let item of HomeAggregatioData.violationNameAgg;let key = index">
<div class="eventname" [title]="item.key">
<div class="block" [ngClass]="{'yellow': key < 3,'blue': key > 2}">
<ng-container *ngIf="key != 9; else elseTemplate">
{{'0' + (key + 1)}}
@ -128,20 +89,19 @@
<ng-template #elseTemplate>
{{key + 1}}
</ng-template>
</div>
{{item.name}}
{{item.key}}
</div>
<div class="progressbox">
<div class="progress">
<div class="colorbar" [ngStyle]="width(item.num)"
<div class="colorbar"
[ngStyle]="width(item.count,HomeAggregatioData.violationNameAgg[0].count)"
[ngClass]="{'yellow': key < 3,'blue': key > 2}">
</div>
</div>
</div>
<div style="margin-left: 6px;">
{{item.num}}
{{item.count}}
</div>
</div>
</div>
@ -153,7 +113,7 @@
<div class="leftitem">
<span class="itemname">站点排名</span>
<div class="box stationbox">
<div class="stationboxitem" *ngFor="let item of stationList;let key = index">
<div class="stationboxitem" *ngFor="let item of HomeAggregatioData.stationAgg;let key = index">
<div class="stationname">
<div class="block" [ngClass]="{'yellow': key < 3,'blue': key > 2}">
<ng-container *ngIf="key != 9; else elseTemplate">
@ -166,10 +126,10 @@
{{item.name}}
</div>
<div class="area">
<span [ngClass]="{'yellow': key < 3,'blue': key > 2}">北京-朝阳</span>
<span [ngClass]="{'yellow': key < 3,'blue': key > 2}">{{item.locationName}}</span>
</div>
<div style="margin-left: 6px;">
{{item.num}}
{{item.count}}
</div>
</div>
</div>
@ -190,10 +150,17 @@
<div class="equipmentechart" id="equipmentechart">
</div>
<div class="equipmentnum">
<div class="numlistbox">
<div class="numlistboxitem" *ngFor="let item of equipmentechartdata">
<div class="top top1"></div>
<span class="name">{{item.name}}</span>
<span class="value">{{item.value}}</span>
</div>
</div>
<!-- <div class="equipmentnum">
<span class="equipment">设备总数</span>
<span class="num">312</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>
@ -210,24 +177,24 @@
<div class="bottomitemcontent bottomitemcontent1">
<div class="bottomitemchartbox">
<div class="numbox">
<span class="num">206</span>
<span class="num">{{HomeAggregatioData.recordCount}}</span>
<span class="name">总数</span>
</div>
<div class="numlistbox">
<div class="numlistboxitem">
<div class="numlistboxitem" *ngIf="HomeAggregatioData.violationType.violationTypeAgg[0]">
<div class="top top1">01</div>
<span class="name">员工服务</span>
<span class="value">20</span>
</div>
<div class="numlistboxitem">
<div class="top top2">01</div>
<span class="name">员工服务</span>
<span class="value">20</span>
</div>
<div class="numlistboxitem">
<div class="top top3">01</div>
<span class="name">员工服务</span>
<span class="value">20</span>
<span class="name">{{HomeAggregatioData.violationType.violationTypeAgg[0].key}}</span>
<span class="value">{{HomeAggregatioData.violationType.violationTypeAgg[0].count}}</span>
</div>
<div class="numlistboxitem" *ngIf="HomeAggregatioData.violationType.violationTypeAgg[1]">
<div class="top top2">02</div>
<span class="name">{{HomeAggregatioData.violationType.violationTypeAgg[1].key}}</span>
<span class="value">{{HomeAggregatioData.violationType.violationTypeAgg[1].count}}</span>
</div>
<div class="numlistboxitem" *ngIf="HomeAggregatioData.violationType.violationTypeAgg[2]">
<div class="top top3">03</div>
<span class="name">{{HomeAggregatioData.violationType.violationTypeAgg[2].key}}</span>
<span class="value">{{HomeAggregatioData.violationType.violationTypeAgg[2].count}}</span>
</div>
</div>
<div class="eventechartpie" id="eventechartpie">

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

@ -79,6 +79,7 @@
ul {
list-style: none;
}
.info {
flex: 1;
display: flex;
@ -88,13 +89,16 @@
display: flex;
align-items: center;
justify-content: space-between;
.infoitem {
flex: 1;
display: flex;
align-items: center;
img {
width: 40px;
}
color: #fff;
}
@ -326,6 +330,7 @@
border: 0;
.warningnum {
width: 70px;
position: absolute;
left: 43%;
top: 20%;
@ -412,6 +417,51 @@
}
.numlistbox {
position: absolute;
left: 5%;
bottom: 6%;
display: flex;
flex-direction: column;
.numlistboxitem {
display: flex;
color: #fff;
align-items: center;
margin: 3px 0;
span {
font-size: 12px;
}
.top {
display: inline-block;
width: 15px;
height: 15px;
line-height: 15px;
text-align: center;
font-size: 8px;
border-radius: 2px;
}
.top1 {
background: #FF4B65;
}
.top2 {
background: #FF9963;
}
.top3 {
background: #36A2FF;
}
.name {
margin: 0 16px;
}
}
}
}
}
}
@ -446,6 +496,7 @@
position: relative;
.numbox {
width: 60px;
position: absolute;
left: 8.5%;
top: 28%;

359
src/app/pages/home-page/home-page.component.ts

@ -1,5 +1,10 @@
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Component, OnInit, ViewContainerRef } from '@angular/core';
import { Router } from '@angular/router';
import * as echarts from 'echarts';
import * as moment from 'moment';
import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
@Component({
selector: 'app-home-page',
templateUrl: './home-page.component.html',
@ -7,14 +12,9 @@ import * as echarts from 'echarts';
})
export class HomePageComponent implements OnInit {
constructor() { }
constructor(private http: HttpClient, private router: Router, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { }
equipmentechart//设备饼图
equipmentechartdata = [
{ name: '接入油站', value: '100' },
{ name: '摄像头', value: '100' },
{ name: '加油站模型', value: '100' }
]
equipmentechartOption = {
color: ['#91CCFF', '#46DFFF', '#36A2FF'],
tooltip: {
@ -42,9 +42,6 @@ export class HomePageComponent implements OnInit {
rich: {
a: {
width: 70
},
b: {
// align: 'right',
}
}
}
@ -70,7 +67,7 @@ export class HomePageComponent implements OnInit {
fontWeight: 'bold'
}
},
data: this.equipmentechartdata,
data: [],
tooltip: {//鼠标移入提示
position: 'left',
padding: [14, 19],
@ -112,12 +109,7 @@ export class HomePageComponent implements OnInit {
}
},
data: [
{ name: '员工服务', value: '100' },
{ name: '监控设备检测', value: '100' },
{ name: '安全隐患', value: '100' },
{ name: '员工服务2', value: '100' },
{ name: '监控设备检测2', value: '100' },
{ name: '安全隐患2', value: '100' }
],
tooltip: {//鼠标移入提示
position: 'right',
@ -212,7 +204,7 @@ export class HomePageComponent implements OnInit {
warningechartbarOption = {
xAxis: {
type: 'category',
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
data: [],
axisLine: {
show: false,
lineStyle: {
@ -222,8 +214,7 @@ export class HomePageComponent implements OnInit {
axisTick: {//刻度线
show: false
},
inverse: true
// inverse: true
},
yAxis: {
type: 'value',
@ -246,41 +237,81 @@ export class HomePageComponent implements OnInit {
}
}
},
// series: [
// {
// data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 3, 2, 1],
// type: 'line',
// smooth: true,
// showSymbol: false,
// label: {
// show: true,
// position: 'top'
// },
// lineStyle: {
// color: '#46DFFF',
// width: 1
// },
// areaStyle: {
// opacity: 0.8,
// color: {
// type: 'linear',
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// colorStops: [
// {
// offset: 0, color: '#46DFFF' // 0% 处的颜色
// },
// {
// offset: 0.3, color: '#46DFFF' // 0% 处的颜色
// },
// {
// offset: 1, color: 'rgba(0, 13, 33, 0)' // 100% 处的颜色
// }],
// global: false // 缺省为 false
// }
// },
// }
// ],
series: [
{
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 3, 2, 1],
type: 'line',
smooth: true,
showSymbol: false,
label: {
show: true,
position: 'top'
},
lineStyle: {
color: '#46DFFF',
width: 1
},
areaStyle: {
opacity: 0.8,
data: [],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0, color: '#46DFFF' // 0% 处的颜色
},
{
offset: 0.3, color: '#46DFFF' // 0% 处的颜色
},
{
offset: 1, color: 'rgba(0, 13, 33, 0)' // 100% 处的颜色
colorStops: [{
offset: 0, color: '#23F0FF' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(35, 153, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '35%'
},
{
data: [],
type: 'line',
symbol: 'circle',
symbolSize: 5,
label: {
show: true
},
itemStyle: {
color: '#fff',
shadowColor: '#fff',
shadowBlur: 10
},
lineStyle: {
color: '#FFCC8A',
width: 1
}
}
],
grid: {
@ -329,41 +360,81 @@ export class HomePageComponent implements OnInit {
}
}
},
// series: [
// {
// data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 3, 2, 1],
// type: 'line',
// smooth: true,
// showSymbol: false,
// label: {
// show: true,
// position: 'top'
// },
// lineStyle: {
// color: '#36A2FF',
// width: 1
// },
// areaStyle: {
// opacity: 0.8,
// color: {
// type: 'linear',
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// colorStops: [
// {
// offset: 0, color: '#36A2FF' // 0% 处的颜色
// },
// {
// offset: 0.3, color: '#36A2FF' // 0% 处的颜色
// },
// {
// offset: 1, color: 'rgba(0, 13, 33, 0)' // 100% 处的颜色
// }],
// global: false // 缺省为 false
// }
// },
// }
// ],
series: [
{
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 3, 2, 1],
type: 'line',
smooth: true,
showSymbol: false,
label: {
show: true,
position: 'top'
},
lineStyle: {
color: '#36A2FF',
width: 1
},
areaStyle: {
opacity: 0.8,
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0, color: '#36A2FF' // 0% 处的颜色
},
{
offset: 0.3, color: '#36A2FF' // 0% 处的颜色
},
{
offset: 1, color: 'rgba(0, 13, 33, 0)' // 100% 处的颜色
colorStops: [{
offset: 0, color: '#23F0FF' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(35, 153, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '35%'
},
{
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 3, 2, 1],
type: 'line',
symbol: 'circle',
symbolSize: 5,
label: {
show: true
},
itemStyle: {
color: '#fff',
shadowColor: '#fff',
shadowBlur: 10
},
lineStyle: {
color: '#FFCC8A',
width: 1
}
}
],
grid: {
@ -373,16 +444,15 @@ export class HomePageComponent implements OnInit {
top: '50px'
}
};
ngOnInit(): void {
// 饼图
this.equipmentechart = echarts.init(document.getElementById('equipmentechart'));
this.equipmentechart.setOption(this.equipmentechartOption);
// this.equipmentechart = echarts.init(document.getElementById('equipmentechart'));
// 预警饼图
this.warningechartpie = echarts.init(document.getElementById('eventechartpie'));
this.warningechartpie.setOption(this.warningechartpieOption);
// 预警线图
this.warningechartbar = echarts.init(document.getElementById('eventechartline'));
this.warningechartbar.setOption(this.warningechartbarOption);
// 卸油饼图
this.oilchartpie = echarts.init(document.getElementById('oilechartpie'));
this.oilchartpie.setOption(this.oilchartpieOption);
@ -402,8 +472,102 @@ export class HomePageComponent implements OnInit {
};
this.rollStart()
this.getHomeAggregation()
this.getUnreadNotification()
}
//获得所有未读消息
unreadMessageList: any
getUnreadNotification() {
this.http.get('/api/services/app/Notification/GetUnreadNotification').subscribe((data: any) => {
console.log('获得所有未读消息', data)
this.unreadMessageList = data.result
})
}
//获得统计信息
HomeAggregatioData: any = {
areaAgg: [],
violationType: {
violationTypeAgg: []
}
}
totalCount
getHomeAggregation() {
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 body = {
organizationUnitId: organizationUnitId,
isContainsChildren: true
}
this.http.post('/api/services/app/Home/HomeAggregation', body).subscribe((data: any) => {
this.HomeAggregatioData = data.result
this.totalCount = data.result.todayRecordCount
this.equipmentechartdata = [
{ name: '接入油站数量', value: data.result.dev.stationCount },
{ name: '摄像头数量', value: data.result.dev.cameraCount },
{ name: '预警模型数量', value: data.result.dev.violationCount }
]
console.log('图表信息', data.result)
this.eventEcharts(data.result)
})
// let starttime = moment(new Date()).format('YYYY-MM-DD') + '\xa0' + '00:00'
// let endtime = moment(new Date()).format('YYYY-MM-DD') + '\xa0' + '23:59'
// let params = {
// organizationUnitId: organizationUnitId,
// ViolateTime: [starttime, endtime],
// IsContainsChildren: 'true',
// SkipCount: '0',
// MaxResultCount: '1'
// }
// this.http.get('/api/services/app/ViolateRecord/GetAll', {
// params: params
// }).subscribe((data: any) => {
// this.totalCount = data.result.totalCount
// })
}
//预警图表
equipmentechartdata
eventEcharts(data) {
// this.warningechartpieOption.series[0].data = this.equipmentechartdata;
// this.equipmentechart.setOption(this.equipmentechartOption);
// var num = 0
data.violationType.violationTypeAgg.forEach(element => {
// num += element.count
element.name = element.key
element.value = element.count
});
this.warningechartpieOption.series[0].data = data.violationType.violationTypeAgg;
this.warningechartpie.setOption(this.warningechartpieOption);
let monthArr = []
let valuedata = []
data.violationType.days30ViolationCount.forEach(element => {
monthArr.push(moment(element.key).format('MM.DD'))
valuedata.push(element.count)
});
this.warningechartbarOption.xAxis.data = monthArr
this.warningechartbarOption.series[0].data = valuedata
this.warningechartbarOption.series[1].data = valuedata
this.warningechartbar.setOption(this.warningechartbarOption);
}
timer
rollStart() {
var ROLL_SPEED = 100
@ -435,9 +599,12 @@ export class HomePageComponent implements OnInit {
}
mouseleave() {
// console.log('离开了')
if (!this.isOpenModel) {
this.rollStart()
}
}
areaList: any = [
{ name: '加油区', num: 92 },
@ -471,9 +638,59 @@ export class HomePageComponent implements OnInit {
{ name: '北京市第十九加油站', num: 77 },
{ name: '北京市第十九加油站', num: 34 }
]
width(width) {
width(width: string, denominator: string) {
let style: any = {}
style.width = width + '%';
style.width = ((Number(width) / Number(denominator)) * 100).toFixed() + '%';
return style
}
isOpenModel: boolean = false
look(item) {
this.isOpenModel = true
let data = {
violateImage: item.notification.data.violateImage,
violateVideo: item.notification.data.violateVideo
}
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
},
nzFooter: null,
nzOnOk: async () => {
}
});
const instance = modal.getContentComponent();
modal.afterClose.subscribe(result => {
this.isOpenModel = false
this.rollStart()
});
this.readMess(item.notification.id)
}
//标记为已读
readMess(id){
let body = {
id : id
}
this.http.post('/api/services/app/Notification/Read',body).subscribe((data:any) => {
console.log('标记已读成功')
})
}
ignore(index) {
this.unreadMessageList.splice(index, 1)
}
}

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

@ -83,14 +83,16 @@ export class HomeComponent implements OnInit {
}
}
ngAfterViewInit() {
SignalRAspNetCoreHelper.initSignalR();
abp.event.on('abp.notifications.received', (userNotification) => {
reloadPage = (userNotification) => {
console.log('abp.notifications.received收到通知', userNotification);
this.receiptOfNotification(userNotification)
});
};
ngAfterViewInit() {
SignalRAspNetCoreHelper.initSignalR();
abp.event.on('abp.notifications.received', this.reloadPage);
}
messageId = []
receiptOfNotification(userNotification) {
@ -135,6 +137,17 @@ export class HomeComponent implements OnInit {
})
})
this.readMess(item.notification.id)
}
//标记为已读
readMess(id) {
let body = {
id: id
}
this.http.post('/api/services/app/Notification/Read', body).subscribe((data: any) => {
console.log('标记已读成功')
})
}
close(item) {
// console.log(item)
@ -147,6 +160,8 @@ export class HomeComponent implements OnInit {
ngOnDestroy() {
console.log('退出')
abp.event.off('abp.notifications.received', this.reloadPage);
abp.signalr.disconnect()
}

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

@ -0,0 +1,167 @@
<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>卸油统计</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">
<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>
</div>
<div class="rightbox">
<span class="chartname">
<img src="../../../assets/images/flower.png" alt="">
近一个月卸油预警走势
</span>
<div class="barchart" id="barchart">
</div>
</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 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">
<nz-form-control>
<nz-select formControlName="type" nzPlaceHolder="请选择预警事件">
<nz-option *ngFor="let item of warningTypesDetails" [nzValue]="item.id" [nzLabel]="item.violationName">
</nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item class="searchParams">
<nz-form-control>
<nz-select formControlName="site" nzPlaceHolder="请选择处置状态">
<nz-option nzValue="0" nzLabel="已处置"></nz-option>
<nz-option nzValue="1" nzLabel="未处置"></nz-option>
<nz-option nzValue="2" nzLabel="已逾期"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item> -->
<nz-form-item class="searchParams">
<nz-form-control>
<nz-range-picker 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">
卸油开始时间
</div>
<div nz-col nzSpan="3">
卸油结束时间
</div>
<div nz-col nzSpan="4">
操作前准备预警节点数量
</div>
<div nz-col nzSpan="4">
操作后准备预警节点数量
</div>
<div nz-col nzSpan="4">
全流程准备预警节点数量
</div>
<div nz-col nzSpan="3">
状态
</div>
<div nz-col nzSpan="2">
操作
</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">
{{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="4">
{{item.proccessBeforeCount}}
</div>
<div nz-col nzSpan="4">
{{item.proccessAfterCount}}
</div>
<div nz-col nzSpan="4">
{{item.allProccessCount}}
</div>
<div nz-col nzSpan="3">
<ng-container
*ngIf="item.proccessBeforeCount == 0 && item.proccessAfterCount == 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="2">
<span style="color: #36A2FF;" (click)="look(item)">查看</span>
</div>
</div>
</div>
</div>
<!-- <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</div> -->
</div>
</div>
</div>

284
src/app/pages/oil-unloading-process-list/oil-unloading-process-list.component.scss

@ -0,0 +1,284 @@
.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: space-around;
.searchParams {
width: 44.5%;
}
.btn {
width: 5%;
}
nz-select {
color: rgba(145, 204, 255, 0.95);
}
nz-range-picker {
background-color: rgba(0, 0, 0, 0);
width: 97%;
}
}
}
.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: 36%;
left: 26%;
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;
.look {
color: #36A2FF;
cursor: pointer;
}
}
}
}
}
.pagination {
margin: 15px 0;
display: flex;
align-items: center;
justify-content: center;
}
::-webkit-scrollbar {
width: 0px;
}
}
}

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

@ -0,0 +1,617 @@
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';
@Component({
selector: 'app-oil-unloading-process-list',
templateUrl: './oil-unloading-process-list.component.html',
styleUrls: ['./oil-unloading-process-list.component.scss']
})
export class OilUnloadingProcessListComponent implements OnInit {
validateForm!: FormGroup;
constructor(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
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],
datePicker: [[this.startdate, this.enddate]]
});
// 饼图
this.myChart = echarts.init(document.getElementById('piechart'));
//柱状折线图
this.mybarChart = echarts.init(document.getElementById('barchart'));
this.getViolateRecordList()
this.getAggregations()
}
//刷新饼图图表数据
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: '12%',
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: {
normal: {
color: '#36A2FF', //柱状颜色
},
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: 'bar',
itemStyle: {
normal: {
color: '#FFBD4B', //柱状颜色
},
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: 'bar',
itemStyle: {
normal: {
color: '#46DFFF', //柱状颜色
},
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%'
}
],
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.on('legendselectchanged', (params) => {
this.myChart.setOption({
legend: { selected: { [params.name]: true } }
})
console.log('点击了', params.name);
if (params.name == '预警事件') {
this.isgoback = true
this.refreshEchartsData2(this.echartsData)
}
});
//柱状图
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.refreshEchartsData1(this.echartsData)
}
//获取统计信息
getAggregations() {
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.echartsData = data.result
this.refreshEchartsData1(this.echartsData)
// this.refreshBarLineData(this.echartsData)
})
}
//获得卸油记录列表
SkipCount: string = '0'
MaxResultCount: string = '50'
list: any = []
totalCount: string
getViolateRecordList() {
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 = {
IsCorrect: this.validateForm.value.state == '0' ? 'false' : 'true',
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.list = this.list.concat(data.result.items);
this.list = [...this.list]
this.totalCount = data.result.totalCount
console.log('获取卸油流程列表', data.result.items)
// this.getAggregations()
})
}
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();
}
this.validateForm.patchValue({
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) {
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: 1200,
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();
}
gorecordList() {
// this.router.navigate(['/records/records'])
history.go(-1)
}
}

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

@ -10,6 +10,7 @@ import { OilStationInfoComponent } from './oil-station-info/oil-station-info.com
import { EquipmentInfoComponent } from './equipment-info/equipment-info.component';
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';
const routes: Routes = [
{ path: 'homepage', component: HomePageComponent },
@ -19,6 +20,8 @@ const routes: Routes = [
{ path: 'warning/petrolStation', component: TodayWarningComponent },
{ path: 'records', component: CriminalRecordsAdminComponent },
{ path: 'records/petrolStation', component: CriminalRecordsComponent },
{ path: 'records/oliunloadinglist', component: OilUnloadingProcessListComponent },
{ path: 'records/petrolStation/oliunloadinglist', component: OilUnloadingProcessListComponent },
{ path: 'equipmentInfo', component: EquipmentInfoComponent },
{ path: 'oliStationInfo', component: OilStationInfoComponent }
];

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

@ -52,11 +52,12 @@ import { NzNotificationModule } from 'ng-zorro-antd/notification';
import { DispositionComponent } from './disposition/disposition.component';
import { OilUnloadingProcessComponent } from './oil-unloading-process/oil-unloading-process.component';
import { HomePageComponent } from './home-page/home-page.component';
import { OilUnloadingProcessListComponent } from './oil-unloading-process-list/oil-unloading-process-list.component';
@NgModule({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,
TodayWarningAdminComponent, CriminalRecordsAdminComponent, LeftDomainComponent, EquipmentInfoComponent, OilStationInfoComponent,
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent, DispositionComponent, OilUnloadingProcessComponent, HomePageComponent],
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent, GetOutOfLineDetailsComponent, DispositionComponent, OilUnloadingProcessComponent, HomePageComponent, OilUnloadingProcessListComponent],
imports: [

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

@ -144,7 +144,7 @@ export class PlanAdminComponent implements OnInit {
}
}
sessionStorage.setItem('userdataOfgasstation', JSON.stringify(gastionobj))
this.router.navigate(['/plan/petrolStation'])
this.router.navigate(['/warning/petrolStation'])
let obj = {
name: 'oilstation'
}

BIN
src/assets/images/cameraNum.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/assets/images/modelNum.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/images/stationNum.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Loading…
Cancel
Save