diff --git a/ogWebconsole/src/app/app.module.ts b/ogWebconsole/src/app/app.module.ts index 0b7ed93..3f5dde5 100644 --- a/ogWebconsole/src/app/app.module.ts +++ b/ogWebconsole/src/app/app.module.ts @@ -97,8 +97,7 @@ import { CreateCommandGroupComponent } from './components/commands/commands-grou import { DetailCommandGroupComponent } from './components/commands/commands-groups/detail-command-group/detail-command-group.component'; import { CreateTaskComponent } from './components/commands/commands-task/create-task/create-task.component'; import { DetailTaskComponent } from './components/commands/commands-task/detail-task/detail-task.component'; -import { ClientTabViewComponent } from './components/groups/shared/client-tab-view/client-tab-view.component'; -import { AdminGeneralComponent } from './components/groups/components/admin-general/admin-general.component'; +import { ClientTabViewComponent } from './components/groups/components/client-tab-view/client-tab-view.component'; import { AdvancedSearchComponent } from './components/groups/components/advanced-search/advanced-search.component'; @NgModule({ declarations: [ @@ -155,7 +154,6 @@ import { AdvancedSearchComponent } from './components/groups/components/advanced CreateTaskComponent, DetailTaskComponent, ClientTabViewComponent, - AdminGeneralComponent, AdvancedSearchComponent ], bootstrap: [AppComponent], diff --git a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.css b/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.html b/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.html deleted file mode 100644 index 8ead471..0000000 --- a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.html +++ /dev/null @@ -1 +0,0 @@ -

admin-general works!

