Browse Source

[新增]增加按钮和页面

develop
邵佳豪 3 years ago
parent
commit
5da8971a7e
  1. 4
      src/app/system-management/condition-monitoring/condition-monitoring.component.html
  2. 60
      src/app/system-management/condition-monitoring/condition-monitoring.component.ts
  3. 28
      src/app/system-management/condition-monitoring/file/file.component.html
  4. 0
      src/app/system-management/condition-monitoring/file/file.component.scss
  5. 26
      src/app/system-management/condition-monitoring/file/file.component.ts
  6. 2
      src/app/system-management/host-config/host-config.component.ts
  7. 1
      src/app/system-management/kafka/kafka.component.html
  8. 0
      src/app/system-management/kafka/kafka.component.scss
  9. 15
      src/app/system-management/kafka/kafka.component.ts
  10. 15
      src/app/system-management/navigation/navigation.component.html
  11. 92
      src/app/system-management/status-monitoring/status-monitoring.component.html
  12. 17
      src/app/system-management/status-monitoring/status-monitoring.component.scss
  13. 171
      src/app/system-management/status-monitoring/status-monitoring.component.ts
  14. 4
      src/app/system-management/system-management-routing.module.ts
  15. 7
      src/app/system-management/system-management.module.ts

4
src/app/system-management/condition-monitoring/condition-monitoring.component.html

@ -62,6 +62,10 @@
[nzLoading]="loading == 'primary'" (click)="sendRequest('UpdateMonitors')">
更新监控程序
</button>
<button nz-button nzType="primary" type="button" [disabled]="setOfCheckedId.size === 0"
[nzLoading]="loading == 'file'" (click)="file()">
更新监控程序配置文件
</button>
</form>
</div>

60
src/app/system-management/condition-monitoring/condition-monitoring.component.ts

@ -4,6 +4,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal';
import { TreeService } from 'src/app/service/tree.service';
import { FileComponent } from './file/file.component';
import { ModelComponent } from './model/model.component';
@Component({
selector: 'app-condition-monitoring',
@ -78,7 +79,7 @@ export class ConditionMonitoringComponent implements OnInit {
OrganizationId: this.defaultOrId,
PageNumber: this.PageNumber,
PageSize: 10,
HubConnectionState:this.validateForm.value.state
HubConnectionState: this.validateForm.value.state
}
this.isLoading = true
this.http.get('/api/EdgeDevices/Statuses', { params: params }).subscribe(
@ -167,10 +168,8 @@ export class ConditionMonitoringComponent implements OnInit {
}
})
} else {
const modal = this.modal.create({
nzTitle: '选择更模型类型',
nzTitle: '选择更新模型类型',
nzContent: ModelComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 288,
@ -212,8 +211,59 @@ export class ConditionMonitoringComponent implements OnInit {
}
});
const instance = modal.getContentComponent();
}
}
file() {
const requestData = this.listOfData.filter(data => this.setOfCheckedId.has(data.id));
let strArr = []
requestData.forEach(element => {
strArr.push(element.id)
});
const modal = this.modal.create({
nzTitle: '配置文件',
nzContent: FileComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 388,
nzComponentParams: {},
nzOnOk: async () => {
if (instance.validateForm.valid) {
let body = {
edgeDeviceIds: strArr,
scheme: instance.validateForm.value.scheme,
host: instance.validateForm.value.host,
port: instance.validateForm.value.port
}
await new Promise(resolve => {
this.loading = 'file'
this.http.patch('/api/EdgeDevices/Commands/PushMonitorSettingsJson', body).subscribe({
next: (data: any) => {
this.message.create('success', '通知边缘盒子成功,请过一段时间手动刷新尝试!');
// console.log(data)
if (data.failedItems.length != 0) {
data.failedItems.forEach(element => {
this.message.create('info', element.detail);
});
}
this.setOfCheckedId.clear();
this.refreshCheckedStatus();
this.getConditionMonitoring()
this.loading = null;
},
error: (err) => {
this.loading = null;
}
})
})
} else {
this.message.create('warning', '请填写完整!');
return false
}
}
});
const instance = modal.getContentComponent();
}
}

