mailwolt/resources/views/livewire/ui/security/audit-logs-table.blade.php

86 lines
4.5 KiB
PHP

<x-slot:breadcrumbParent>Sicherheit</x-slot:breadcrumbParent>
<x-slot:breadcrumb>Audit-Logs</x-slot:breadcrumb>
<div>
<div class="mbx-page-header">
<div class="mbx-page-title">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M2 4h12M2 7.5h12M2 11h12" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>
<rect x=".5" y="1.5" width="15" height="13" rx="2" stroke="currentColor" stroke-width="1.3"/>
</svg>
Audit-Logs
<span class="mbx-total-badge">{{ count($logs) }}</span>
</div>
<div class="mbx-page-actions">
<div class="mbx-search-wrap">
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" style="flex-shrink:0;color:var(--mw-t4)">
<circle cx="5.5" cy="5.5" r="4" stroke="currentColor" stroke-width="1.2"/>
<path d="M9 9l2.5 2.5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/>
</svg>
<input type="text" wire:model.live.debounce.300ms="search"
class="mbx-search-input" placeholder="Nachricht suchen …">
</div>
</div>
</div>
<div class="mbx-sections">
<div class="mbx-section">
{{-- Toolbar: level filter --}}
<div style="display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid var(--mw-b1);flex-wrap:wrap">
<span style="font-size:10.5px;color:var(--mw-t4);margin-right:2px">Level:</span>
@foreach($levels as $lvl)
<button wire:click="$set('level','{{ $lvl }}')"
style="padding:3px 10px;border-radius:5px;font-size:10.5px;border:1px solid {{ $level === $lvl ? 'var(--mw-vbd)' : 'var(--mw-b2)' }};background:{{ $level === $lvl ? 'var(--mw-vbg)' : 'transparent' }};color:{{ $level === $lvl ? 'var(--mw-v2)' : 'var(--mw-t4)' }};cursor:pointer;transition:all .15s;font-weight:{{ $level === $lvl ? '600' : '400' }}">
{{ $lvl === '' ? 'Alle' : ucfirst($lvl) }}
</button>
@endforeach
@if($search !== '' || $level !== '')
<button wire:click="$set('search','');$set('level','')"
style="margin-left:auto;padding:3px 9px;border-radius:5px;font-size:10.5px;border:1px solid var(--mw-b2);background:transparent;color:var(--mw-t4);cursor:pointer">
Filter löschen
</button>
@endif
</div>
@if(empty($logs))
<div style="padding:32px 16px;text-align:center">
<svg width="28" height="28" viewBox="0 0 16 16" fill="none" style="color:var(--mw-t4);margin:0 auto 10px;display:block">
<path d="M2 4h12M2 7.5h12M2 11h12" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>
<rect x=".5" y="1.5" width="15" height="13" rx="2" stroke="currentColor" stroke-width="1.3"/>
</svg>
<div style="font-size:12.5px;color:var(--mw-t3)">
@if($search !== '' || $level !== '')
Keine Einträge für diese Filter
@else
Keine Log-Einträge gefunden
@endif
</div>
@if($search === '' && $level === '')
<div style="font-size:11px;color:var(--mw-t4);margin-top:5px;font-family:monospace">{{ storage_path('logs/laravel.log') }}</div>
@endif
</div>
@else
@foreach($logs as $entry)
<div class="audit-row {{ $entry['level'] }}">
<span class="audit-time">{{ $entry['time'] }}</span>
<span class="audit-level {{ $entry['level'] }}">{{ strtoupper($entry['level']) }}</span>
<span class="audit-msg">{{ $entry['message'] }}</span>
</div>
@endforeach
@if($limit <= count($logs))
<div style="padding:12px 16px;text-align:center;border-top:1px solid var(--mw-b1)">
<button wire:click="loadMore" class="mbx-act-btn" style="padding:5px 18px;font-size:11.5px;width:auto">
Weitere laden
</button>
</div>
@endif
@endif
</div>
</div>
</div>