4.8 KiB
Admin Dashboard Event-Handler Fixes
Problem
Das Admin Dashboard hatte mehrfache Event-Handler-Registrierungen, die dazu führten, dass bei einem Klick 3 Dinge gleichzeitig geöffnet wurden.
Ursache
Das Template templates/admin.html
lud 4 verschiedene JavaScript-Dateien gleichzeitig:
admin.js
- Haupt-Admin-Funktionalitätenadmin-dashboard.js
- Dashboard-spezifische Funktionenadmin-live.js
- Live-Updates und Echtzeit-Funktionalitätenadmin-system.js
- System-Management-Funktionen
Alle diese Dateien registrierten Event-Listener für dieselben Button-IDs:
system-status-btn
analytics-btn
maintenance-btn
add-user-btn
add-printer-btn
- usw.
Lösung
-
Neue konsolidierte JavaScript-Datei:
static/js/admin-unified.js
- Kombiniert alle Admin-Funktionalitäten in einer einzigen Klasse
AdminDashboard
- Verhindert mehrfache Event-Listener-Registrierung durch
eventListenersAttached
Flag - Verwendet Event-Delegation für dynamische Elemente
- Implementiert
preventDefault()
undstopPropagation()
zur Event-Bubble-Verhinderung
- Kombiniert alle Admin-Funktionalitäten in einer einzigen Klasse
-
Template-Update:
templates/admin.html
- Entfernte die 4 separaten JavaScript-Includes
- Ersetzte durch einen einzigen Include:
admin-unified.js
- Entfernte redundante Inline-JavaScript-Event-Handler
-
Sichere Event-Listener-Registrierung:
addEventListenerSafe(selector, event, handler) { const element = document.querySelector(selector); if (element && !element.dataset.listenerAttached) { element.addEventListener(event, handler); element.dataset.listenerAttached = 'true'; } }
-
Event-Delegation für dynamische Elemente:
document.addEventListener('click', (e) => { if (e.target.closest('.edit-user-btn')) { e.preventDefault(); e.stopPropagation(); // Handler-Code } });
-
Vollständige Benutzer-Management-Implementierung:
- ✅ Benutzer erstellen: Modal mit Formular + API-Call zu
/api/admin/users
(POST) - ✅ Benutzer bearbeiten: Modal vorausgefüllt + API-Call zu
/api/admin/users/{id}
(PUT) - ✅ Benutzer löschen: Bestätigungsdialog + API-Call zu
/api/admin/users/{id}
(DELETE) - ✅ Benutzer laden: API-Call zu
/api/admin/users/{id}
(GET) für Bearbeitungsformular - ✅ Vollständige Validierung: E-Mail, Passwort, Duplikatprüfung
- ✅ Live-Feedback: Loading-Zustände, Erfolgs-/Fehlermeldungen
- ✅ Automatische UI-Updates: Seite wird nach Änderungen neu geladen
- ✅ Benutzer erstellen: Modal mit Formular + API-Call zu
-
Backend-API-Routen hinzugefügt:
- ✅
GET /api/admin/users/{id}
- Einzelnen Benutzer laden - ✅
PUT /api/admin/users/{id}
- Benutzer aktualisieren - ✅ Bestehende Routen:
POST /api/admin/users
,DELETE /api/admin/users/{id}
- ✅
Verbesserungen
- ✅ Keine mehrfachen Event-Ausführungen mehr
- ✅ Saubere Event-Handler-Verwaltung
- ✅ Bessere Performance durch weniger JavaScript-Dateien
- ✅ Konsistente API-Aufrufe
- ✅ Zentralisierte Fehlerbehandlung
- ✅ Live-Updates ohne Konflikte
- ✅ Vollständige Benutzer-Verwaltung funktional
- ✅ Responsive Modals mit modernem Design
- ✅ Echte Datenbankoperationen mit Validierung
Testing
Nach den Änderungen sollte jeder Klick im Admin Dashboard nur eine Aktion auslösen und die Benutzer-Verwaltung vollständig funktionieren:
✅ Funktionale Tests bestanden:
- "Neuer Benutzer" Button → Öffnet Modal zum Erstellen
- "Bearbeiten" Button → Öffnet vorausgefülltes Modal
- "Löschen" Button → Bestätigungsdialog + Löschung
- Formular-Validierung → E-Mail-Format, Pflichtfelder
- API-Integration → Echte Backend-Calls mit Fehlerbehandlung
- UI-Feedback → Loading-Spinner, Erfolgs-/Fehlermeldungen
Betroffene Dateien
- ✅
static/js/admin-unified.js
(NEU - AKTIV) - ✅
templates/admin.html
(GEÄNDERT) - ✅
app.py
(API-Routen hinzugefügt) - ❌
static/js/admin.js
(ENTFERNT - 06.01.2025) - ❌
static/js/admin-dashboard.js
(ENTFERNT - 06.01.2025) - ❌
static/js/admin-live.js
(ENTFERNT - 06.01.2025) - ❌
static/js/admin-system.js
(ENTFERNT - 06.01.2025) - ❌
static/js/admin-consolidated.js
(ENTFERNT - 06.01.2025)
Cleanup-Status
🧹 Aufräumarbeiten abgeschlossen:
- Alle veralteten JavaScript-Dateien wurden entfernt
- Template wurde bereinigt
- Nur noch eine einzige Admin-JavaScript-Datei aktiv
- Keine Event-Handler-Konflikte mehr möglich
User-Management Status
🎯 Benutzer-Verwaltung vollständig implementiert:
- Hinzufügen, Bearbeiten, Löschen funktional
- Backend-API vollständig
- Frontend-Modals mit Validierung
- Live-Updates und Fehlerbehandlung
- Production-ready Implementation
Datum
06.01.2025 - Mercedes-Benz TBA Marienfelde - MYP System