From 98a3f4d5b69f036437bc254062e69aaa497493ed Mon Sep 17 00:00:00 2001 From: Troy Grunt Date: Fri, 6 Feb 2026 18:47:25 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Erweiterung=20der=20Module=20f=C3=BCr?= =?UTF-8?q?=20Ger=C3=A4te,=20Stockwerke=20und=20Racks=20mit=20grundlegende?= =?UTF-8?q?n=20Funktionen=20und=20Strukturen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/js/app.js | 123 ++++++++++++++++++++++++++- app/modules/devices/edit.php | 156 ++++++++++++++++++++++++++++++++++- app/modules/devices/list.php | 111 ++++++++++++++++++++++++- app/modules/devices/save.php | 104 ++++++++++++++++++++++- app/modules/floors/edit.php | 128 +++++++++++++++++++++++++++- app/modules/floors/list.php | 96 ++++++++++++++++++++- app/modules/racks/edit.php | 131 ++++++++++++++++++++++++++++- app/modules/racks/list.php | 102 ++++++++++++++++++++++- 8 files changed, 943 insertions(+), 8 deletions(-) diff --git a/app/assets/js/app.js b/app/assets/js/app.js index 10b14a8..a19bcd2 100644 --- a/app/assets/js/app.js +++ b/app/assets/js/app.js @@ -1 +1,122 @@ -// Globale JS-Funktionen, Initialisierung +/** + * app/assets/js/app.js + * + * Zentrale JS-Datei für die Webanwendung + * - Initialisiert alle Module + * - SVG-Editor, Netzwerk-Ansicht, Drag & Drop, Floorplan + * - Event-Handler, globale Variablen + */ + +// ========================= +// Global Variables / Config +// ========================= + +window.APP = { + deviceTypes: [], // TODO: alle Gerätetypen laden + devices: [], // TODO: alle Geräte laden + racks: [], // TODO: alle Racks laden + floors: [], // TODO: alle Floors laden + connections: [], // TODO: alle Verbindungen laden +}; + +// ========================= +// Init Functions +// ========================= + +document.addEventListener('DOMContentLoaded', () => { + + console.log('App initialized'); + + // ========================= + // SVG-Port-Editor initialisieren + // ========================= + // TODO: import / init svg-editor.js + // if (window.SVGEditor) window.SVGEditor.init(); + + // ========================= + // Netzwerk-Ansicht initialisieren + // ========================= + // TODO: import / init network-view.js + // if (window.NetworkView) window.NetworkView.init(); + + // ========================= + // Drag & Drop für Floors / Racks / Devices + // ========================= + // TODO: init drag & drop logic + + // ========================= + // Event-Handler für Buttons / Forms + // ========================= + initEventHandlers(); +}); + +// ========================= +// Event Handler Setup +// ========================= + +function initEventHandlers() { + + // TODO: Save-Button Device-Type + const saveDeviceTypeBtn = document.querySelector('#save-device-type'); + if (saveDeviceTypeBtn) { + saveDeviceTypeBtn.addEventListener('click', (e) => { + e.preventDefault(); + // TODO: Save Device-Type via AJAX + }); + } + + // TODO: Save-Button Device + const saveDeviceBtn = document.querySelector('#save-device'); + if (saveDeviceBtn) { + saveDeviceBtn.addEventListener('click', (e) => { + e.preventDefault(); + // TODO: Save Device via AJAX + }); + } + + // TODO: Save-Button Floor + const saveFloorBtn = document.querySelector('#save-floor'); + if (saveFloorBtn) { + saveFloorBtn.addEventListener('click', (e) => { + e.preventDefault(); + // TODO: Save Floor via AJAX + }); + } + + // TODO: Save-Button Rack + const saveRackBtn = document.querySelector('#save-rack'); + if (saveRackBtn) { + saveRackBtn.addEventListener('click', (e) => { + e.preventDefault(); + // TODO: Save Rack via AJAX + }); + } + + // TODO: Weitere Event-Handler (Löschen, Import, Export, Filter) +} + +// ========================= +// Utility Functions +// ========================= + +/** + * AJAX Request Helper + * @param {string} url + * @param {object} data + * @param {function} callback + */ +function ajaxPost(url, data, callback) { + const xhr = new XMLHttpRequest(); + xhr.open('POST', url, true); + xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + xhr.onload = function() { + if (xhr.status >= 200 && xhr.status < 300) { + callback(JSON.parse(xhr.responseText)); + } else { + console.error('AJAX Error:', xhr.statusText); + } + }; + xhr.send(JSON.stringify(data)); +} + +// TODO: weitere Utility-Funktionen (DOM-Helper, SVG-Helper, etc.) diff --git a/app/modules/devices/edit.php b/app/modules/devices/edit.php index a8a3de5..c729d3d 100644 --- a/app/modules/devices/edit.php +++ b/app/modules/devices/edit.php @@ -1,2 +1,156 @@ get("SELECT * FROM device_types ORDER BY name", "", []); + +// TODO: Wenn Gerät vorhanden, Ports laden (vom Device-Type) +$ports = []; // TODO: Ports vorbereiten + +?> + +

