diff --git a/ogWebconsole/src/app/app.module.ts b/ogWebconsole/src/app/app.module.ts index c005cc9..d1f5901 100644 --- a/ogWebconsole/src/app/app.module.ts +++ b/ogWebconsole/src/app/app.module.ts @@ -113,6 +113,9 @@ import { SoftwareProfileComponent } from './components/software-profile/software import { CreateSoftwareProfileComponent } from './components/software-profile/create-software-profile/create-software-profile.component'; import { OperativeSystemComponent } from './components/operative-system/operative-system.component'; import { CreateOperativeSystemComponent } from './components/operative-system/create-operative-system/create-operative-system.component'; +import { ShowTemplateContentComponent } from './components/ogboot/pxe/show-template-content/show-template-content.component'; +import { AddClientsToPxeComponent } from './components/ogboot/pxe/add-clients-to-pxe/add-clients-to-pxe.component'; +import { ClientsComponent } from './components/ogboot/pxe/clients/clients.component'; @NgModule({ declarations: [ AppComponent, @@ -183,6 +186,9 @@ import { CreateOperativeSystemComponent } from './components/operative-system/cr CreateSoftwareProfileComponent, OperativeSystemComponent, CreateOperativeSystemComponent, + ShowTemplateContentComponent, + AddClientsToPxeComponent, + ClientsComponent, ], bootstrap: [AppComponent], imports: [BrowserModule, diff --git a/ogWebconsole/src/app/components/commands/commands-groups/commands-groups.component.ts b/ogWebconsole/src/app/components/commands/commands-groups/commands-groups.component.ts index 9952b25..d42db5b 100644 --- a/ogWebconsole/src/app/components/commands/commands-groups/commands-groups.component.ts +++ b/ogWebconsole/src/app/components/commands/commands-groups/commands-groups.component.ts @@ -74,13 +74,13 @@ export class CommandsGroupsComponent implements OnInit { openCreateCommandGroupModal(): void { this.dialog.open(CreateCommandGroupComponent, { - width: '600px', + width: '700px', }).afterClosed().subscribe(() => this.search()); } editCommandGroup(group: any): void { this.dialog.open(CreateCommandGroupComponent, { - width: '600px', + width: '700px', data: { group }, }).afterClosed().subscribe(() => this.search()); } diff --git a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css index 89c5670..3c87242 100644 --- a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css +++ b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css @@ -249,3 +249,13 @@ mat-card { border-radius: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } + +.red-card { + background-color: #f35f53; /* Color rojo */ + color: white; /* Texto en blanco */ +} + +.green-card { + background-color: #4caf50; /* Color verde */ + color: white; /* Texto en blanco */ +} diff --git a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.html b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.html index 927b763..f633b05 100644 --- a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.html +++ b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.html @@ -94,15 +94,23 @@ +
- + {{ result.name }} @@ -119,7 +127,7 @@

- +
diff --git a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.ts b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.ts index c5b8baa..13f4e67 100644 --- a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.ts +++ b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.ts @@ -20,6 +20,9 @@ import { AcctionsModalComponent } from '../../shared/acctions-modal/acctions-mod import {MatTableDataSource} from "@angular/material/table"; import {DatePipe} from "@angular/common"; import { Router } from '@angular/router'; +import { + CreatePxeBootFileComponent +} from "../../../ogboot/pxe-boot-files/create-pxeBootFile/create-pxe-boot-file/create-pxe-boot-file.component"; @Component({ @@ -257,10 +260,10 @@ export class AdvancedSearchComponent { onEditClick(event: MouseEvent, type: any, uuid: string): void { event.stopPropagation(); if (type != "client") { - const dialogRef = this.dialog.open(EditOrganizationalUnitComponent, { data: { uuid }, width: '700px'}); + const dialogRef = this.dialog.open(EditOrganizationalUnitComponent, { data: { uuid }, width: '900px'}); } else { console.log('Editar cliente'); - const dialogRef = this.dialog.open(EditClientComponent, { data: { uuid }, width: '700px' } ); + const dialogRef = this.dialog.open(EditClientComponent, { data: { uuid }, width: '900px' } ); } } @@ -397,7 +400,7 @@ export class AdvancedSearchComponent { this.isAllSelected = !this.isAllSelected; if (this.isAllSelected) { - this.selectedElements = this.filteredResults.map(result => result.uuid); + this.selectedElements = this.filteredResults.map(result => result['@id']); } else { this.selectedElements = []; } @@ -412,9 +415,14 @@ export class AdvancedSearchComponent { const dialogRef = this.dialog.open(AcctionsModalComponent, { data: { selectedElements: this.selectedElements }, width: '700px'}); } + onPxeBootFile(): void { + const dialog = this.dialog.open(CreatePxeBootFileComponent, { data: this.selectedElements, width: '400px' }); + dialog.afterClosed().subscribe(() => { + this.dialog.closeAll(); + }); + } - - onDobleClick(event: MouseEvent, data: any, type: string): void { + onDobleClick(event: MouseEvent, data: any, type: string): void { if (type === 'client') { this.router.navigate(['client', data]); } diff --git a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css index 63f11ba..53aec3e 100644 --- a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css +++ b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css @@ -26,6 +26,7 @@ } .mat-elevation-z8 { + margin-top: 30px; box-shadow: 0px 0px 0px rgba(0,0,0,0.2); } @@ -42,3 +43,22 @@ button{ margin-left: 10px; } + +.client-info { + display: flex; + flex-direction: column; + gap: 3px; + margin: 5px; +} + +.client-name { + font-size: 16px; + font-weight: bold; +} + +.client-ip, +.client-mac { + font-size: 12px; + color: #666; + line-height: 1.5; +} diff --git a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html index 46af9fb..7782e86 100644 --- a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html +++ b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html @@ -37,9 +37,21 @@ - diff --git a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts index 8f57814..2f5ca11 100644 --- a/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts +++ b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts @@ -44,16 +44,6 @@ export class ClientTabViewComponent { header: 'Nombre del cliente', cell: (client: any) => `${client.name}` }, - { - columnDef: 'ip', - header: 'IP', - cell: (client: any) => `${client.ip}` - }, - { - columnDef: 'mac', - header: 'Mac', - cell: (client: any) => `${client.mac}` - }, { columnDef: 'status', header: 'Estado', @@ -62,13 +52,23 @@ export class ClientTabViewComponent { { columnDef: 'organizationalUnit', header: 'Pertenece a', - cell: (client: any) => `${client.organizationalUnit.name}` + cell: (client: any) => `${client.organizationalUnit?.name}` }, { columnDef: 'ogLive', header: 'OgLive', cell: (client: any) => `${client.ogLive?.name}` }, + { + columnDef: 'subnet', + header: 'Subred', + cell: (client: any) => `${client.subnet}` + }, + { + columnDef: 'template', + header: 'Plantilla PXE', + cell: (client: any) => `${client.template?.name}` + }, ]; displayedColumns = [...this.columns.map(column => column.columnDef), 'actions']; diff --git a/ogWebconsole/src/app/components/groups/components/organizational-unit-tab-view/organizational-unit-tab-view.component.html b/ogWebconsole/src/app/components/groups/components/organizational-unit-tab-view/organizational-unit-tab-view.component.html index 79154e2..be72d15 100644 --- a/ogWebconsole/src/app/components/groups/components/organizational-unit-tab-view/organizational-unit-tab-view.component.html +++ b/ogWebconsole/src/app/components/groups/components/organizational-unit-tab-view/organizational-unit-tab-view.component.html @@ -17,8 +17,8 @@ Tipo Todos - Unidad organizativa - Grupos de aulas + Centro + Grupos de aulas Aula Grupos de PCs @@ -28,13 +28,16 @@ diff --git a/ogWebconsole/src/app/components/groups/groups.component.css b/ogWebconsole/src/app/components/groups/groups.component.css index 7ef2f9d..75ece2f 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.css +++ b/ogWebconsole/src/app/components/groups/groups.component.css @@ -72,11 +72,10 @@ mat-card-subtitle a:hover { .groups-button-row { display: flex; flex-grow: 1; -} - -button { - margin-left: 10px; + gap: 10px; margin-bottom: 20px; + margin-left: 10px; + margin-top: 10px; } .item-content { diff --git a/ogWebconsole/src/app/components/groups/groups.component.html b/ogWebconsole/src/app/components/groups/groups.component.html index e0ce288..3ef2f06 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.html +++ b/ogWebconsole/src/app/components/groups/groups.component.html @@ -1,4 +1,4 @@ - +

Administrar grupos

@@ -9,12 +9,6 @@
- - Búsqueda - - search - Pulsar 'enter' para buscar entre las unidades organizativas -
@@ -115,7 +109,7 @@ help_outline {{child.name}} - +
more_vert - +
@@ -147,13 +141,13 @@
- + - + - +
diff --git a/ogWebconsole/src/app/components/groups/groups.component.ts b/ogWebconsole/src/app/components/groups/groups.component.ts index 1e65b69..4161745 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.ts +++ b/ogWebconsole/src/app/components/groups/groups.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, OnInit, ViewChild} from '@angular/core'; import { DataService } from './services/data.service'; import { ClientCollection, UnidadOrganizativa } from './model/model'; import { MatDialog } from '@angular/material/dialog'; @@ -19,6 +19,12 @@ import { SaveFiltersDialogComponent } from './shared/save-filters-dialog/save-fi import { AcctionsModalComponent } from './shared/acctions-modal/acctions-modal.component'; import {MatTableDataSource} from "@angular/material/table"; import {DatePipe} from "@angular/common"; +import {AdvancedSearchComponent} from "./components/advanced-search/advanced-search.component"; +import {MatTabChangeEvent} from "@angular/material/tabs"; +import {ClientTabViewComponent} from "./components/client-tab-view/client-tab-view.component"; +import { + OrganizationalUnitTabViewComponent +} from "./components/organizational-unit-tab-view/organizational-unit-tab-view.component"; @Component({ selector: 'app-groups', @@ -69,6 +75,22 @@ export class GroupsComponent implements OnInit { this.getFilters(); } + @ViewChild('clientTab') clientTabComponent!: ClientTabViewComponent; + @ViewChild('organizationalUnitTab') organizationalUnitTabComponent!: OrganizationalUnitTabViewComponent; + + onTabChange(event: MatTabChangeEvent) { + switch (event.index) { + case 2: + this.clientTabComponent.search(); + break; + case 3: + this.organizationalUnitTabComponent.search(); + break; + default: + break; + } + } + getFilters(): void { this.dataService.getFilters().subscribe( data => { @@ -257,9 +279,9 @@ export class GroupsComponent implements OnInit { onEditClick(event: MouseEvent, type: any, uuid: string): void { event.stopPropagation(); if (type != "client") { - const dialogRef = this.dialog.open(EditOrganizationalUnitComponent, { data: { uuid }, width: '700px'}); + const dialogRef = this.dialog.open(EditOrganizationalUnitComponent, { data: { uuid }, width: '900px'}); } else { - const dialogRef = this.dialog.open(EditClientComponent, { data: { uuid }, width: '700px' } ); + const dialogRef = this.dialog.open(EditClientComponent, { data: { uuid }, width: '900px' } ); } } diff --git a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.css b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.css index 80b1d70..5b613c8 100644 --- a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.css +++ b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.css @@ -1,14 +1,13 @@ +/* Contenedor de los botones, organizados en 2 columnas */ .button-container { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 10px; - margin: 20px; } - - .button-row { - display: contents; - } - - .button-action { - width: 100%; - } - \ No newline at end of file + display: grid; + grid-template-columns: 1fr 1fr; /* 2 columnas iguales */ + gap: 15px; /* Espacio entre los botones */ + margin-top: 15px; +} + +/* Opcional: ancho 100% para los botones */ +.button-action { + width: 100%; + justify-self: stretch; /* Asegura que los botones se extiendan por toda la columna */ +} diff --git a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.html b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.html index 393ae5d..b61e8e7 100644 --- a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.html +++ b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.html @@ -1,14 +1,14 @@

Acciones

-
-
+ + +
- -
+ diff --git a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.ts b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.ts index 6143cff..fdc4435 100644 --- a/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.ts +++ b/ogWebconsole/src/app/components/groups/shared/acctions-modal/acctions-modal.component.ts @@ -16,12 +16,20 @@ export class AcctionsModalComponent { selectedElements: any; commands: any[] = []; displayedColumns: string[] = ['name', 'createdBy', 'createdAt']; + filteredCommands = [...this.commands]; private apiUrl = `${this.baseUrl}/commands?page=1&itemsPerPage=40`; ngOnInit(): void { this.loadCommands(); } + applyFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value.toLowerCase(); + this.filteredCommands = this.commands.filter(command => + command.name.toLowerCase().includes(filterValue) + ); + } + loadCommands(): void { this.http.get(this.apiUrl).subscribe( (data) => { @@ -57,11 +65,4 @@ export class AcctionsModalComponent { } - chunkArray(arr: any[], chunkSize: number): any[] { - const chunks = []; - for (let i = 0; i < arr.length; i += chunkSize) { - chunks.push(arr.slice(i, i + chunkSize)); - } - return chunks; - } } diff --git a/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.html b/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.html index f6c7379..af7b2e6 100644 --- a/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.html +++ b/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.html @@ -65,9 +65,12 @@ - Menú URL - - Formato de URL inválido. + Plantilla PXE + + + {{ template.name }} + + diff --git a/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.ts b/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.ts index caff56c..5b572aa 100644 --- a/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.ts +++ b/ogWebconsole/src/app/components/groups/shared/clients/create-client/create-client.component.ts @@ -16,7 +16,8 @@ export class CreateClientComponent implements OnInit { clientForm!: FormGroup; parentUnits: any[] = []; hardwareProfiles: any[] = []; - ogLives: any[] = []; + ogLives: any[] = []; + templates: any[] = []; private errorForm: boolean = false; protected netifaceTypes = [ { "name": 'Eth0', "value": "eth0" }, @@ -42,7 +43,8 @@ export class CreateClientComponent implements OnInit { console.log(this.data); this.loadParentUnits(); this.loadHardwareProfiles(); - this.loadOgLives(); + this.loadOgLives(); + this.loadPxeTemplates() this.clientForm = this.fb.group({ organizationalUnit: [this.data.organizationalUnit ? this.data.organizationalUnit['@id'] : null, Validators.required], name: ['', Validators.required], @@ -51,9 +53,9 @@ export class CreateClientComponent implements OnInit { netDriver: null, mac: ['', Validators.required], ip: ['', Validators.required], - menu: [this.data.organizationalUnit && this.data.organizationalUnit.networkSettings && this.data.organizationalUnit.networkSettings.menu ? this.data.organizationalUnit.networkSettings.menu['@id'] : null], + template: [null], hardwareProfile: [this.data.organizationalUnit && this.data.organizationalUnit.networkSettings && this.data.organizationalUnit.networkSettings.hardwareProfile ? this.data.organizationalUnit.networkSettings.hardwareProfile['@id'] : null], - ogLive: [null] + ogLive: [null] }); } @@ -87,7 +89,7 @@ export class CreateClientComponent implements OnInit { } loadOgLives() { - + const url = `${this.baseUrl}/og-lives?page=1&itemsPerPage=30`; this.http.get(url).subscribe( response => { @@ -99,11 +101,24 @@ export class CreateClientComponent implements OnInit { ); } + loadPxeTemplates(): void { + const url = `${this.baseUrl}/pxe-templates?page=1&itemsPerPage=10000`; + + this.http.get(url).subscribe( + response => { + this.templates = response['hydra:member']; + }, + error => { + console.error('Error fetching ogLives:', error); + } + ); + } + onSubmit() { if (this.clientForm.valid) { this.errorForm = false; const formData = this.clientForm.value; - formData.ogLive = formData.ogLive; + formData.ogLive = formData.ogLive; this.http.post(`${this.baseUrl}/clients`, formData).subscribe( response => { this.dialogRef.close(response); diff --git a/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.html b/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.html index add15b9..30ec146 100644 --- a/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.html +++ b/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.html @@ -62,9 +62,12 @@ - Menú URL - - Formato de URL inválido. + Plantilla PXE + + + {{ template.name }} + + diff --git a/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.ts b/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.ts index 6c759a3..7298966 100644 --- a/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.ts +++ b/ogWebconsole/src/app/components/groups/shared/clients/edit-client/edit-client.component.ts @@ -14,10 +14,11 @@ import { ToastrService } from 'ngx-toastr'; export class EditClientComponent { baseUrl: string = import.meta.env.NG_APP_BASE_API_URL; clientForm!: FormGroup; - parentUnits: any[] = []; - hardwareProfiles: any[] = []; - ogLives: any[] = []; - isEditMode: boolean; + parentUnits: any[] = []; + hardwareProfiles: any[] = []; + ogLives: any[] = []; + templates: any[] = []; + isEditMode: boolean; protected netifaceTypes = [ { "name": 'Eth0', "value": "eth0" }, { "name": 'Eth1', "value": "eth1" }, @@ -34,18 +35,19 @@ export class EditClientComponent { private http: HttpClient, private dataService: DataService, private toastService: ToastrService, - @Inject(MAT_DIALOG_DATA) public data: any + @Inject(MAT_DIALOG_DATA) public data: any ) { - this.isEditMode = !!data?.uuid; + this.isEditMode = !!data?.uuid; if (this.isEditMode) { this.loadData(data.uuid); } } ngOnInit(): void { - this.loadParentUnits(); - this.loadHardwareProfiles(); - this.loadOgLives(); + this.loadParentUnits(); + this.loadHardwareProfiles(); + this.loadOgLives(); + this.loadPxeTemplates() this.clientForm = this.fb.group({ organizationalUnit: [null, Validators.required], name: ['', Validators.required], @@ -54,9 +56,9 @@ export class EditClientComponent { netDriver: null, mac: null, ip: null, - menu: null, + template: null, hardwareProfile: null, - ogLive: null, + ogLive: null, }); } @@ -97,6 +99,19 @@ export class EditClientComponent { ); } + loadPxeTemplates(): void { + const url = `${this.baseUrl}/pxe-templates?page=1&itemsPerPage=10000`; + + this.http.get(url).subscribe( + response => { + this.templates = response['hydra:member']; + }, + error => { + console.error('Error fetching ogLives:', error); + } + ); + } + loadData(uuid: string) { this.loading = true; const url = `${this.baseUrl}/clients/${uuid}`; @@ -112,7 +127,8 @@ export class EditClientComponent { serialNumber: data.serialNumber, hardwareProfile: data.hardwareProfile ? data.hardwareProfile['@id'] : null, organizationalUnit: data.organizationalUnit ? data.organizationalUnit['@id'] : null, - ogLive: data.ogLive ? data.ogLive['@id'] : null, + ogLive: data.ogLive ? data.ogLive['@id'] : null, + template: data.template ? data.template['@id'] : null, }); this.loading = false; }, diff --git a/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.html b/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.html index 8f97427..df76f0e 100644 --- a/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.html +++ b/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.html @@ -81,7 +81,7 @@ - +
Configuración de Red @@ -156,14 +156,11 @@ Formato de URL inválido. -
- - -
-
+
+
diff --git a/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.ts b/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.ts index a0b7089..bffb4a9 100644 --- a/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.ts +++ b/ogWebconsole/src/app/components/groups/shared/organizational-units/create-organizational-unit/create-organizational-unit.component.ts @@ -19,7 +19,7 @@ export class CreateOrganizationalUnitComponent implements OnInit { classroomInfoFormGroup: FormGroup; types: string[] = ['organizational-unit', 'classrooms-group', 'classroom', 'clients-group']; typeTranslations: { [key: string]: string } = { - 'organizational-unit': 'Unidad organizativa', + 'organizational-unit': 'Centro', 'classrooms-group': 'Grupo de aulas', 'classroom': 'Aula', 'clients-group': 'Grupo de clientes' diff --git a/ogWebconsole/src/app/components/groups/shared/tree-view/tree-view.component.html b/ogWebconsole/src/app/components/groups/shared/tree-view/tree-view.component.html index e15be5b..1cf2ee4 100644 --- a/ogWebconsole/src/app/components/groups/shared/tree-view/tree-view.component.html +++ b/ogWebconsole/src/app/components/groups/shared/tree-view/tree-view.component.html @@ -51,6 +51,6 @@ - +
{{ column.header }} - - {{ column.cell(image) }} + + +
+
{{ client.name }}
+
{{ client.ip }}
+
{{ client.mac }}
+
+
+ + + {{ client.status }} + + + + {{ column.cell(client) }}
{{ column.header }} - + {{ column.cell(ou) }} check close + + {{ ou.type }} +