螺栓检测二期前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.4 KiB

1 year ago
import { Component, Input, OnInit } from "@angular/core";
import { AnyObject } from "@cdk/types";
import { DetectionApiService } from "@client/app/core/services";
import { PointDTO, PointGroupDTO, DeviceDTO } from "@client/dtos";
import { NzMessageService } from "ng-zorro-antd/message";
@Component({
selector: "app-device-table",
templateUrl: "./device-table.component.html",
styleUrls: ["./device-table.component.less"],
})
export class DeviceTableComponent implements OnInit {
constructor(private api: DetectionApiService, private msg: NzMessageService) {}
@Input() currentSelected: { id: string; name: string }[] = [];
@Input() otherSelected: { id: string; name: string }[] = [];
checked = false;
loading = false;
indeterminate = false;
groups: PointGroupDTO[] = [];
gid: string = "";
pid: string = "";
points: PointDTO[] = [];
currentPointList: PointDTO[] = [];
listOfData: DeviceDTO[] = [];
listOfCurrentPageData: readonly any[] = [];
setOfCheckedId = new Set<string>();
setOfDataFromServer: AnyObject[] = [];
public get selectedDevice(): AnyObject[] {
return this.setOfDataFromServer.filter((f) => this.setOfCheckedId.has(f["id"]));
}
public get currentSelectedGroupName(): string {
return this.groups.find((f) => f.motorGroupId === this.gid)?.name ?? "";
}
public get currentSelectedPoint(): PointDTO | undefined {
return this.points.find((f) => f.pointId === this.pid);
}
ngOnInit(): void {
this.currentSelected?.forEach((p) => {
this.updateCheckedSet(p.id, true);
});
this.api.getFlatPoints().subscribe(({ points, groups }) => {
this.groups = groups;
this.points = points;
});
}
onReset() {
this.gid = "";
this.onSearch();
}
onSearch() {
if (!this.pid) {
this.msg.error("请选择检测点");
return;
}
this.api.getDeviceListByPointId(this.pid).subscribe((res) => {
console.log("this.otherSelected", this.otherSelected);
if (Array.isArray(res.body)) {
this.listOfData = res.body.map((i) => {
return {
...i,
id: i.deviceId,
disabled: !!this.otherSelected.find((f) => f.id === i.deviceId),
};
});
} else {
this.listOfData = [];
}
this.listOfData.forEach((i) => {
if (!this.setOfDataFromServer.some((s) => s["id"] === i["id"])) {
this.setOfDataFromServer.push(i);
}
});
this.refreshCheckedStatus();
});
}
onGroupChange(gid: string) {
this.currentPointList = this.groups.find((f) => f.motorGroupId === gid)?.pointList ?? [];
this.pid = "";
}
updateCheckedSet(id: string, checked: boolean): void {
if (checked) {
this.setOfCheckedId.add(id);
} else {
this.setOfCheckedId.delete(id);
}
}
onCurrentPageDataChange(listOfCurrentPageData: readonly any[]): void {
this.listOfCurrentPageData = listOfCurrentPageData;
this.refreshCheckedStatus();
}
refreshCheckedStatus(): void {
const listOfEnabledData = this.listOfCurrentPageData.filter(({ disabled }) => !disabled);
this.checked = listOfEnabledData.length > 0 && listOfEnabledData.every(({ id }) => this.setOfCheckedId.has(id));
this.indeterminate = listOfEnabledData.some(({ id }) => this.setOfCheckedId.has(id)) && !this.checked;
}
onItemChecked(id: string, checked: boolean): void {
this.updateCheckedSet(id, checked);
this.refreshCheckedStatus();
}
onAllChecked(checked: boolean): void {
this.listOfCurrentPageData
.filter(({ disabled }) => !disabled)
.forEach(({ id }) => this.updateCheckedSet(id, checked));
this.refreshCheckedStatus();
}
}