@extends('layouts.dashboard') @section('title', 'Übersicht · '.$guild->name.' · TacForce Pro') @php // Status badge recipes (mockup 04 + light-mode variants). $statusBadge = function (?string $status) { return match ($status) { 'open' => ['Offen', 'border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400'], 'in_progress' => ['In Bearbeitung', 'border-amber-500/25 bg-amber-500/10 text-amber-600 dark:text-amber-400'], 'closed' => ['Geschlossen', 'border-zinc-300 dark:border-zinc-700 bg-zinc-100 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400'], default => ['Unbekannt', 'border-zinc-300 dark:border-zinc-700 bg-zinc-100 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400'], }; }; // Which module icon + accent to show in the activity feed per audit-log type. $activityStyle = function (string $type) { return match (true) { str_contains($type, 'ticket_created') => ['plus', 'text-zinc-500 dark:text-zinc-400'], str_contains($type, 'ticket_closed') => ['x', 'text-zinc-400 dark:text-zinc-500'], str_contains($type, 'accepted') => ['check', 'text-emerald-600 dark:text-emerald-400'], str_contains($type, 'rejected') => ['x', 'text-red-600 dark:text-red-400'], str_contains($type, 'member_join') => ['user-plus', 'text-zinc-500 dark:text-zinc-400'], str_contains($type, 'member_leave') => ['users', 'text-zinc-400 dark:text-zinc-500'], str_contains($type, 'message_delete') => ['trash', 'text-zinc-500 dark:text-zinc-400'], str_contains($type, 'warn') => ['alert', 'text-amber-600 dark:text-amber-400'], default => ['list', 'text-zinc-500 dark:text-zinc-400'], }; }; $moduleMeta = [ 'tickets' => ['Tickets', 'ticket'], 'applications' => ['Bewerbungen', 'file-text'], 'welcome' => ['Welcome', 'message'], 'logs' => ['Logs', 'list'], ]; $soonMeta = [ 'guard' => ['Guard', 'shield'], 'level' => ['Level', 'star'], 'partner' => ['Partner', 'link'], ]; $activeCount = collect($moduleMeta)->keys()->filter(fn ($k) => data_get($modules, $k, false))->count(); @endphp @section('content') {{-- HEADING --}}

Übersicht

Willkommen zurück — hier ist der Status deines Servers.

Panel senden
{{-- STAT CARDS --}}
{{-- Offene Tickets --}}

Offene Tickets

{{ number_format($openTickets, 0, ',', '.') }}

@if ($ticketsToday > 0) +{{ $ticketsToday }} heute @else Keine neuen heute @endif

{{-- Bewerbungen --}}

Bewerbungen

{{ number_format($applications, 0, ',', '.') }}

{{ $openApplications }} offen

{{-- Mitglieder --}}

Mitglieder

{{ $memberCount !== null ? number_format($memberCount, 0, ',', '.') : '—' }}

@if ($memberCount !== null) Live vom Discord-Server @else Bald – wird beim Scan synchronisiert @endif

{{-- Plan --}}

Plan

{{ $guild->plan }}

verwalten →
{{-- MODULES — echte Schalter, speichern per Button --}}
@csrf @method('PUT')

Module

Funktionen an-/ausschalten, dann Speichern.

@foreach ($moduleMeta as $key => [$label, $ic]) @php $on = (bool) old("modules.$key", data_get($modules, $key, false)); @endphp
{{ $label }}
@endforeach @foreach ($soonMeta as $key => [$label, $ic])
{{ $label }}
Bald
@endforeach
{{-- MAIN GRID --}}
{{-- LEFT: table + chart --}}
{{-- LETZTE TICKETS --}}

Letzte Tickets

Alle ansehen →
@if ($recentTickets->isEmpty())

Noch keine Tickets vorhanden.

@else
@foreach ($recentTickets as $ticket) @php [$badgeLabel, $badgeClass] = $statusBadge($ticket->status); @endphp @endforeach
Ticket Kategorie Ersteller Status Zeit
#TF-{{ $ticket->number }} {{ $ticket->category->name ?? '—' }} {{ strtoupper(mb_substr($ticket->creator_discord_id, -2)) }} {{ $ticket->creator_discord_id }} {{ $badgeLabel }} {{ $ticket->created_at?->diffForHumans() }}
@endif
{{-- CHART --}}

Tickets diese Woche

Gesamt {{ $chart['total'] }} · Ø {{ $chart['avg'] }} pro Tag

@foreach ($chart['days'] as $day)
{{ $day['label'] }}
@endforeach
{{-- RIGHT: activity --}}

Aktivität

@if ($activity->isEmpty())

Noch keine Aktivität.

@else
    @foreach ($activity as $entry) @php [$ic, $tone] = $activityStyle($entry->type); @endphp
  1. @unless ($loop->last) @endunless

    {{ $entry->message }}

    {{ $entry->created_at?->diffForHumans() }}

  2. @endforeach
@endif
@endsection