Browse Source

[完善]黄海配置文件

非煤矿业企业安全风险监测预警系统
邵佳豪 2 years ago
parent
commit
63287bed7b
  1. 10
      src/app/system-management/host-config/host-config.component.html
  2. 144
      src/app/system-management/host-config/host-config.component.ts
  3. 5
      src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.html
  4. 21
      src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.scss
  5. 25
      src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.spec.ts
  6. 16
      src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.ts
  7. 1
      src/app/system-management/host-config/send-file/send-file.component.scss
  8. 19
      src/app/system-management/host-config/send-file/send-file.component.ts
  9. 8
      src/app/system-management/image-label/image-label.component.html
  10. 196
      src/app/system-management/image-label/image-label.component.ts
  11. 2
      src/app/system-management/system-management.module.ts

10
src/app/system-management/host-config/host-config.component.html

@ -29,13 +29,13 @@
<td>{{ item.uri }}</td> <td>{{ item.uri }}</td>
<td>{{ item.type | cameraType}}</td> <td>{{ item.type | cameraType}}</td>
<td> <td>
<!-- <ng-container *ngIf="item.type == 1; else elseTemplate"> <ng-container *ngIf="hostType === '交大'; else elseTemplate">
不需要标注 {{item.dimensionedPoints ? '已标注' : '未标注'}}
</ng-container> </ng-container>
<ng-template #elseTemplate> <ng-template #elseTemplate>
{{item.dimensionedPoints ? '已标注' : '未标注'}} {{item.dimensionedPointsHuanghai ? '已标注' : '未标注'}}
</ng-template> --> </ng-template>
{{item.dimensionedPoints ? '已标注' : '未标注'}}
</td> </td>
<td>{{ item.isEnabled ? '已启用' : '已禁用'}}</td> <td>{{ item.isEnabled ? '已启用' : '已禁用'}}</td>
<td> <td>

144
src/app/system-management/host-config/host-config.component.ts

