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
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));
|
|
}
|
|
}
|
|
|