You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.6 KiB

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\AuditLog;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AuditLogController extends Controller
{
public function index(Request $request): JsonResponse
{
abort_unless($request->user()?->isSuperAdmin(), 403, '仅超级管理员可查看操作日志');
$query = AuditLog::query()
->with('user:id,username,name,role')
->orderByDesc('id');
if ($request->filled('keyword')) {
$keyword = trim((string) $request->input('keyword'));
$query->where(function ($q) use ($keyword) {
$q->where('username', 'like', "%{$keyword}%")
->orWhere('path', 'like', "%{$keyword}%")
->orWhere('action', 'like', "%{$keyword}%");
});
}
if ($request->filled('method') && $request->input('method') !== 'all') {
$query->where('method', strtoupper((string) $request->input('method')));
}
if ($request->filled('status_code')) {
$query->where('status_code', (int) $request->input('status_code'));
}
if ($request->filled('start_date')) {
$query->whereDate('created_at', '>=', (string) $request->input('start_date'));
}
if ($request->filled('end_date')) {
$query->whereDate('created_at', '<=', (string) $request->input('end_date'));
}
$pageSize = max(1, min(100, (int) $request->input('page_size', 20)));
return response()->json($query->paginate($pageSize));
}
}