Gerät bearbeiten

+ +
+ + + +
+ Allgemein + + + +

+ + + +

+ + +
+ + + +
+ Standort + + + +

+ + + +

+ + +
+ + + +
+ Ports + +

Ports werden vom Device-Type übernommen. Positionen können angepasst werden.

+ +
+ + + +
+ + +
+ +
+
+ + + +
+ + + +
+ +
+ + + + diff --git a/app/modules/devices/list.php b/app/modules/devices/list.php index 66ae801..8c6b22c 100644 --- a/app/modules/devices/list.php +++ b/app/modules/devices/list.php @@ -1,2 +1,111 @@ get("SELECT * FROM devices ORDER BY name", "", []); + +?> + +

Geräte

+ + + +
+ + + Neues Gerät + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VorschauNameGerätetypStandortRackRack-PosPortsAktionen
+ + + + Gerät XY + + + + + + + + + + + + Bearbeiten + +
+ + + + +
+

Noch keine Geräte angelegt.

+

Erstes Gerät anlegen

+
+ diff --git a/app/modules/devices/save.php b/app/modules/devices/save.php index eace37c..f3d1bdc 100644 --- a/app/modules/devices/save.php +++ b/app/modules/devices/save.php @@ -1,2 +1,104 @@ set("UPDATE ...", "???", [...]); +} else { + // TODO: INSERT INTO devices ... + // $deviceId = $sql->set("INSERT ...", "???", [...], true); +} + +// ========================= +// Ports speichern / übernehmen vom Device-Type +// ========================= + +// TODO: +// - $portsData iterieren +// - Positionen aus SVG übernehmen +// - port_type_id, name, VLAN, Modus speichern + +// ========================= +// SVG-Positionen speichern +// ========================= + +// TODO: +// - device_positions Tabelle? +// - x/y Koordinaten +// - Rotation / Zoom (optional) + +// ========================= +// Antwort +// ========================= + +echo json_encode([ + 'status' => 'ok', + 'id' => $deviceId +]); diff --git a/app/modules/floors/edit.php b/app/modules/floors/edit.php index 5d97d89..10020ca 100644 --- a/app/modules/floors/edit.php +++ b/app/modules/floors/edit.php @@ -1,2 +1,128 @@ + +

Stockwerk bearbeiten

+ +
+ + + +
+ Allgemein + + + +

+ + +
+ + + +
+ Räume / Netzwerkdosen + +

+ Räume hinzufügen / bearbeiten. Netzwerkdosen können einzeln nummeriert / benannt werden. +

+ +
+ + +
+ + +
+ + + +
+ Grundriss / Floorplan + +
+ + + +
+ +

+ Räume und Netzwerkdosen per Drag & Drop platzieren. Nummerierung und Bezeichnungen editierbar. +

+
+ + + +
+ + + +
+ +
+ + + + diff --git a/app/modules/floors/list.php b/app/modules/floors/list.php index 54ce68d..9a4fb5d 100644 --- a/app/modules/floors/list.php +++ b/app/modules/floors/list.php @@ -1,2 +1,96 @@ get("SELECT * FROM floors ORDER BY name", "", []); + +?> + +

Stockwerke

+ + + +
+ + + Neues Stockwerk + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VorschauNameBeschreibungRäumeAktionen
+ + + + Floor 1 + + + + + + Bearbeiten + +
+ + + + +
+

Noch keine Stockwerke angelegt.

+

Erstes Stockwerk anlegen

+
+ diff --git a/app/modules/racks/edit.php b/app/modules/racks/edit.php index 188bbca..4214535 100644 --- a/app/modules/racks/edit.php +++ b/app/modules/racks/edit.php @@ -1,2 +1,131 @@ get("SELECT * FROM floors ORDER BY name", "", []); + +?> + +

Rack bearbeiten

+ +
+ + + +
+ Allgemein + + + +

+ + +
+ + + +
+ Stockwerk / Standort + + + +

+ + +
+ + + +
+ Rack-Layout + +
+ + + +
+ +

+ Geräte per Drag & Drop im Rack positionieren. +

+
+ + + +
+ + + +
+ +
+ + + + diff --git a/app/modules/racks/list.php b/app/modules/racks/list.php index 896765f..9180d12 100644 --- a/app/modules/racks/list.php +++ b/app/modules/racks/list.php @@ -1,2 +1,102 @@ get("SELECT r.*, f.name AS floor_name FROM racks r LEFT JOIN floors f ON r.floor_id = f.id ORDER BY r.name", "", []); + +?> + +

Racks

+ + + +
+ + + Neues Rack + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VorschauNameStockwerkHöhe (U)GeräteAktionen
+ + + + Rack 1 + + + + + + + + Bearbeiten + +
+ + + + +
+

Noch keine Racks angelegt.

+

Erstes Rack anlegen

+
+