|
|
|
import { HttpClient } from "@angular/common/http";
|
|
|
|
import { Component, ElementRef, OnInit, ViewContainerRef } from "@angular/core";
|
|
|
|
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
|
|
|
|
import { Router } from "@angular/router";
|
|
|
|
import { fromEvent } from "rxjs";
|
|
|
|
import { debounceTime } from "rxjs/operators";
|
|
|
|
import * as moment from "moment";
|
|
|
|
import { NzModalService } from "ng-zorro-antd/modal";
|
|
|
|
import { GetOutOfLineDetailsComponent } from "../get-out-of-line-details/get-out-of-line-details.component";
|
|
|
|
import { NzMessageService } from "ng-zorro-antd/message";
|
|
|
|
import { TreeService } from "src/app/service/tree.service";
|
|
|
|
import { DisposeequipmentComponent } from "../disposeequipment/disposeequipment.component";
|
|
|
|
import { SignalRAspNetCoreHelper } from "../../../shared/helpers/SignalRAspNetCoreHelper";
|
|
|
|
declare var abp: any;
|
|
|
|
import "linqjs";
|
|
|
|
import { ImgListComponent } from "./img-list/img-list.component";
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: "app-histories",
|
|
|
|
templateUrl: "./histories.component.html",
|
|
|
|
styleUrls: ["./histories.component.scss"],
|
|
|
|
})
|
|
|
|
export class HistoriesComponent implements OnInit {
|
|
|
|
validateForm!: FormGroup;
|
|
|
|
constructor(
|
|
|
|
private element: ElementRef,
|
|
|
|
private toTree: TreeService,
|
|
|
|
private http: HttpClient,
|
|
|
|
private fb: FormBuilder,
|
|
|
|
private router: Router,
|
|
|
|
private modal: NzModalService,
|
|
|
|
private viewContainerRef: ViewContainerRef,
|
|
|
|
private message: NzMessageService
|
|
|
|
) {}
|
|
|
|
|
|
|
|
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({
|
|
|
|
level: [null],
|
|
|
|
organization: [null],
|
|
|
|
type: [null],
|
|
|
|
event: [null],
|
|
|
|
site: [null],
|
|
|
|
manufacturer: [null], //厂商
|
|
|
|
operation: [null], //操作记录
|
|
|
|
disposalState: [null],
|
|
|
|
datePicker: [[this.startdate, this.enddate]],
|
|
|
|
});
|
|
|
|
|
|
|
|
this.warningType();
|
|
|
|
this.tableSpin = true;
|
|
|
|
this.getAllOrganization();
|
|
|
|
}
|
|
|
|
|
|
|
|
defaultOrId: string;
|
|
|
|
//获取所有组织机构
|
|
|
|
nodes: any = [];
|
|
|
|
getAllOrganization() {
|
|
|
|
let OrganizationUnitId =
|
|
|
|
sessionStorage.getItem("isGasStation") == "true"
|
|
|
|
? JSON.parse(sessionStorage.getItem("userdataOfgasstation"))
|
|
|
|
.organization.id
|
|
|
|
: JSON.parse(sessionStorage.getItem("userdata")).organization.id;
|
|
|
|
let params = {
|
|
|
|
OrganizationUnitId: OrganizationUnitId,
|
|
|
|
IsContainsChildren: "true",
|
|
|
|
};
|
|
|
|
this.http
|
|
|
|
.get("/api/services/app/Organization/GetAll", {
|
|
|
|
params: params,
|
|
|
|
})
|
|
|
|
.subscribe((data: any) => {
|
|
|
|
data.result.items.forEach((element) => {
|
|
|
|
if (element.id == OrganizationUnitId) {
|
|
|
|
element.parentId = null;
|
|
|
|
}
|
|
|
|
element.key = element.id;
|
|
|
|
element.title = element.displayName;
|
|
|
|
});
|
|
|
|
this.nodes = [...this.toTree.toTree(data.result.items)];
|
|
|
|
this.defaultOrId = JSON.parse(
|
|
|
|
sessionStorage.getItem("userdata")
|
|
|
|
).organization.id;
|
|
|
|
this.validateForm.value.organization = this.defaultOrId;
|
|
|
|
this.getViolateRecordList();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//获得违规记录列表
|
|
|
|
SkipCount: string = "0";
|
|
|
|
MaxResultCount: string = "50";
|
|
|
|
list: any = [];
|
|
|
|
totalCount: string;
|
|
|
|
tableSpin: boolean = false;
|
|
|
|
getViolateRecordList() {
|
|
|
|
let ViolationIds = [];
|
|
|
|
if (this.validateForm.value.event) {
|
|
|
|
ViolationIds.push(this.validateForm.value.event);
|
|
|
|
}
|
|
|
|
if (this.validateForm.value.type && !this.validateForm.value.event) {
|
|
|
|
this.warningTypesDetails.forEach((item) => {
|
|
|
|
item.id ? ViolationIds.push(item.id) : null;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
let VendorName: any = null;
|
|
|
|
if (this.validateForm.value.manufacturer) {
|
|
|
|
VendorName = this.validateForm.value.manufacturer;
|
|
|
|
}
|
|
|
|
let NotificationState: any = "All";
|
|
|
|
if (this.validateForm.value.operation) {
|
|
|
|
if (this.validateForm.value.operation === "null") {
|
|
|
|
NotificationState = null;
|
|
|
|
} else {
|
|
|
|
NotificationState = this.validateForm.value.operation;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let params = {
|
|
|
|
Level: this.validateForm.value.level,
|
|
|
|
ViolationIds: ViolationIds,
|
|
|
|
ViolateArea: this.validateForm.value.site,
|
|
|
|
OrganizationUnitId: this.validateForm.value.organization,
|
|
|
|
IsContainsChildren: "true",
|
|
|
|
CanVerify: "false",
|
|
|
|
ViolateTime: this.validateForm.value.datePicker
|
|
|
|
? [
|
|
|
|
moment(this.validateForm.value.datePicker[0]).format("yyyy-MM-DD"),
|
|
|
|
moment(this.validateForm.value.datePicker[1]).format("yyyy-MM-DD"),
|
|
|
|
]
|
|
|
|
: null,
|
|
|
|
SkipCount: this.SkipCount,
|
|
|
|
MaxResultCount: this.MaxResultCount, //每页50条
|
|
|
|
Positive: this.validateForm.value.disposalState,
|
|
|
|
VendorName: VendorName,
|
|
|
|
NotificationState: NotificationState,
|
|
|
|
};
|
|
|
|
this.tableSpin = true;
|
|
|
|
this.http
|
|
|
|
.get("/api/services/app/ViolateRecordVerification/GetAll", {
|
|
|
|
params: params,
|
|
|
|
})
|
|
|
|
.subscribe(
|
|
|
|
(data: any) => {
|
|
|
|
this.list = this.list.concat(data.result.items);
|
|
|
|
this.list = [...this.list];
|
|
|
|
// this.list = data.result.items
|
|
|
|
this.totalCount = data.result.totalCount;
|
|
|
|
console.log("违规记录列表", data);
|
|
|
|
this.tableSpin = false;
|
|
|
|
console.log(this.list.length);
|
|
|
|
},
|
|
|
|
(err) => {
|
|
|
|
this.tableSpin = false;
|
|
|
|
this.message.create("error", err.error.error.details);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
imgUrls() {
|
|
|
|
let ViolationIds = [];
|
|
|
|
if (this.validateForm.value.event) {
|
|
|
|
ViolationIds.push(this.validateForm.value.event);
|
|
|
|
}
|
|
|
|
if (this.validateForm.value.type && !this.validateForm.value.event) {
|
|
|
|
this.warningTypesDetails.forEach((item) => {
|
|
|
|
item.id ? ViolationIds.push(item.id) : null;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
let VendorName: any = null;
|
|
|
|
if (this.validateForm.value.manufacturer) {
|
|
|
|
VendorName = this.validateForm.value.manufacturer;
|
|
|
|
}
|
|
|
|
let NotificationState: any = "All";
|
|
|
|
if (this.validateForm.value.operation) {
|
|
|
|
if (this.validateForm.value.operation === "null") {
|
|
|
|
NotificationState = null;
|
|
|
|
} else {
|
|
|
|
NotificationState = this.validateForm.value.operation;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let params = {
|
|
|
|
Level: this.validateForm.value.level,
|
|
|
|
ViolationIds: ViolationIds,
|
|
|
|
ViolateArea: this.validateForm.value.site,
|
|
|
|
OrganizationUnitId: this.validateForm.value.organization,
|
|
|
|
IsContainsChildren: "true",
|
|
|
|
CanVerify: "false",
|
|
|
|
ViolateTime: this.validateForm.value.datePicker
|
|
|
|
? [
|
|
|
|
moment(this.validateForm.value.datePicker[0]).format("yyyy-MM-DD"),
|
|
|
|
moment(this.validateForm.value.datePicker[1]).format("yyyy-MM-DD"),
|
|
|
|
]
|
|
|
|
: null,
|
|
|
|
Positive: this.validateForm.value.disposalState,
|
|
|
|
VendorName: VendorName,
|
|
|
|
NotificationState: NotificationState,
|
|
|
|
};
|
|
|
|
this.http
|
|
|
|
.get("/api/services/app/ViolateRecordVerification/GetRecordImageUrls", {
|
|
|
|
params: params,
|
|
|
|
})
|
|
|
|
.subscribe(
|
|
|
|
(data: any) => {
|
|
|
|
console.log("图片列表");
|
|
|
|
this.openImgModel(data.result);
|
|
|
|
},
|
|
|
|
(err) => {
|
|
|
|
this.tableSpin = false;
|
|
|
|
this.message.create("error", err.error.error.details);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
openImgModel(data) {
|
|
|
|
const modal = this.modal.create({
|
|
|
|
nzTitle: "图片列表",
|
|
|
|
nzContent: ImgListComponent,
|
|
|
|
nzViewContainerRef: this.viewContainerRef,
|
|
|
|
nzGetContainer: () => document.body,
|
|
|
|
nzComponentParams: {
|
|
|
|
data: data,
|
|
|
|
},
|
|
|
|
nzWidth: 700,
|
|
|
|
nzOnOk: () => new Promise((resolve) => setTimeout(resolve, 1000)),
|
|
|
|
nzFooter: null,
|
|
|
|
});
|
|
|
|
const instance = modal.getContentComponent();
|
|
|
|
modal.afterOpen.subscribe(() => console.log("[afterOpen] emitted!"));
|
|
|
|
// Return a result when closed
|
|
|
|
modal.afterClose.subscribe((result) =>
|
|
|
|
console.log("[afterClose] The result is:", result)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
ngAfterViewInit(): void {
|
|
|
|
fromEvent(
|
|
|
|
this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement,
|
|
|
|
"scroll"
|
|
|
|
)
|
|
|
|
.pipe(debounceTime(100))
|
|
|
|
.subscribe((event: any) => {
|
|
|
|
//监听 DOM 滚动事件
|
|
|
|
if (
|
|
|
|
event.target.scrollHeight -
|
|
|
|
(event.target.scrollTop + event.target.clientHeight) <=
|
|
|
|
10
|
|
|
|
) {
|
|
|
|
if (this.totalCount > this.list.length) {
|
|
|
|
console.log("需要加载数据了", event);
|
|
|
|
this.SkipCount = String(Number(this.SkipCount) + 50);
|
|
|
|
this.getViolateRecordList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
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({
|
|
|
|
organization: JSON.parse(sessionStorage.getItem("userdata")).organization
|
|
|
|
.id,
|
|
|
|
datePicker: [this.startdate, this.enddate],
|
|
|
|
});
|
|
|
|
this.list = [];
|
|
|
|
this.SkipCount = "0";
|
|
|
|
this.getViolateRecordList();
|
|
|
|
}
|
|
|
|
|
|
|
|
//预警类型接口
|
|
|
|
warningTypes: any; //预警接口数据
|
|
|
|
warningTypesDetails: any;
|
|
|
|
warningType() {
|
|
|
|
this.http
|
|
|
|
.get("/api/services/app/Violation/GetAllList")
|
|
|
|
.subscribe((data: any) => {
|
|
|
|
this.warningTypesDetails = data.result;
|
|
|
|
this.warningTypes = (data.result as any).groupBy((t) => {
|
|
|
|
return t.violationType;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
typeChange(e: any) {
|
|
|
|
this.warningTypes.forEach((element) => {
|
|
|
|
if (element.key == e) {
|
|
|
|
this.warningTypesDetails = element;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.validateForm.patchValue({
|
|
|
|
event: null,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
look(item) {
|
|
|
|
// console.log("点击item", item);
|
|
|
|
if (item.violation.eventSystemName == "灭火器维护") {
|
|
|
|
item.violatedItemSnapshotObj = JSON.parse(item.violatedItemSnapshot);
|
|
|
|
const modal = this.modal.create({
|
|
|
|
nzContent: DisposeequipmentComponent,
|
|
|
|
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: {
|
|
|
|
data: item,
|
|
|
|
},
|
|
|
|
nzFooter: null,
|
|
|
|
nzClosable: false,
|
|
|
|
nzOnOk: async () => {
|
|
|
|
if (instance.isScrap) {
|
|
|
|
await new Promise((resolve) => {
|
|
|
|
let body = {
|
|
|
|
id: item.violatedItemSnapshotObj.id,
|
|
|
|
name: instance.copydata2.violatedItemSnapshotObj.name,
|
|
|
|
storageLocation:
|
|
|
|
instance.copydata2.violatedItemSnapshotObj.storageLocation,
|
|
|
|
productionDate: moment(
|
|
|
|
instance.copydata2.violatedItemSnapshotObj.productionDate
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
maintenanceDate: moment(
|
|
|
|
instance.copydata2.violatedItemSnapshotObj.maintenanceDate
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
validityEndTime: moment(
|
|
|
|
instance.copydata2.violatedItemSnapshotObj.validityEndTime
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
isScrapped: true,
|
|
|
|
organizationUnitId:
|
|
|
|
item.violatedItemSnapshotObj.organizationUnitId,
|
|
|
|
};
|
|
|
|
this.http
|
|
|
|
.put("/api/services/app/FireEquipment/Update", body)
|
|
|
|
.subscribe((data: any) => {
|
|
|
|
let body = {
|
|
|
|
id: item.id,
|
|
|
|
handleRecord: "报废成功!",
|
|
|
|
};
|
|
|
|
this.http
|
|
|
|
.post(
|
|
|
|
"/api/services/app/ViolateRecord/HandleViolateRecord",
|
|
|
|
body
|
|
|
|
)
|
|
|
|
.subscribe((data) => {
|
|
|
|
resolve(data);
|
|
|
|
this.message.create("success", "报废成功!");
|
|
|
|
item.handleTime = new Date();
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
if (instance.validateForm.valid) {
|
|
|
|
await new Promise((resolve) => {
|
|
|
|
let body = {
|
|
|
|
id: item.violatedItemSnapshotObj.id,
|
|
|
|
name: instance.validateForm.value.name,
|
|
|
|
storageLocation: instance.validateForm.value.storageLocation,
|
|
|
|
productionDate: moment(
|
|
|
|
instance.validateForm.value.productionDate
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
maintenanceDate: moment(
|
|
|
|
instance.validateForm.value.maintenanceDate
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
validityEndTime: moment(
|
|
|
|
instance.validateForm.value.validityEndTime
|
|
|
|
).format("yyyy-MM-DD"),
|
|
|
|
organizationUnitId:
|
|
|
|
item.violatedItemSnapshotObj.organizationUnitId,
|
|
|
|
};
|
|
|
|
this.http
|
|
|
|
.put("/api/services/app/FireEquipment/Update", body)
|
|
|
|
.subscribe((data: any) => {
|
|
|
|
// item.violatedItemSnapshotObj = data.result
|
|
|
|
let body = {
|
|
|
|
id: item.id,
|
|
|
|
handleRecord: "维保成功!",
|
|
|
|
};
|
|
|
|
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 {
|
|
|
|
const modal = this.modal.create({
|
|
|
|
nzContent: GetOutOfLineDetailsComponent,
|
|
|
|
nzWrapClassName: "vertical-center-modal",
|
|
|
|
nzViewContainerRef: this.viewContainerRef,
|
|
|
|
nzWidth:
|
|
|
|
document.documentElement.clientHeight < 650 ||
|
|
|
|
document.documentElement.clientWidth < 1400
|
|
|
|
? 1000
|
|
|
|
: 1200,
|
|
|
|
nzBodyStyle: {
|
|
|
|
border: "1px solid #6d9cc7",
|
|
|
|
"border-radius": "0px",
|
|
|
|
padding: "0px",
|
|
|
|
"box-shadow": "0 0 8px 0 #fff",
|
|
|
|
background: "#000D21",
|
|
|
|
},
|
|
|
|
nzComponentParams: {
|
|
|
|
data: item,
|
|
|
|
isBtn: false,
|
|
|
|
},
|
|
|
|
nzFooter: null,
|
|
|
|
nzOnOk: async () => {
|
|
|
|
console.log("推送成功了!!!", item);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
const instance = modal.getContentComponent();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|