Files
projektuebersicht/public/js/globals.js
T

64 lines
3.4 KiB
JavaScript

// -----------------------------
// Projektübersicht — globale Konstanten & Zustand
// -----------------------------
// Diese Datei wird als Erstes von Test.html und project-plan.html geladen und
// legt alle zentralen Konstanten (Leistungsphasen, Rollen, Gruppen, Abteilungen,
// Farben, Passwort-Hash) sowie den globalen In-Memory-Zustand (db,
// currentDepartment, currentTab) fest. Sie stellt keine Funktionen, sondern nur
// Daten bereit, auf die alle weiteren Module (js/store.js, js/board/board.js,
// js/gantt.js, js/plan/*, ...) zugreifen. Auf dem Plan-Gantt lädt zusätzlich
// js/plan/plan-state.js Zustand für die Planungsseite.
// Konstanten: Leistungsphasen, Rollen und LocalStorage-Key
const LPHS = ["LPH 1","LPH 2","LPH 3","LPH 4","LPH 5","LPH 6","LPH 7","LPH 8", "W+M"]; // Spalten für Leistungsphasen
const ROLES = ["Planung","Projektleitung","Bauüberwachung"]; // Gruppierung der Personen
const GROUP_ORDER = ["Aktive Projekte","Kleine Projekte","In Anbahnung","Allgemein"]; // Reihenfolge der Projektgruppen
const STORAGE = "projuebersicht_v1"; // Durch lokale UI-State-Persistenz genutzter Key
// DEFAULT_DEPARTMENT: Fallback-Abteilung beim ersten Start
const DEFAULT_DEPARTMENT = 'ELT';
// DEFAULT_TAB: Tab, der beim ersten Start angezeigt wird ('board' = Projektboard)
const DEFAULT_TAB = 'board';
// Farbpalette für GANTT-Balken (eine pro Projekt, wiederholend)
const GANTT_COLORS = ['#0071e3','#248a3d','#b25000','#7c3aed','#d70015','#0ca678','#d9480f','#5f3dc4'];
// Passwortschutz: SHA256-Hash des erlaubten Passworts.
// Wenn Sie das Passwort ändern möchten, generieren Sie den SHA256-Hash (https://emn178.github.io/online-tools/sha256.html)
// des neuen Passworts und ersetzen Sie den Wert hier.
const PROTECTED_PASSWORD_HASH = "107bab579e8500e459690cf48ba77de32be43cadb8421bbe79fad20a55b39b6f";
// requestedAction speichert die Aktion, die nach erfolgreicher Passwort-Eingabe ausgeführt wird.
let requestedAction = null;
// saveSyncTimer: Handle für den debounced Speicher-Timer (Sync auf Server)
let saveSyncTimer = null;
// isAuthenticated: Merkt sich, ob das Passwort-Schutz-Modal bereits erfolgreich bestätigt wurde
let isAuthenticated = false;
// In-memory Datenbank: Sitzungen (weeks) und aktuell ausgewählte Sitzung
let db = { weeks: [], currentWeek: null, globalPeople: {} };
// Aktuelle Abteilung (ELT, HLS, ARCH). Daten werden in sessions/<DEPT>/ getrennt gespeichert.
let currentDepartment = DEFAULT_DEPARTMENT;
// currentTab: aktuell aktiver Tab der Hauptseite (z. B. 'board')
let currentTab = DEFAULT_TAB;
// DEPARTMENTS: Auflistung der gültigen Abteilungen mit Anzeigename und Icon
const DEPARTMENTS = {
ELT: { label: 'Elektro', icon: '' },
HLS: { label: 'HLS', icon: '' },
ARCH: { label: 'Architektur', icon: '' }
};
// TAB_SLUGS / TAB_BY_SLUG: sprechende URL-Abschnitte für die Tabs, damit jede
// Abteilungs-/Tab-Kombination eine eigene Seite hat (z. B. "/HLS/Auslastung").
// Wird von js/ui.js (applyUrlRoute/updateRouteUrl) und dem Server genutzt.
const TAB_SLUGS = {
board: 'Projektübersicht',
load: 'Auslastung',
projects:'Projekte',
people: 'Projektbeteiligte'
};
const TAB_BY_SLUG = Object.fromEntries(Object.entries(TAB_SLUGS).map(([k,v]) => [v,k]));
// PLAN_SLUG: URL-Schlüssel für die Projektplan-Seite (project-plan.html), im
// gleichen Deep-Link-Schema wie die Tabs: "/<Abteilung>/Projektplan".
const PLAN_SLUG = 'Projektplan';