28
src/app/system-management/condition-monitoring/file/file.component.html

@ -0,0 +1,28 @@
<div class="box">
<form nz-form [formGroup]="validateForm">
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="scheme">协议</nz-form-label>
<nz-form-control>
<nz-input-group>
<input nz-input type="text" formControlName="scheme" placeholder="请输入协议" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="host">主机/ip</nz-form-label>
<nz-form-control>
<nz-input-group>
<input nz-input type="text" formControlName="host" placeholder="请输入主机/ip" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="port">端口</nz-form-label>
<nz-form-control>
<nz-input-group>
<input type="number" nz-input formControlName="port" placeholder="请输入端口" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
</form>
</div>

0
src/app/system-management/condition-monitoring/file/file.component.scss

26
src/app/system-management/condition-monitoring/file/file.component.ts

@ -0,0 +1,26 @@
import { Component, OnInit } from '@angular/core';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-file',
templateUrl: './file.component.html',
styleUrls: ['./file.component.scss']
})
export class FileComponent implements OnInit {
validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient) { }
ngOnInit(): void {
this.validateForm = this.fb.group({
scheme: [null, [Validators.required]],
host: [null, [Validators.required]],
port: [null, [Validators.required]]
});
}
destroyModal(): void {
this.modal.destroy({ data: 'this the result data' });
}
}

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

@ -441,7 +441,7 @@ tracker:
analytics:
config: 'config/config_nvdsanalytics.txt'
peoplenet:
enable: true
apply_on: -1

1
src/app/system-management/kafka/kafka.component.html

@ -0,0 +1 @@
<p>kafka works!</p>

0
src/app/system-management/kafka/kafka.component.scss

15
src/app/system-management/kafka/kafka.component.ts

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-kafka',
templateUrl: './kafka.component.html',
styleUrls: ['./kafka.component.scss']
})
export class KafkaComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}

15
src/app/system-management/navigation/navigation.component.html

@ -13,9 +13,16 @@
</div>
<div class="nav">
<ul>
<li [routerLink]="['/system/organization']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/organization.png" alt="">组织机构管理</li>
<li [routerLink]="['/system/host']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/host.png" alt="">边缘盒子管理</li>
<li [routerLink]="['/system/conditionMonitoring']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/push.png" alt="">边缘盒子监控</li>
<li [routerLink]="['/system/organization']" routerLinkActive="router-link-active"><img
src="../../../assets/images/icon/organization.png" alt="">组织机构管理</li>
<li [routerLink]="['/system/host']" routerLinkActive="router-link-active"><img
src="../../../assets/images/icon/host.png" alt="">边缘盒子管理</li>
<li [routerLink]="['/system/conditionMonitoring']" routerLinkActive="router-link-active"><img
src="../../../assets/images/icon/push.png" alt="">边缘盒子更新</li>
<li [routerLink]="['/system/statusMonitoring']" routerLinkActive="router-link-active"><img
src="../../../assets/images/icon/push.png" alt="">边缘盒子监控</li>
<li [routerLink]="['/system/kafka']" routerLinkActive="router-link-active"><img
src="../../../assets/images/icon/push.png" alt="">kafka检查</li>
</ul>
</div>
</nz-sider>
@ -35,4 +42,4 @@
<router-outlet></router-outlet>
</nz-content>
</nz-layout>
</nz-layout>
</nz-layout>

92
src/app/system-management/status-monitoring/status-monitoring.component.html

