// frontend/src/pages/Dashboard/Dashboard.tsx import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useAuth } from '../../contexts/AuthContext'; // Mock Data für die Demo const mockData = { currentShiftPlan: { id: '1', name: 'November Schichtplan 2024', period: '01.11.2024 - 30.11.2024', status: 'Aktiv', shiftsCovered: 85, totalShifts: 120 }, upcomingShifts: [ { id: '1', date: 'Heute', time: '08:00 - 16:00', type: 'Frühschicht', assigned: true }, { id: '2', date: 'Morgen', time: '14:00 - 22:00', type: 'Spätschicht', assigned: true }, { id: '3', date: '15.11.2024', time: '08:00 - 16:00', type: 'Frühschicht', assigned: false } ], teamStats: { totalEmployees: 24, availableToday: 18, onVacation: 3, sickLeave: 2 }, recentActivities: [ { id: '1', action: 'Schichtplan veröffentlicht', user: 'Max Mustermann', time: 'vor 2 Stunden' }, { id: '2', action: 'Mitarbeiter hinzugefügt', user: 'Sarah Admin', time: 'vor 4 Stunden' }, { id: '3', action: 'Verfügbarkeit geändert', user: 'Tom Bauer', time: 'vor 1 Tag' } ] }; const Dashboard: React.FC = () => { const { user, hasRole } = useAuth(); const [loading, setLoading] = useState(true); useEffect(() => { // Simuliere Daten laden setTimeout(() => setLoading(false), 1000); }, []); if (loading) { return (
⏳ Lade Dashboard...
); } return (
{/* Willkommens-Bereich */}

Willkommen zurück, {user?.name}! 👋

{new Date().toLocaleDateString('de-DE', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}

{/* Quick Actions - Nur für Admins/Instandhalter */} {hasRole(['admin', 'instandhalter']) && (

Schnellaktionen

{ e.currentTarget.style.transform = 'translateY(-2px)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; }}>
📅
Neuen Schichtplan
Erstellen
{ e.currentTarget.style.transform = 'translateY(-2px)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; }}>
👥
Mitarbeiter
Verwalten
{ e.currentTarget.style.transform = 'translateY(-2px)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; }}>
📋
Alle Pläne
Anzeigen
)} {/* Haupt-Grid mit Informationen */}
{/* Aktueller Schichtplan */}

📊 Aktueller Schichtplan

{mockData.currentShiftPlan.name}
{mockData.currentShiftPlan.period}
Fortschritt: {mockData.currentShiftPlan.shiftsCovered}/{mockData.currentShiftPlan.totalShifts} Schichten
{mockData.currentShiftPlan.status}
{/* Team-Statistiken */}

👥 Team-Übersicht

Gesamt Mitarbeiter: {mockData.teamStats.totalEmployees}
Verfügbar heute: {mockData.teamStats.availableToday}
Im Urlaub: {mockData.teamStats.onVacation}
Krankgeschrieben: {mockData.teamStats.sickLeave}
{/* Unteres Grid */}
{/* Meine nächsten Schichten (für normale User) */} {hasRole(['user']) && (

⏰ Meine nächsten Schichten

{mockData.upcomingShifts.map(shift => (
{shift.date}
{shift.time}
{shift.type}
{shift.assigned ? 'Zugewiesen' : 'Noch offen'}
))}
)} {/* Letzte Aktivitäten (für Admins/Instandhalter) */} {hasRole(['admin', 'instandhalter']) && (

📝 Letzte Aktivitäten

{mockData.recentActivities.map(activity => (
{activity.action}
von {activity.user}
{activity.time}
))}
)} {/* Schnelllinks */}

🔗 Schnellzugriff

{ e.currentTarget.style.backgroundColor = '#e9ecef'; }} onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = '#f8f9fa'; }}> 📅 Alle Schichtpläne anzeigen
{ e.currentTarget.style.backgroundColor = '#e9ecef'; }} onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = '#f8f9fa'; }}> Hilfe & Anleitung
{hasRole(['user']) && (
{ e.currentTarget.style.backgroundColor = '#e9ecef'; }} onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = '#f8f9fa'; }}> 📝 Meine Verfügbarkeit bearbeiten
)}
); }; export default Dashboard;