import { HttpClient } from '@angular/common/http'; import { Component, OnInit, AfterViewInit, ViewChild, ViewContainerRef, } from '@angular/core'; import { TreeService } from 'src/app/service/tree.service'; import { NzFormatEmitEvent, NzTreeComponent, NzTreeNodeOptions, } from 'ng-zorro-antd/tree'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NzModalService } from 'ng-zorro-antd/modal'; import { NzMessageService } from 'ng-zorro-antd/message'; import { AddhostComponent } from './addhost/addhost.component'; import { EdithostComponent } from './edithost/edithost.component'; import { NavigationEnd, Router } from '@angular/router'; import { filter } from 'rxjs'; import { WorkerTagComponent } from './worker-tag/worker-tag.component'; @Component({ selector: 'app-analysis-of-the-host', templateUrl: './analysis-of-the-host.component.html', styleUrls: ['./analysis-of-the-host.component.scss'], }) export class AnalysisOfTheHostComponent implements OnInit { constructor( private router: Router, private fb: FormBuilder, private http: HttpClient, private toTree: TreeService, private modal: NzModalService, private message: NzMessageService, private viewContainerRef: ViewContainerRef ) { router.events .pipe(filter((e) => e instanceof NavigationEnd)) .subscribe((e) => { if (this.selectedOilStation && this.selectedOilStation.id) { this.getHost(); } }); } ngOnInit(): void { this.getAllOrganization(); } //获取所有组织机构 searchValue = ''; nzExpandAll = false; totalCount: string; getAllOrganization() { let params = { ContainsChildren: true, PageSize: 9999, }; this.http .get('/api/Organizations', { params: params, }) .subscribe((data: any) => { this.totalCount = data.totalCount; console.log(data.items); data.items.forEach((element) => { element.key = element.id; element.title = element.name; element.selectable = false; if (element.isGasStation) { element.isLeaf = true; element.disableCheckbox = false; } else { element.disableCheckbox = true; } }); this.nodes = [...this.toTree.toTree(data.items)]; this.defaultExpandedKeys = [this.nodes[0].id]; this.defaultExpandedKeys = [...this.defaultExpandedKeys]; }); } @ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent; defaultExpandedKeys = []; nodes: any[] = []; nzSelectedKeys: any[] = []; selectedOilStation: any; nzClick(event: NzFormatEmitEvent): void { if (event.node.origin['isGasStation']) { //如果点击的是加油站才生效 this.nzSelectedKeys[0] = event.node.origin.id; this.nzSelectedKeys = [...this.nzSelectedKeys]; this.selectedOilStation = event.node.origin; console.log(this.selectedOilStation); this.getHost(); } else { this.message.info('只有加油站才可以增加主机'); } } //获得加油站的主机 listOfData: any[] = []; isLoading = false; getHost() { this.isLoading = true; this.http .get('/api/EdgeDevices', { params: { ContainsChildren: true, OrganizationId: this.selectedOilStation.id, PageSize: 999, }, }) .subscribe((data: any) => { console.log('主机列表', data.items); this.isLoading = false; this.listOfData = data.items; }); } refresh() { this.http.put('/api/EdgeDevices/SyncAllEdgeDevices', null).subscribe({ next: (data) => { this.message.success('同步边缘设备成功'); this.getHost(); }, error: (err) => { this.message.error('同步边缘设备失败'); }, }); } ngAfterViewInit(): void {} //新增边缘盒子 addHost() { console.log(this.selectedOilStation); const modal = this.modal.create({ nzTitle: '新增边缘盒子', nzContent: AddhostComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 288, nzComponentParams: {}, nzOnOk: async () => { if (instance.validateForm.valid) { await new Promise((resolve) => { console.log('表单信息', instance.validateForm); let body = { hostIPAddress: instance.validateForm.value.ip, deviceProvider: instance.validateForm.value.type, OrganizationId: this.selectedOilStation.id, }; this.http.post('/api/EdgeDevices', body).subscribe((data) => { resolve(data); this.message.create('success', '创建成功!'); this.getHost(); return true; }); }); } else { this.message.create('warning', '请填写完整!'); return false; } }, }); const instance = modal.getContentComponent(); } edit(data) { console.log(data); const modal = this.modal.create({ nzTitle: '编辑边缘盒子', nzContent: EdithostComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 288, nzComponentParams: { ip: data.hostIPAddress, type: data.deviceProvider, }, nzOnOk: async () => { if (instance.validateForm.valid) { console.log('表单信息', instance.validateForm.value); await new Promise((resolve) => { (data.hostIPAddress = instance.validateForm.value.ip), (data.deviceProvider = instance.validateForm.value.type); this.http .put(`/api/EdgeDevices/${data.id}`, data) .subscribe((data) => { resolve(data); this.message.create('success', '修改成功!'); this.getHost(); return true; }); }); } else { this.message.create('warning', '请填写完整!'); return false; } }, }); const instance = modal.getContentComponent(); } delete(item) { console.log(item); this.modal.confirm({ nzTitle: `确定要删除${item.name}这个主机吗?`, nzOkText: '确定', nzOkType: 'primary', nzOnOk: () => { this.http.delete(`/api/EdgeDevices/${item.id}`).subscribe((data) => { this.message.create('success', '删除成功!'); this.getHost(); }); }, nzCancelText: '取消', }); } isVisible = false; radioValue = '警旗1'; configdata; config(data: any) { // this.isVisible = true; this.configdata = data; console.log(this.configdata); let body = { deviceProvider: this.configdata.deviceProvider, }; this.http.put(`/api/EdgeDevices/${this.configdata.id}`, body).subscribe({ next: (data) => { setTimeout(() => { this.router.navigate([`/system/host/camera`], { queryParams: { hostId: this.configdata.id, orId: this.selectedOilStation.id, type: DeviceProvider[this.configdata.deviceProvider], }, }); }, 0); }, error: (err) => { this.message.create('error', '更新边缘设备失败'); }, }); } handleOk(): void { let body = { deviceProvider: DeviceProvider[this.radioValue], }; this.http.put(`/api/EdgeDevices/${this.configdata.id}`, body).subscribe({ next: (data) => { this.isVisible = false; setTimeout(() => { this.router.navigate([`/system/host/camera`], { queryParams: { hostId: this.configdata.id, orId: this.selectedOilStation.id, type: this.radioValue, }, }); }, 0); }, error: (err) => { this.message.create('error', '更新边缘设备失败'); }, }); } handleCancel(): void { this.isVisible = false; } download(data) { console.log(data); let params = { edgeDeviceId: data.id, }; const httpOptions = { responseType: 'blob' as 'json', params: params, }; this.http .get(`/api/EdgeDevices/IdentityDigest/File`, httpOptions) .subscribe({ next: (data: any) => { console.log('文件', data); // 文件名中有中文 则对文件名进行转码 const link = document.createElement('a'); const blob = new Blob([data], { type: 'application/octet-stream' }); link.setAttribute('href', window.URL.createObjectURL(blob)); link.setAttribute('download', `.deviceid`); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); }, error: (err) => { console.log(err); }, }); } workerTag() { this.modal.create({ nzTitle: '修改workerTag字段', nzContent: WorkerTagComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 500, nzComponentParams: { tree: this.nodes, }, nzFooter: null, }); } } enum DeviceProvider { '警旗1' = 0, '警旗2' = 1, '警旗3' = 2, '北京展厅' = 3, }