Files
speech2text/resources/views/admin/audit-logs/index.blade.php
2026-06-02 17:35:45 +08:00

151 lines
7.1 KiB
PHP

@extends('layouts.admin')
@section('title', 'Log Audit')
@section('content')
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="fw-bold mb-0"><i class="bi bi-journal-text me-2 text-primary"></i>Log Audit</h4>
<a href="{{ route('admin.audit-logs.export', request()->query()) }}"
class="btn btn-outline-success btn-sm">
<i class="bi bi-download me-1"></i>Eksport CSV
</a>
</div>
{{-- Filter --}}
<div class="card mb-3">
<div class="card-body py-2">
<form method="GET" class="row g-2 align-items-center">
<div class="col-md-2">
<select class="form-select form-select-sm" name="action">
<option value="">Semua Tindakan</option>
@foreach($actions as $action)
<option value="{{ $action }}" {{ request('action') === $action ? 'selected' : '' }}>
{{ $action }}
</option>
@endforeach
</select>
</div>
<div class="col-md-2">
<input type="text" class="form-control form-control-sm" name="search"
value="{{ request('search') }}" placeholder="Cari tindakan / justifikasi...">
</div>
<div class="col-md-2">
<input type="date" class="form-control form-control-sm" name="date_from"
value="{{ request('date_from') }}" placeholder="Dari tarikh">
</div>
<div class="col-md-2">
<input type="date" class="form-control form-control-sm" name="date_to"
value="{{ request('date_to') }}" placeholder="Hingga tarikh">
</div>
<div class="col-auto">
<button class="btn btn-sm btn-outline-secondary" type="submit">
<i class="bi bi-search me-1"></i>Cari
</button>
<a href="{{ route('admin.audit-logs.index') }}" class="btn btn-sm btn-outline-secondary ms-1">
<i class="bi bi-x me-1"></i>Padam
</a>
</div>
</form>
</div>
</div>
{{-- Table --}}
<div class="card">
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-sm table-hover mb-0">
<thead class="table-light">
<tr>
<th>Masa</th>
<th>Oleh</th>
<th>Tindakan</th>
<th>Sasaran</th>
<th>IP</th>
<th>Butiran</th>
</tr>
</thead>
<tbody>
@forelse($logs as $log)
<tr>
<td class="text-nowrap small text-muted">
{{ $log->created_at?->format('d/m/Y H:i:s') }}
</td>
<td>
<span class="fw-semibold small">{{ $log->actor?->name ?? 'Sistem' }}</span>
@if($log->actor_role)
<span class="badge bg-light text-dark ms-1 small">{{ $log->actor_role }}</span>
@endif
</td>
<td>
<code class="small">{{ $log->action }}</code>
</td>
<td class="small">
{{ $log->targetUser?->name ?? ($log->subject_type ? class_basename($log->subject_type).'#'.$log->subject_id : '—') }}
</td>
<td class="small text-muted">{{ $log->ip_address ?? '—' }}</td>
<td>
<button class="btn btn-sm btn-outline-secondary py-0"
data-bs-toggle="modal"
data-bs-target="#logModal{{ $log->id }}">
<i class="bi bi-eye"></i>
</button>
</td>
</tr>
{{-- Detail Modal --}}
<div class="modal fade" id="logModal{{ $log->id }}" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title"><code>{{ $log->action }}</code></h6>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body small">
<table class="table table-sm">
<tr><td width="30%">Masa</td><td>{{ $log->created_at?->format('d/m/Y H:i:s') }}</td></tr>
<tr><td>Oleh</td><td>{{ $log->actor?->name ?? 'Sistem' }} ({{ $log->actor_role }})</td></tr>
<tr><td>IP</td><td>{{ $log->ip_address ?? '—' }}</td></tr>
<tr>
<td>Justifikasi</td>
<td>{{ $log->justification ?? '—' }}</td>
</tr>
@if($log->old_values)
<tr>
<td>Nilai Lama</td>
<td><pre class="mb-0 small bg-light p-2 rounded">{{ json_encode($log->old_values, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE) }}</pre></td>
</tr>
@endif
@if($log->new_values)
<tr>
<td>Nilai Baru</td>
<td><pre class="mb-0 small bg-light p-2 rounded">{{ json_encode($log->new_values, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE) }}</pre></td>
</tr>
@endif
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Tutup</button>
</div>
</div>
</div>
</div>
@empty
<tr>
<td colspan="6" class="text-center text-muted py-4">
<i class="bi bi-inbox fs-4 d-block mb-2"></i>Tiada rekod log.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
@if($logs->hasPages())
<div class="card-footer bg-white">
{{ $logs->links() }}
</div>
@endif
</div>
@endsection