- Termin aus Mail: Mailtext oder .eml per Drag & Drop/Strg+V auf Terminplan oder Aufgaben, KI schlägt Aufgaben vor, Prüfung im Aufgaben-Panel; neues Notizfeld je Aufgabe (plan_todos.notiz) - Terminplan: Meilensteine ohne Aufgabenbezug je in eigener Zeile, "+ Neu"-Menü klappt neben schmaler Seitenleiste nach rechts, Leistungsphasen - Rollen & Rechte, Abwesenheiten-Seite, Benachrichtigungen, Rundgang - Glas-Darstellung, Logo als Favicon - Pi-Betrieb: PDF-Arbeit im Kindprozess, Wächter, Einrichtungs- und Prüfskript inkl. WLAN-Wächter Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
3.5 KiB
JavaScript
73 lines
3.5 KiB
JavaScript
// -----------------------------
|
|
// Projektübersicht — Init / Start
|
|
// -----------------------------
|
|
// Einstiegsmodul der Hauptseite: wird als letztes Skript ausschließlich von
|
|
// App.html geladen und startet direkt beim Laden den Initialisierungsablauf
|
|
// (automatische Ausführung unten in der Datei, nur wenn ein 'board'-Element
|
|
// existiert). Es stellt renderAll(),
|
|
// initUiState() bereit und nutzt loadUiState()/
|
|
// loadTheme()/loadHeaderState()/loadSidebarCollapseState() aus js/ui.js, load() aus js/store.js,
|
|
// showTab()/TAB_PANELS aus js/tabs-auth.js sowie die Render-Funktionen
|
|
// renderBoard()/renderWochenbericht()/renderLoad()/renderProjects()/renderPeople()
|
|
// aus js/board/board.js, js/wochenbericht/wochenbericht.js, js/load/load.js,
|
|
// js/projects/projects.js, js/people/people.js.
|
|
|
|
// renderAll: Convenience um UI-Elemente zu initialisieren
|
|
function renderAll(){
|
|
renderBoard();
|
|
const activeTab = document.querySelector('.tab.active')?.dataset.tab || currentTab;
|
|
if(activeTab === 'wochenbericht') renderWochenbericht();
|
|
else if(activeTab === 'load') renderLoad();
|
|
else if(activeTab === 'abwesenheit') renderAbwesenheiten();
|
|
else if(activeTab === 'people') renderPeople();
|
|
else if(activeTab === 'dashboard') renderDashboard();
|
|
else if(activeTab === 'settings') renderSettings();
|
|
else if(activeTab === 'admin') renderAdminArea();
|
|
// Glocke im Menüband auf den aktuellen Stand bringen (js/benachrichtigungen.js).
|
|
if(typeof ladeBenachrichtigungen === 'function') ladeBenachrichtigungen();
|
|
// Der Projektbereich rendert nicht hier, sondern in showTab('plan') —
|
|
// load() ruft direkt im Anschluss showTab(currentTab) auf, und erst dort
|
|
// ist der Bereich sichtbar (das GANTT braucht die Containerbreite).
|
|
}
|
|
|
|
// initUiState: stellt beim Start den UI-Zustand her (LocalStorage-UI-State,
|
|
// Theme, Header-Status), setzt den Seitentitel und zeigt den ersten Tab an.
|
|
// Eine Deep-Link-URL (z. B. "/Auslastung") aus applyUrlRoute() übersteuert
|
|
// dabei den Tab. Kein Rückgabewert.
|
|
function initUiState(){
|
|
loadUiState();
|
|
const route = applyUrlRoute();
|
|
if(route){
|
|
currentTab = route.tab;
|
|
// Deep-Link auf den Projektbereich ("/Projektplan/<Name>?weekLabel=…"):
|
|
// Ziel merken, damit showTab('plan') es rendern kann. Beim ersten Aufruf
|
|
// ist db.weeks noch leer — load() ruft showTab(currentTab) erneut auf,
|
|
// sobald die Sitzungen da sind. Ein Sandbox-Plan der Planung trägt statt
|
|
// projNr ein planId (siehe updateRouteUrl(), js/ui.js) — PlanApp.sandboxPlanId
|
|
// wird deshalb nach setPlanTarget() gesetzt, das es sonst zurücksetzt.
|
|
if(route.tab === 'plan'){
|
|
setPlanTarget(route.weekLabel, route.projNr, route.projName);
|
|
if(route.weekLabel === SANDBOX_WEEK_LABEL) window.PlanApp.sandboxPlanId = route.planId || '';
|
|
}
|
|
}
|
|
loadTheme();
|
|
loadHeaderState();
|
|
loadSidebarCollapseState();
|
|
document.title = 'Projektübersicht';
|
|
const titleEl = document.getElementById('pageTitle');
|
|
if(titleEl) titleEl.textContent = 'Projektübersicht';
|
|
|
|
const tab = TAB_PANELS.includes(currentTab) ? currentTab : DEFAULT_TAB;
|
|
showTab(tab);
|
|
}
|
|
|
|
// Automatische Initialisierung der Hauptseite — seit Projektbereich und
|
|
// Benutzerverwaltung eigene Bereiche sind, ist sie die einzige Seite. Der eigentliche
|
|
// Start läuft erst nach erfolgreicher Anmeldung (checkAuthAndInit(), js/auth.js) —
|
|
// ohne gültige Session zeigt das Login-Overlay und blockiert die App.
|
|
if(document.getElementById('board')){
|
|
checkAuthAndInit(() => {
|
|
initUiState();
|
|
load();
|
|
});
|
|
} |