@ -0,0 +1,92 @@
<div class="box">
<div class="topbox">
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<nz-form-item class="searchParams">
<nz-form-control>
<nz-tree-select [nzAllowClear]="false" [nzDropdownClassName]="'maxHeightTreeSelect'" nzShowSearch
formControlName="organization" [nzNodes]="nodes" nzPlaceHolder="请选择所属机构"
[(ngModel)]="defaultOrId" [nzExpandedIcon]="multiExpandedIconTpl">
</nz-tree-select>
<ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate">
</ng-container>
<ng-template #elseTemplate>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'"
class="ant-tree-switcher-line-icon"></i>
</ng-template>
</ng-template>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<!-- <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="state">设备状态</nz-form-label> -->
<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="btn">
<nz-form-control>
<button nz-button nzType="primary" 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>
<button nz-button nzType="primary" type="button" [disabled]="setOfCheckedId.size === 0"
[nzLoading]="loading == 'primary'" (click)="sendRequest('RestartApps')">
重启识别程序
</button>
<button nz-button nzType="primary" type="button" [disabled]="setOfCheckedId.size === 0"
[nzLoading]="loading == 'primary'" (click)="sendRequest('RestartMonitors')">
重启监控程序
</button>
</form>
</div>
<nz-table #basicTable nzShowSizeChanger [nzData]="listOfData" [nzLoading]="isLoading"
(nzCurrentPageDataChange)="onCurrentPageDataChange($event)" [nzShowPagination]='false' [nzPageSize]='10'>
<thead>
<tr>
<th [nzChecked]="checked" [nzIndeterminate]="indeterminate" (nzCheckedChange)="onAllChecked($event)">
</th>
<th>ip地址</th>
<th>所属油站</th>
<th>设备状态</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of basicTable.data">
<td [nzChecked]="setOfCheckedId.has(data.id)" [nzDisabled]="data.disabled"
(nzCheckedChange)="onItemChecked(data.id, $event)"></td>
<td>{{ data.hostIPAddress }}</td>
<td>{{ data.gasStationName }}</td>
<td>
<ng-container *ngIf="data.hubConnectionState == 'Disconnected'; else elseTemplate">
<span style="color: red;">离线</span>
</ng-container>
<ng-template #elseTemplate>
<span style="color: rgb(52, 204, 52);">在线</span>
</ng-template>
</td>
</tr>
</tbody>
</nz-table>
<div class="pagination">
<nz-pagination [nzHideOnSinglePage]="false" [nzPageIndex]="1" [nzTotal]="num" [nzPageSize]="10"
[nzShowTotal]="totalTemplate" nzShowQuickJumper (nzPageIndexChange)="pageChange($event)">
</nz-pagination>
<ng-template #totalTemplate let-total> 10条/页,共{{num}}条 </ng-template>
</div>
</div>

17
src/app/system-management/status-monitoring/status-monitoring.component.scss

@ -0,0 +1,17 @@
.topbox {
form {
display: flex;
nz-form-item {
margin-right: 6px;
}
button {
margin-right: 6px;
}
}
.searchParams {
width: 250px;
}
}

171
src/app/system-management/status-monitoring/status-monitoring.component.ts

@ -0,0 +1,171 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit, ViewContainerRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal';
import { TreeService } from 'src/app/service/tree.service';
@Component({
selector: 'app-status-monitoring',
templateUrl: './status-monitoring.component.html',
styleUrls: ['./status-monitoring.component.scss']
})
export class StatusMonitoringComponent implements OnInit {
constructor(private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private message: NzMessageService, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { }
validateForm!: FormGroup;
ngOnInit(): void {
this.validateForm = this.fb.group({
organization: [null],
state: [null]
});
this.getAllOrganization()
}
//获取所有组织机构
nodes: any = []
defaultOrId: string
defaultExpandedKeys = [];
getAllOrganization() {
let params = {
ContainsChildren: true,
pageSize: 9999
}
this.http.get('/api/Organizations', {
params: params
}).subscribe((data: any) => {
console.log('组织机构列表', data)
data.items.forEach(element => {
element.key = element.id
element.title = element.name
// element.selectable = false
});
this.nodes = [...this.toTree.toTree(data.items)]
this.defaultOrId = this.nodes[0].id
this.validateForm.value.organization = this.defaultOrId
this.getConditionMonitoring()
})
}
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
this.getConditionMonitoring()
}
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: this.nodes[0].id,
});
this.PageNumber = 1
this.getConditionMonitoring()
}
listOfData: any
num: string
PageNumber: number = 1
isLoading = false
//获取盒子状态
getConditionMonitoring() {
let params = {
ContainsChildren: true,
OrganizationId: this.defaultOrId,
PageNumber: this.PageNumber,
PageSize: 10,
HubConnectionState: this.validateForm.value.state
}
this.isLoading = true
this.http.get('/api/EdgeDevices/Statuses', { params: params }).subscribe(
(data: any) => {
console.log(data)
this.isLoading = false
this.listOfData = data.items
this.num = data.totalCount
}, err => {
}
)
}
pageChange($event) {
this.PageNumber = $event
this.getConditionMonitoring()
}
checked = false;
loading
indeterminate = false;
listOfCurrentPageData: readonly any[] = [];
setOfCheckedId = new Set<number>();
updateCheckedSet(id: number, 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.every(({ id }) => this.setOfCheckedId.has(id));
this.indeterminate = listOfEnabledData.some(({ id }) => this.setOfCheckedId.has(id)) && !this.checked;
}
onItemChecked(id: number, 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();
}
sendRequest(type): void {
const requestData = this.listOfData.filter(data => this.setOfCheckedId.has(data.id));
let strArr = []
requestData.forEach(element => {
strArr.push(element.id)
});
let body
this.loading = type;
body = {
edgeDeviceIds: strArr
}
this.http.patch('/api/EdgeDevices/Commands', body, { params: { command: type } }).subscribe({
next: (data: any) => {
this.message.create('success', '通知边缘盒子成功,请过一段时间手动刷新尝试!');
console.log(data)
if (data.failedItems.length != 0) {
data.failedItems.forEach(element => {
this.message.create('info', element.detail);
});
}
this.setOfCheckedId.clear();
this.refreshCheckedStatus();
this.loading = null;
this.getConditionMonitoring()
},
error: (err) => {
this.loading = null;
}
})
}
}