@ -21,6 +21,7 @@ import { ConfigFormDataService } from 'src/app/service/configFormData.service';
import { SendFileComponent } from './send-file/send-file.component'; import { SendFileComponent } from './send-file/send-file.component';
import { ImageLabel2Component } from '../image-label2/image-label2.component'; import { ImageLabel2Component } from '../image-label2/image-label2.component';
import { ImageLabelComponent } from '../image-label/image-label.component'; import { ImageLabelComponent } from '../image-label/image-label.component';
import { HuangHaiConfigComponent } from './huang-hai-config/huang-hai-config.component';
interface Camera { interface Camera {
name: string; name: string;
user: string; user: string;
@ -29,6 +30,8 @@ interface Camera {
type: number; type: number;
order: number; order: number;
dimensionedPoints: string; dimensionedPoints: string;
dimensionedPointsHuanghai: string;
dimensionedPointsHuanghaiObj: any;
isEnabled: boolean; isEnabled: boolean;
} }
@ -96,6 +99,9 @@ export class HostConfigComponent implements OnInit {
this.http.get('/api/Cameras', { params: params }).subscribe((data: any) => { this.http.get('/api/Cameras', { params: params }).subscribe((data: any) => {
data.items.forEach((element) => { data.items.forEach((element) => {
element.dimensionedPointsObj = JSON.parse(element.dimensionedPoints); element.dimensionedPointsObj = JSON.parse(element.dimensionedPoints);
element.dimensionedPointsHuanghaiObj = JSON.parse(
element.dimensionedPointsHuanghai
);
}); });
this.listOfData = data.items; this.listOfData = data.items;
this.isLoading = false; this.isLoading = false;
@ -240,6 +246,11 @@ export class HostConfigComponent implements OnInit {
this.message.create('error', '请先下发source.yaml配置'); this.message.create('error', '请先下发source.yaml配置');
} }
} else if (this.hostType == '黄海') { } else if (this.hostType == '黄海') {
if (item.type === 1) {
this.message.info('加油区不需要标注');
return;
}
const element = document.documentElement; const element = document.documentElement;
if (element.requestFullscreen) { if (element.requestFullscreen) {
//进入全屏 //进入全屏
@ -1138,5 +1149,136 @@ rule_threshold:
} }
//黄海配置文件 //黄海配置文件
config() {} config() {
let data = this.configJson();
const modal = this.modal.create({
nzTitle: '下发黄海config.json配置',
nzContent: HuangHaiConfigComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1000,
nzBodyStyle: {
'border-radius': '0px',
padding: '7px',
},
nzComponentParams: {
data: data,
},
nzOnOk: () => {
new Promise((resolve, reject) => {
console.log('表单信息', instance.validateForm);
let body = {
configFiles: [{ name: 'config.json', content: instance.datacopy }],
};
this.http.put(`/api/EdgeDevices/${this.hostId}`, body).subscribe({
next: (data) => {
resolve(data);
this.message.success('文件保存成功');
let params = {
edgeDeviceId: this.hostId,
fileName: 'source.yaml',
};
this.http
.put('/api/EdgeDevices/Commands/PushFile', '', {
params: params,
})
.subscribe({
next: (data) => {
this.message.create('success', `发送文件名成功`);
},
});
},
error: (err) => {
this.message.error('文件保存失败');
reject(err);
},
});
});
},
});
const instance = modal.getContentComponent();
}
configJson() {
let obj = {
sources: [],
freq: 5,
minPersonWidth: 40,
minPersonHeight: 70,
personAttMaxCount: [8, 8, 10, 10],
carStopMaxCount: 9000,
fireMaxCount: 5,
smokeMaxCount: 5,
saveVideoSize: [800, 640],
delayWarning: 0,
smoke_th: 0.8,
phone_th: 0.8,
bulkoil_th: 0.8,
fileUpload:
'http://121.36.37.70:8906/api/Objects/sinochemtest/violations',
alarmUpload: 'http://121.36.37.70:8208/api/Data/ViolationRecordPush',
unloadingProUpload:
'http://121.36.37.70:8208/api/Data/OilUnloadingProcessPush',
prefix: '/api/Objects/sinochemtest',
};
this.listOfData.forEach((item: any) => {
if (item.type === 0) {
obj.sources.push({
nickName: '进出口',
rtsp: item.uri,
carStopROI: pointsArrTransition(
item.dimensionedPointsHuanghaiObj.carStopROI
),
});
}
if (item.type === 1) {
obj.sources.push({
nickName: '加油区',
rtsp: item.uri,
});
}
if (item.type === 2) {
obj.sources.push({
nickName: '卸油区',
rtsp: item.uri,
intrusionROI: pointsArrTransition(
item.dimensionedPointsHuanghaiObj.intrusionROI
),
unloadingROI:
item.dimensionedPointsHuanghaiObj.unloadingROI.length !== 0
? [
item.dimensionedPointsHuanghaiObj.unloadingROI[0].x,
item.dimensionedPointsHuanghaiObj.unloadingROI[0].y,
item.dimensionedPointsHuanghaiObj.unloadingROI[0].x +
item.dimensionedPointsHuanghaiObj.unloadingROI[0].width,
item.dimensionedPointsHuanghaiObj.unloadingROI[0].y +
item.dimensionedPointsHuanghaiObj.unloadingROI[0].height,
]
: [],
carStopROI: pointsArrTransition(
item.dimensionedPointsHuanghaiObj.carStopROI
),
});
}
if (item.type === 3) {
obj.sources.push({
nickName: '便利店',
rtsp: item.uri,
cashierROI: pointsArrTransition(
item.dimensionedPointsHuanghaiObj.cashierROI
),
});
}
});
console.log(obj);
return JSON.stringify(obj);
function pointsArrTransition(data) {
let arr = [];
data.forEach((item) => {
arr.push([item.x, item.y]);
});
arr.push([data[0].x, data[0].y]);
return arr;
}
}
} }

5
src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.html

@ -0,0 +1,5 @@
<div class="box">
<div class="content">
<textarea name="config" id="config" [(ngModel)]="datacopy"></textarea>
</div>
</div>

21
src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.scss

@ -0,0 +1,21 @@
.box {
width: 100%;
height: 100%;
background: #fff;
font-size: 15px;
color: black;
box-sizing: border-box;
display: flex;
flex-direction: column;
overflow-y: auto;
}
.content {
flex: 1;
box-sizing: border-box;
textarea {
width: 100%;
height: 400px;
}
}

25
src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.spec.ts

@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { HuangHaiConfigComponent } from './huang-hai-config.component';
describe('HuangHaiConfigComponent', () => {
let component: HuangHaiConfigComponent;
let fixture: ComponentFixture<HuangHaiConfigComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ HuangHaiConfigComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(HuangHaiConfigComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

16
src/app/system-management/host-config/huang-hai-config/huang-hai-config.component.ts

@ -0,0 +1,16 @@
import { Component, OnInit, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-huang-hai-config',
templateUrl: './huang-hai-config.component.html',
styleUrls: ['./huang-hai-config.component.scss'],
})
export class HuangHaiConfigComponent implements OnInit {
@Input() data: any;
validateForm!: FormGroup;
constructor() {}
datacopy;
ngOnInit(): void {
this.datacopy = JSON.parse(JSON.stringify(this.data));
}
}

1
src/app/system-management/host-config/send-file/send-file.component.scss

@ -13,6 +13,7 @@
.content { .content {
flex: 1; flex: 1;
box-sizing: border-box; box-sizing: border-box;
textarea { textarea {
width: 100%; width: 100%;
height: 400px; height: 400px;

19
src/app/system-management/host-config/send-file/send-file.component.ts

@ -1,23 +1,16 @@
import { Component, OnInit, Input } from '@angular/core'; import { Component, OnInit, Input } from '@angular/core';
import { NzModalRef } from 'ng-zorro-antd/modal'; import { FormGroup } from '@angular/forms';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
@Component({ @Component({
selector: 'app-send-file', selector: 'app-send-file',
templateUrl: './send-file.component.html', templateUrl: './send-file.component.html',
styleUrls: ['./send-file.component.scss'] styleUrls: ['./send-file.component.scss'],
}) })
export class SendFileComponent implements OnInit { export class SendFileComponent implements OnInit {
@Input() data: any;
@Input() data: any
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient) { } constructor() {}
datacopy datacopy;
ngOnInit(): void { ngOnInit(): void {
this.datacopy = JSON.parse(JSON.stringify(this.data)) this.datacopy = JSON.parse(JSON.stringify(this.data));
console.log(this.datacopy)
}
putConfig() {
} }
} }

8
src/app/system-management/image-label/image-label.component.html

@ -11,23 +11,23 @@
<button *ngIf="markType === 0 || markType === 2 " nz-button [ngClass]="{selectBtn: selectedBtn === '停车区'}" <button *ngIf="markType === 0 || markType === 2 " nz-button [ngClass]="{selectBtn: selectedBtn === '停车区'}"
(click)="selectedBtn = '停车区'">停车区 (click)="selectedBtn = '停车区'">停车区
<span class="deleteItem" (click)="clearCanvasItem($event,'isAllMonitoring')">删除</span> <span class="deleteItem" (click)="clearCanvasItem($event,'carStopROI')">删除</span>
</button> </button>
<button *ngIf="markType === 3" nz-button [ngClass]="{selectBtn: selectedBtn === '收银区'}" <button *ngIf="markType === 3" nz-button [ngClass]="{selectBtn: selectedBtn === '收银区'}"
(click)="selectedBtn = '收银区'">收银区 (click)="selectedBtn = '收银区'">收银区
<span class="deleteItem" (click)="clearCanvasItem($event,'isAllMonitoring')">删除</span> <span class="deleteItem" (click)="clearCanvasItem($event,'cashierROI')">删除</span>
</button> </button>
<button *ngIf="markType === 2" nz-button [ngClass]="{selectBtn: selectedBtn === '闯入区'}" <button *ngIf="markType === 2" nz-button [ngClass]="{selectBtn: selectedBtn === '闯入区'}"
(click)="selectedBtn = '闯入区'">闯入区 (click)="selectedBtn = '闯入区'">闯入区
<span class="deleteItem" (click)="clearCanvasItem($event,'isAllMonitoring')">删除</span> <span class="deleteItem" (click)="clearCanvasItem($event,'intrusionROI')">删除</span>
</button> </button>
<!-- 矩形 --> <!-- 矩形 -->
<button *ngIf="markType === 2" nz-button [ngClass]="{selectBtn: selectedBtn === '卸油区'}" <button *ngIf="markType === 2" nz-button [ngClass]="{selectBtn: selectedBtn === '卸油区'}"
(click)="selectedBtn = '卸油区'">卸油区 (click)="selectedBtn = '卸油区'">卸油区
<span class="deleteItem" (click)="clearCanvasItem($event,'isAllMonitoring')">删除</span> <span class="deleteItem" (click)="clearCanvasItem($event,'unloadingROI')">删除</span>
</button> </button>

196
src/app/system-management/image-label/image-label.component.ts

@ -33,12 +33,13 @@ export class ImageLabelComponent implements OnInit {
//获取 摄像头图片/标注点位 //获取 摄像头图片/标注点位
getImgMarkData() { getImgMarkData() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.http.get(`/api/Cameras/${this.cameraId}`).subscribe((info: any) => { this.http.get(`/api/Cameras/${this.cameraId}`).subscribe((data: any) => {
info.dimensionedPoints console.log(456, data);
? (info.dimensionedPoints = JSON.parse(info.dimensionedPoints)) // data.dimensionedPointsHuanghai
: null; // ? (data.dimensionedPointsHuanghai = JSON.parse(data.dimensionedPointsHuanghai))
this.camerasData = info; // : null;
this.markType = info.type; this.camerasData = data;
this.markType = data.type;
this.markType === 3 this.markType === 3
? (this.selectedBtn = '收银区') ? (this.selectedBtn = '收银区')
@ -91,7 +92,6 @@ export class ImageLabelComponent implements OnInit {
} }
//初始化背景图 //初始化背景图
canvas; canvas;
ctx; ctx;
@ -133,39 +133,51 @@ export class ImageLabelComponent implements OnInit {
//初始化标绘图形 //初始化标绘图形
initMark(canvas, context) { initMark(canvas, context) {
this.camerasData.dimensionedPointsOfHH = sessionStorage.getItem('xxx'); if (!this.camerasData.dimensionedPointsHuanghai) {
if (!this.camerasData.dimensionedPointsOfHH) {
return; return;
} else { } else {
this.camerasData.dimensionedPointsOfHH = JSON.parse( this.camerasData.dimensionedPointsHuanghai = JSON.parse(
this.camerasData.dimensionedPointsOfHH this.camerasData.dimensionedPointsHuanghai
); );
} }
console.log('原始标点数据', this.camerasData.dimensionedPointsOfHH); console.log('原始标点数据', this.camerasData.dimensionedPointsHuanghai);
//收银区
return; if (this.camerasData.dimensionedPointsHuanghai.cashierROI.length !== 0) {
//绘制停车区多边形 this.camerasData.dimensionedPointsHuanghai.cashierROI.forEach(
this.camerasData.dimensionedPointsOfHH.carStopROI.forEach((element) => { (element) => {
this.carStopROIDrawPolygon(element.x, element.y, canvas, context); this.cashierROIDrawPolygon(element.x, element.y, canvas, context);
}); }
);
}
//绘制收银区多边形 //停车区
this.camerasData.dimensionedPointsOfHH.cashierROI.forEach((element) => { if (this.camerasData.dimensionedPointsHuanghai.carStopROI.length !== 0) {
this.cashierROIDrawPolygon(element.x, element.y, canvas, context); this.camerasData.dimensionedPointsHuanghai.carStopROI.forEach(
}); (element) => {
this.carStopROIDrawPolygon(element.x, element.y, canvas, context);
}
);
}
//绘制闯入区多边形 //闯入区
this.camerasData.dimensionedPointsOfHH.intrusionROI.forEach((element) => { if (this.camerasData.dimensionedPointsHuanghai.intrusionROI.length !== 0) {
this.intrusionROIDrawPolygon(element.x, element.y, canvas, context); this.camerasData.dimensionedPointsHuanghai.intrusionROI.forEach(
}); (element) => {
this.intrusionROIDrawPolygon(element.x, element.y, canvas, context);
}
);
}
//绘制卸油区矩形 //绘制卸油区矩形
this.unloadingROIDrawOblong( if (this.camerasData.dimensionedPointsHuanghai.unloadingROI.length !== 0) {
this.camerasData.dimensionedPointsOfHH.unloadingROI, this.unloadingROIOblongPoints =
context this.camerasData.dimensionedPointsHuanghai.unloadingROI;
); this.unloadingROIDrawOblong(
this.camerasData.dimensionedPointsHuanghai.unloadingROI,
context
);
}
} }
markType: number = 0; //0=进出口,1=加油区,2=卸油区,3=便利店, markType: number = 0; //0=进出口,1=加油区,2=卸油区,3=便利店,
@ -625,7 +637,19 @@ export class ImageLabelComponent implements OnInit {
clearCanvas() { clearCanvas() {
let canvas = document.getElementById('canvas') as any; let canvas = document.getElementById('canvas') as any;
let context = canvas.getContext('2d'); let context = canvas.getContext('2d');
this.unloadingROIOblongPoints = []; //矩形的点的集合
//停车区多边形
this.carStopROIPoints = []; //线段的点的集合
this.carStopROICircles = []; //可拖动圆圈的点的集合
this.carStopROIAllpoints = []; //整体移动点位
//闯入区多边形
this.intrusionROIPoints = []; //线段的点的集合
this.intrusionROICircles = []; //可拖动圆圈的点的集合
this.intrusionROIAllpoints = []; //整体移动点位
//收银区多边形
this.cashierROIPoints = []; //线段的点的集合
this.cashierROICircles = []; //可拖动圆圈的点的集合
this.cashierROIAllpoints = []; //整体移动点位
context.clearRect(0, 0, canvas.width, canvas.height); context.clearRect(0, 0, canvas.width, canvas.height);
this.copyCanvas ? context.putImageData(this.copyCanvas, 0, 0) : null; this.copyCanvas ? context.putImageData(this.copyCanvas, 0, 0) : null;
} }
@ -639,21 +663,57 @@ export class ImageLabelComponent implements OnInit {
nzOkType: 'primary', nzOkType: 'primary',
nzOkDanger: true, nzOkDanger: true,
nzOnOk: () => { nzOnOk: () => {
// if (type == 'isAllMonitoring') { if (this.markType === 2) {
// //全局的多边形 //卸油区
// this.pointsOfmonitor = []; this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
// this.circlesOfmonitor = []; this.copyCanvas
// this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight); ? this.context.putImageData(this.copyCanvas, 0, 0)
// this.copyCanvas : null;
// ? this.context.putImageData(this.copyCanvas, 0, 0) if (type === 'carStopROI') {
// : null; this.carStopROIPoints = [];
// } this.carStopROICircles = [];
// this.initMark2(this.canvas, this.ctx); //初始化标绘图形 this.carStopROIAllpoints = [];
//重绘闯入和卸油
this.redrawAll();
}
if (type === 'intrusionROI') {
this.intrusionROIPoints = [];
this.intrusionROICircles = [];
this.intrusionROIAllpoints = [];
this.redrawAll();
}
if (type === 'unloadingROI') {
this.unloadingROIOblongPoints = [];
this.redrawAll();
}
} else {
this.clearCanvas();
}
}, },
nzCancelText: '取消', nzCancelText: '取消',
}); });
} }
redrawAll() {
this.redrawPolygon(
this.carStopROIPoints,
this.carStopROIAllpoints,
this.carStopROICircles,
this.context,
'green'
);
this.redrawPolygon(
this.intrusionROIPoints,
this.intrusionROIAllpoints,
this.intrusionROICircles,
this.context,
'red'
);
this.redrawRectangle(this.unloadingROIOblongPoints, this.context);
}
//根据已有数据重绘多边形 //根据已有数据重绘多边形
redrawPolygon(data, points, circles, context, color) { redrawPolygon(data, points, circles, context, color) {
data.forEach((element) => { data.forEach((element) => {
@ -699,9 +759,9 @@ export class ImageLabelComponent implements OnInit {
//保存 //保存
save() { save() {
console.log(this.camerasData.dimensionedPointsOfHH); console.log(this.camerasData.dimensionedPointsHuanghai);
if (!this.camerasData.dimensionedPointsOfHH) { if (!this.camerasData.dimensionedPointsHuanghai) {
this.camerasData.dimensionedPointsOfHH = { this.camerasData.dimensionedPointsHuanghai = {
carStopROI: [], carStopROI: [],
intrusionROI: [], intrusionROI: [],
cashierROI: [], cashierROI: [],
@ -714,7 +774,8 @@ export class ImageLabelComponent implements OnInit {
this.message.create('warning', '绘制完整后可保存!'); this.message.create('warning', '绘制完整后可保存!');
return; return;
} }
this.camerasData.dimensionedPointsOfHH.carStopROI = this.carStopROIPoints; this.camerasData.dimensionedPointsHuanghai.carStopROI =
this.carStopROIPoints;
} }
//卸油区 //卸油区
if (this.markType === 2) { if (this.markType === 2) {
@ -727,10 +788,11 @@ export class ImageLabelComponent implements OnInit {
return; return;
} }
this.camerasData.dimensionedPointsOfHH.carStopROI = this.carStopROIPoints; this.camerasData.dimensionedPointsHuanghai.carStopROI =
this.camerasData.dimensionedPointsOfHH.intrusionROI = this.carStopROIPoints;
this.camerasData.dimensionedPointsHuanghai.intrusionROI =
this.intrusionROIPoints; this.intrusionROIPoints;
this.camerasData.dimensionedPointsOfHH.unloadingROI = this.camerasData.dimensionedPointsHuanghai.unloadingROI =
this.unloadingROIOblongPoints; this.unloadingROIOblongPoints;
} }
//便利店 //便利店
@ -739,24 +801,26 @@ export class ImageLabelComponent implements OnInit {
this.message.create('warning', '绘制完整后可保存!'); this.message.create('warning', '绘制完整后可保存!');
return; return;
} }
this.camerasData.dimensionedPointsOfHH.cashierROI = this.cashierROIPoints; this.camerasData.dimensionedPointsHuanghai.cashierROI =
this.cashierROIPoints;
} }
// let paramsData = JSON.parse(JSON.stringify(this.camerasData)); let body = {
// paramsData.dimensionedPointsHH = JSON.stringify( dimensionedPointsHuanghai: JSON.stringify(
// paramsData.dimensionedPointsHH this.camerasData.dimensionedPointsHuanghai
// ); ),
console.log('标点结果', this.camerasData.dimensionedPointsOfHH); };
// this.http console.log('标点结果', this.camerasData.dimensionedPointsHuanghai);
// .put(`/api/Cameras/${this.camerasData.id}/DimensionedPoints`, paramsData) this.http
// .subscribe((data) => { .put(`/api/Cameras/${this.camerasData.id}/DimensionedPoints`, body)
// this.message.create('success', '保存成功!'); .subscribe((data) => {
// const isFullScreen = document.fullscreenElement; this.message.create('success', '保存成功!');
// if (document.exitFullscreen && isFullScreen) { const isFullScreen = document.fullscreenElement;
// //关闭全屏 if (document.exitFullscreen && isFullScreen) {
// document.exitFullscreen(); //关闭全屏
// } document.exitFullscreen();
// this.modal.closeAll(); }
// }); this.modal.closeAll();
});
} }
} }

2
src/app/system-management/system-management.module.ts

@ -46,6 +46,7 @@ import { ScriptComponent } from './status-monitoring/script/script.component';
import { VideoStreamingComponent } from './video-streaming/video-streaming.component'; import { VideoStreamingComponent } from './video-streaming/video-streaming.component';
import { DetailsComponent } from './video-streaming/details/details.component'; import { DetailsComponent } from './video-streaming/details/details.component';
import { NzRadioModule } from 'ng-zorro-antd/radio'; import { NzRadioModule } from 'ng-zorro-antd/radio';
import { HuangHaiConfigComponent } from './host-config/huang-hai-config/huang-hai-config.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
OrganizationComponent, OrganizationComponent,
@ -73,6 +74,7 @@ import { NzRadioModule } from 'ng-zorro-antd/radio';
ScriptComponent, ScriptComponent,
VideoStreamingComponent, VideoStreamingComponent,
DetailsComponent, DetailsComponent,
HuangHaiConfigComponent,
], ],
imports: [ imports: [
CommonModule, CommonModule,

Loading…
Cancel
Save