diff --git a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.spec.ts b/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.spec.ts deleted file mode 100644 index ef42d9a..0000000 --- a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AdminGeneralComponent } from './admin-general.component'; - -describe('AdminGeneralComponent', () => { - let component: AdminGeneralComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AdminGeneralComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AdminGeneralComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.ts b/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.ts deleted file mode 100644 index ae28976..0000000 --- a/ogWebconsole/src/app/components/groups/components/admin-general/admin-general.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-admin-general', - templateUrl: './admin-general.component.html', - styleUrl: './admin-general.component.css' -}) -export class AdminGeneralComponent { - -} 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 e69de29..e8d68a8 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 @@ -0,0 +1,202 @@ +.groupLists-container { + display: flex; + flex-wrap: wrap; + height: auto; + margin-bottom: 30px; + } + + .search-container { + display: flex; + flex-grow: 1; + margin: 10px; + } + + .search-container mat-form-field { + width: 50%; + } + + .card { + flex-grow: 1; + margin: 10px; + } + + .header-container { + height: 100px; + } + + .unidad-card, .elements-card { + flex: 1 1 45%; + background-color: #fafafa; + height: 600px; + overflow-y: auto; + } + + .element-content { + overflow-y: auto; + } + + .title { + margin-left: 10px; + } + + .details-card, .classroom-view { + flex: 1 1 25%; + } + + mat-card-title { + display: flex; + justify-content: space-between; + margin: 10px; + } + + .title-with-breadcrumb { + display: flex; + flex-direction: column; + } + + mat-card-subtitle { + font-size: 0.875rem; + color: rgba(0, 0, 0, 0.54); + } + + mat-card-subtitle a { + cursor: pointer; + text-decoration: underline; + color: #929292; + } + + mat-card-subtitle a:hover { + text-decoration: none; + } + + .groups-button-row { + display: flex; + flex-grow: 1; + } + + button { + margin-left: 10px; + margin-bottom: 20px; + } + + .item-content { + display: flex; + width: 100%; + } + + .item-content mat-icon { + margin-right: 10px; + } + + .clickable-item:hover { + cursor: pointer; + } + + .selected-item { + background-color: #e0e0e0; + } + + .actions { + display: flex; + margin-left: auto; + align-self: center; + } + + .actions mat-icon { + cursor: pointer; + margin-left: 16px; + color: #757575; + } + + .actions mat-icon:hover { + color: #212121; + } + + .empty-list { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + } + + mat-spinner { + margin: 0 auto; + align-self: center; + } + + .container { + display: flex; + justify-content: flex-end; + } + .classroomBtn-container { + display: flex; + justify-content: flex-end; + width: 100%; + } + + .container { + display: flex; + flex-direction: column; + } + + .header { + display: flex; + align-items: center; + gap: 10px; + padding: 20px; + } + + .header mat-form-field { + width: 300px; + } + + .main-content { + display: flex; + } + + .filters { + padding: 20px; + display: flex; + flex-direction: column; + width: 300px; + } + + .saved-filter { + display: flex; + flex-direction: column; + width: 300px; + margin-bottom: 10px; + padding: 10px; + } + + .results { + width: 100%; + } + + .results-container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 16px; + margin-bottom: 16px; + } + + .result-card { + width: 100%; + max-width: 250px; + height: 250px; /* Fijo para mantener la forma cuadrada */ + } + + .paginator-container { + display: flex; + justify-content: center; + margin-bottom: 30px; + } + + .divider { + margin: 20px 0; + } + + mat-card { + margin-bottom: 20px; + } + \ No newline at end of file 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 fdd7cb5..856edcd 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 @@ -1 +1,140 @@ -

advanced-search works!

+

Búsqueda

+
+
+ + Seleccione filtro + + + {{ savedFilter[0] }} + + + +
+ +
+
+ + Selecciona una opción + + Unidades organizativas + Clientes + + + + Nombre + + + + + + + + + + + Tipo de unidad + + Unidad organizativa + Grupos de aulas + Aulas + Grupos de clientes + + + + + Planta + + Ninguno + Planta 1 + Planta 2 + Planta 3 + + + + + + + + + + + Sistema Operativo + + Ninguno + Windows 10 Education 1803 64 bits + Ubuntu 18.04.1 LTS 64 bits + Ubuntu 16.04.4 LTS 64 bits + RESTO DE OPCIONES TBI + + + + + + Estado + + off + initializing + oglive + busy + linux + linux_session + macos + windows + windows_session + + + + + IP + + + + + MAC + + + + + + + +
+
+ + + + + + + {{ result.name }} + +

{{ result.type !== 'client' ? result.type : '' }}

+

{{ result.type === 'client' ? result.ip : '' }}

+

{{ result.type === 'client' ? result.mac : '' }}

+

+ Unidades internas: {{ result.type !== 'client' ? result.children.length : 0 }} +

+

+ Clientes: {{ result.type !== 'client' ? result.clients.length : 0 }} +

+
+
+
+
+
+ + +
+
+ +

No hay resultados para mostrar.

+
+
+
+
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 f9fc410..9fa3b34 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 @@ -1,4 +1,25 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { DataService } from '../../services/data.service'; +import { ClientCollection, UnidadOrganizativa } from '../../model/model'; +import { MatDialog } from '@angular/material/dialog'; +import { CreateOrganizationalUnitComponent } from '../../shared/organizational-units/create-organizational-unit/create-organizational-unit.component'; +import { DeleteModalComponent } from '../../../../shared/delete_modal/delete-modal/delete-modal.component'; +import { CreateClientComponent } from '../../shared/clients/create-client/create-client.component'; +import { EditOrganizationalUnitComponent } from '../../shared/organizational-units/edit-organizational-unit/edit-organizational-unit.component'; +import { EditClientComponent } from '../../shared/clients/edit-client/edit-client.component'; +import { ShowOrganizationalUnitComponent} from "../../shared/organizational-units/show-organizational-unit/show-organizational-unit.component"; +import {ToastrService} from "ngx-toastr"; +import {TreeViewComponent} from "../../shared/tree-view/tree-view.component"; +import {MatBottomSheet} from "@angular/material/bottom-sheet"; +import {LegendComponent} from "../../shared/legend/legend.component"; +import { ClassroomViewDialogComponent } from '../../shared/classroom-view/classroom-view-modal'; +import {HttpClient} from "@angular/common/http"; +import {PageEvent} from "@angular/material/paginator"; +import { SaveFiltersDialogComponent } from '../../shared/save-filters-dialog/save-filters-dialog.component'; +import { AcctionsModalComponent } from '../../shared/acctions-modal/acctions-modal.component'; +import {MatTableDataSource} from "@angular/material/table"; +import {DatePipe} from "@angular/common"; + @Component({ selector: 'app-advanced-search', @@ -6,5 +27,387 @@ import { Component } from '@angular/core'; styleUrl: './advanced-search.component.css' }) export class AdvancedSearchComponent { + baseUrl: string = import.meta.env.NG_APP_BASE_API_URL; + dataSource = new MatTableDataSource(); + organizationalUnits: UnidadOrganizativa[] = []; + selectedUnidad: UnidadOrganizativa | null = null; + selectedDetail: any | null = null; + children: any[] = []; + breadcrumb: string[] = []; + clientsData: any[] = []; + breadcrumbData: any[] = []; + loading:boolean = false; + loadingChildren:boolean = false; + searchTerm: string = ''; + selectedFilter1: string = 'none'; + selectedFilter2: string = 'none'; + selectedFilterOS: string[] = []; + selectedFilterStatus: string[] = []; + filterIP: string = ''; + filterMAC: string = ''; + filterName: string = ''; + filteredResults: any[] = []; + savedFilterNames: any[] = []; + length: number = 0; + itemsPerPage: number = 10; + page: number = 1; + pageSizeOptions: number[] = [5, 10, 25, 100]; + selectedElements: any[] = []; + isAllSelected: boolean = false; + filters: { [key: string]: string } = {}; + datePipe: DatePipe = new DatePipe('es-ES'); -} + constructor( + private dataService: DataService, + public dialog: MatDialog, + private toastService: ToastrService, + private _bottomSheet: MatBottomSheet, + private http: HttpClient + ) {} + + ngOnInit(): void { + this.search(); + this.getFilters(); + } + + getFilters(): void { + this.dataService.getFilters().subscribe( + data => { + this.savedFilterNames = data.map((filter: any) => [filter.name, filter.uuid]); + }, + error => { + console.error('Error fetching filters:', error); + } + ); + } + + search(): void { + this.loading = true; + this.dataService.getOrganizationalUnits(this.searchTerm).subscribe( + data => { + this.organizationalUnits = data; + this.loading = false; + }, + error => { + console.error('Error fetching unidades organizativas', error); + this.loading = false; + } + ); + } + + onSelectUnidad(unidad: UnidadOrganizativa): void { + this.selectedUnidad = unidad; + this.selectedDetail = unidad; + this.breadcrumb = [unidad.name]; + this.breadcrumbData = [unidad]; + this.loadChildrenAndClients(unidad.id); + } + + onSelectChild(child: any): void { + this.selectedDetail = child; + if (child.type !== 'client' && child.uuid && child.id) { + this.breadcrumb.push(child.name || child.name); + this.breadcrumbData.push(child); + this.loadChildrenAndClients(child.id); + } + } + + navigateToBreadcrumb(index: number): void { + this.breadcrumb = this.breadcrumb.slice(0, index + 1); + const target = this.breadcrumbData[index]; + this.breadcrumbData = this.breadcrumbData.slice(0, index + 1); + if (target.type === 'client') { + this.selectedDetail = target; + } else { + this.loadChildrenAndClients(target.id); + } + } + + loadChildrenAndClients(id: string): void { + this.loadingChildren = true + this.dataService.getChildren(id).subscribe( + childrenData => { + this.dataService.getClients(id).subscribe( + clientsData => { + this.clientsData = clientsData; + const newChildren = [...childrenData, ...clientsData]; + + if (newChildren.length > 0) { + this.children = newChildren; + } else { + this.children = []; + } + this.loadingChildren = false + }, + error => { + console.error('Error fetching clients', error); + this.clientsData = []; + this.children = []; + this.loadingChildren = false + } + ); + }, + error => { + console.error('Error fetching children', error); + this.children = []; + this.loadingChildren = false + } + ); + } + + addOU(event: MouseEvent, parent:any = null): void { + event.stopPropagation(); + const dialogRef = this.dialog.open(CreateOrganizationalUnitComponent, { data: { parent }, width: '900px'}); + dialogRef.afterClosed().subscribe(() => { + this.dataService.getOrganizationalUnits().subscribe( + data => { + this.organizationalUnits = data + this.loadChildrenAndClients(parent.id); + }, + error => console.error('Error fetching unidades organizativas', error) + ); + }); + } + + addClient(event: MouseEvent, organizationalUnit:any = null): void { + event.stopPropagation(); + + const dialogRef = this.dialog.open(CreateClientComponent, { data: { organizationalUnit }, width: '900px'}); + + dialogRef.afterClosed().subscribe(() => { + this.dataService.getOrganizationalUnits().subscribe( + data => { + this.organizationalUnits = data + this.loadChildrenAndClients(organizationalUnit.id); + }, + error => console.error('Error fetching unidades organizativas', error) + ); + }); + } + onDeleteClick(event: MouseEvent, uuid: string, name: string, type: string): void { + event.stopPropagation(); + if (type === 'client') { + const dialogRef = this.dialog.open(DeleteModalComponent, { + width: '400px', + data: { name } + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.dataService.deleteElement(uuid, type).subscribe( + () => { + this.loadChildrenAndClients(this.selectedUnidad?.id || ''); + this.dataService.getOrganizationalUnits().subscribe( + data => this.organizationalUnits = data, + error => console.error('Error fetching unidades organizativas', error) + ); + this.openSnackBar(false, 'Entidad eliminada exitosamente') + }, + error => { + console.error('Error deleting element', error) + this.openSnackBar(true, error.error['hydra:description']) + } + ); + } + }); + } else { + const dialogDeleteGroupRef = this.dialog.open(DeleteModalComponent, { + width: '400px', + data: { name } + }); + + dialogDeleteGroupRef.afterClosed().subscribe(result => { + if (result && result === 'delete') { + this.dataService.deleteElement(uuid, type).subscribe( + () => { + this.loadChildrenAndClients(this.selectedUnidad?.id || ''); + this.dataService.getOrganizationalUnits().subscribe( + data => this.organizationalUnits = data, + error => console.error('Error fetching unidades organizativas', error) + ); + this.openSnackBar(false, 'Entidad eliminada exitosamente') + }, + error => { + console.error('Error deleting element', error) + this.openSnackBar(true, error.error['hydra:description']) + } + ); + } else if (result && result === 'change') { + this.dataService.changeParent(uuid).subscribe( + () => { + this.loadChildrenAndClients(this.selectedUnidad?.id || ''); + this.dataService.getOrganizationalUnits().subscribe( + data => this.organizationalUnits = data, + error => console.error('Error fetching unidades organizativas', error) + ); + this.openSnackBar(false, 'Entidad eliminada exitosamente') + }, + error => { + console.error('Error deleting element', error) + this.openSnackBar(true, error.error['hydra:description']) + } + ); + } + }); + } + } + + onEditClick(event: MouseEvent, type: any, uuid: string): void { + event.stopPropagation(); + if (type != "client") { + const dialogRef = this.dialog.open(EditOrganizationalUnitComponent, { data: { uuid }, width: '700px'}); + } else { + console.log('Editar cliente'); + const dialogRef = this.dialog.open(EditClientComponent, { data: { uuid }, width: '700px' } ); + } + } + + onShowClick(event: MouseEvent, data: any): void { + event.stopPropagation(); + if (data.type != "client") { + const dialogRef = this.dialog.open(ShowOrganizationalUnitComponent, { data: { data }, width: '700px'}); + } + } + + onTreeClick(event: MouseEvent, data: any): void { + event.stopPropagation(); + if (data.type != "client") { + const dialogRef = this.dialog.open(TreeViewComponent, { data: { data }, width: '800px'}); + } + } + + openSnackBar(isError: boolean, message: string) { + if (isError) { + this.toastService.error(' Error al eliminar la entidad: ' + message, 'Error'); + } else + this.toastService.success(message, 'Éxito'); + } + + openBottomSheet(): void { + this._bottomSheet.open(LegendComponent); + } + + roomMap(): void { + if (this.selectedDetail && this.selectedDetail.type === 'classroom') { + const dialogRef = this.dialog.open(ClassroomViewDialogComponent, { + width: '90vw', + data: { clients: this.clientsData } + }); + + dialogRef.afterClosed().subscribe(result => { + console.log('The dialog was closed'); + }); + } + } + + applyFilter() { + this.dataService.getFilteredResults(this.selectedFilter1, this.selectedFilter2, this.filterName, this.filterIP, this.filterMAC, this.page, this.itemsPerPage) + .subscribe( + response => { + this.filteredResults = response.results; + this.length = response.total; + }, + error => { + console.error('Error al obtener los resultados filtrados', error); + this.filteredResults = []; + } + ); + } + + onPageChange(event: PageEvent) { + this.page = event.pageIndex; + this.itemsPerPage = event.pageSize; + this.applyFilter(); + } + + saveFilters() { + const dialogRef = this.dialog.open(SaveFiltersDialogComponent); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + const filters = { + name: result, + favourite: true, + filters: { + filter0: this.filterName, + filter1: this.selectedFilter1, + filter2: this.selectedFilter2, + filter3: this.selectedFilterOS, + filter4: this.selectedFilterStatus, + filter5: this.filterIP, + filter6: this.filterMAC, + + } + }; + + this.http.post(`${this.baseUrl}/views`, filters).subscribe(response => { + console.log('Response from server:', response); + this.toastService.success('Se ha guardado el filtro correctamente'); + }, error => { + console.error('Error:', error); + this.toastService.error(error); + }); + } + }); + } + + loadSelectedFilter(savedFilter: any) { + const url = `${this.baseUrl}/views/` + savedFilter[1]; + console.log('llamando a:', url); + + this.dataService.getFilter(savedFilter[1]).subscribe(response => { + console.log('Response from server:', response.filters); + if (response) { + console.log('Filter1:', response.filters); + this.filterName = response.filters.filter0 || ''; + this.selectedFilter1 = response.filters.filter1 || null; + this.selectedFilter2 = response.filters.filter2 || ''; + + this.selectedFilterOS = response.filters.filter3 || []; + this.selectedFilterStatus = response.filters.filter4 || []; + this.filterIP = response.filters.filter5 || ''; + this.filterMAC = response.filters.filter6 || ''; + + this.applyFilter(); + } + }, error => { + console.error('Error:', error); + }); + + } + + + onCheckboxChange(event: any, name: string, uuid: string) { + if (event.checked) { + this.selectedElements.push(uuid); + } else { + const index = this.selectedElements.indexOf(name); + if (index > -1) { + this.selectedElements.splice(index, 1); + } + } + + this.isAllSelected = this.selectedElements.length === this.filteredResults.length; + } + + toggleSelectAll() { + this.isAllSelected = !this.isAllSelected; + + if (this.isAllSelected) { + this.selectedElements = this.filteredResults.map(result => result.uuid); + } else { + this.selectedElements = []; + } + } + + isSelected(name: string): boolean { + return this.selectedElements.includes(name); + + } + + + sendActions() { + const dialogRef = this.dialog.open(AcctionsModalComponent, { data: { selectedElements: this.selectedElements }, width: '700px'}); + } + +} \ No newline at end of file diff --git a/ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.css b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css similarity index 100% rename from ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.css rename to ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.css diff --git a/ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.html b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html similarity index 100% rename from ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.html rename to ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.html diff --git a/ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.spec.ts b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.spec.ts similarity index 100% rename from ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.spec.ts rename to ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.spec.ts diff --git a/ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.ts b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts similarity index 96% rename from ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.ts rename to ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts index e838898..278c00f 100644 --- a/ogWebconsole/src/app/components/groups/shared/client-tab-view/client-tab-view.component.ts +++ b/ogWebconsole/src/app/components/groups/components/client-tab-view/client-tab-view.component.ts @@ -6,8 +6,8 @@ import {MatDialog} from "@angular/material/dialog"; import {ToastrService} from "ngx-toastr"; import {HttpClient} from "@angular/common/http"; import {DataService} from "./data.service"; -import {EditClientComponent} from "../clients/edit-client/edit-client.component"; -import {CreateClientComponent} from "../clients/create-client/create-client.component"; +import {EditClientComponent} from "../../shared/clients/edit-client/edit-client.component"; +import {CreateClientComponent} from "../../shared/clients/create-client/create-client.component"; import {DeleteModalComponent} from "../../../../shared/delete_modal/delete-modal/delete-modal.component"; import { throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; diff --git a/ogWebconsole/src/app/components/groups/shared/client-tab-view/data.service.ts b/ogWebconsole/src/app/components/groups/components/client-tab-view/data.service.ts similarity index 100% rename from ogWebconsole/src/app/components/groups/shared/client-tab-view/data.service.ts rename to ogWebconsole/src/app/components/groups/components/client-tab-view/data.service.ts diff --git a/ogWebconsole/src/app/components/groups/groups.component.html b/ogWebconsole/src/app/components/groups/groups.component.html index cb3d068..2db1732 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.html +++ b/ogWebconsole/src/app/components/groups/groups.component.html @@ -156,146 +156,7 @@ -

Búsqueda

-
-
- - Seleccione filtro - - - {{ savedFilter[0] }} - - - -
- -
-
- - Selecciona una opción - - Unidades organizativas - Clientes - - - - Nombre - - - - - - - - - - - Tipo de unidad - - Unidad organizativa - Grupos de aulas - Aulas - Grupos de clientes - - - - - Planta - - Ninguno - Planta 1 - Planta 2 - Planta 3 - - - - - - - - - - - Sistema Operativo - - Ninguno - Windows 10 Education 1803 64 bits - Ubuntu 18.04.1 LTS 64 bits - Ubuntu 16.04.4 LTS 64 bits - RESTO DE OPCIONES TBI - - - - - - Estado - - off - initializing - oglive - busy - linux - linux_session - macos - windows - windows_session - - - - - IP - - - - - MAC - - - - - - - -
-
- - - - - - - {{ result.name }} - -

{{ result.type !== 'client' ? result.type : '' }}

-

{{ result.type === 'client' ? result.ip : '' }}

-

{{ result.type === 'client' ? result.mac : '' }}

-

- Unidades internas: {{ result.type !== 'client' ? result.children.length : 0 }} -

-

- Clientes: {{ result.type !== 'client' ? result.clients.length : 0 }} -

-
-
-
-
-
- - -
-
- -

No hay resultados para mostrar.

-
-
-
-
+