4
src/app/system-management/system-management-routing.module.ts

@ -8,6 +8,8 @@ import { PlottingImageComponent } from './plotting-image/plotting-image.componen
import { ImageLabel2Component } from './image-label2/image-label2.component';
import { ConfigFormComponent } from './config-form/config-form.component';
import { ConditionMonitoringComponent } from './condition-monitoring/condition-monitoring.component';
import { KafkaComponent } from './kafka/kafka.component';
import { StatusMonitoringComponent } from './status-monitoring/status-monitoring.component';
const routes: Routes = [
@ -19,6 +21,8 @@ const routes: Routes = [
{ path: 'host/camera/configForm', component: ConfigFormComponent },
{ path: 'plottingImage', component: PlottingImageComponent },
{ path: 'conditionMonitoring', component: ConditionMonitoringComponent },
{ path: 'statusMonitoring', component: StatusMonitoringComponent },
{ path: 'kafka', component: KafkaComponent }
];
@NgModule({

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

@ -39,8 +39,11 @@ import { NzTabsModule } from 'ng-zorro-antd/tabs';
import { ConditionMonitoringComponent } from './condition-monitoring/condition-monitoring.component';
import { SendFileComponent } from './host-config/send-file/send-file.component';
import { ModelComponent } from './condition-monitoring/model/model.component';
import { KafkaComponent } from './kafka/kafka.component';
import { StatusMonitoringComponent } from './status-monitoring/status-monitoring.component';
import { FileComponent } from './condition-monitoring/file/file.component';
@NgModule({
declarations: [OrganizationComponent, NavigationComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, HostConfigComponent, ImageListComponent, ImageLabelComponent, PlottingImageComponent, cameraType, ImageLabel2Component, ConfigFormComponent, ConditionMonitoringComponent, SendFileComponent, ModelComponent],
declarations: [OrganizationComponent, NavigationComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, HostConfigComponent, ImageListComponent, ImageLabelComponent, PlottingImageComponent, cameraType, ImageLabel2Component, ConfigFormComponent, ConditionMonitoringComponent, SendFileComponent, ModelComponent, KafkaComponent, StatusMonitoringComponent, FileComponent],
imports: [
CommonModule,
SystemRoutingModule,
@ -65,7 +68,7 @@ import { ModelComponent } from './condition-monitoring/model/model.component';
NzTabsModule,
NzPopconfirmModule
],
entryComponents: [AddorComponent, EditorComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, SendFileComponent, ModelComponent]
entryComponents: [AddorComponent, EditorComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, SendFileComponent, ModelComponent, FileComponent]
})
export class SystemManagementModule { }

Loading…
Cancel
Save