67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
use Spatie\Activitylog\Models\Activity;
|
|
|
|
class ActivityLogController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$perPage = $request->input('per_page', 10);
|
|
$sortBy = $request->input('sort_by', 'created_at');
|
|
$sortOrder = $request->input('sort_order', 'desc');
|
|
|
|
$query = Activity::with('causer');
|
|
|
|
if ($sortBy === 'created_at') {
|
|
$query->orderBy($sortBy, $sortOrder);
|
|
} else {
|
|
$query->latest();
|
|
}
|
|
|
|
$activities = $query->paginate($perPage)
|
|
->through(function ($activity) {
|
|
$subjectMap = [
|
|
'App\Models\User' => '使用者',
|
|
'App\Models\Role' => '角色',
|
|
'App\Models\Product' => '商品',
|
|
'App\Models\Vendor' => '廠商',
|
|
'App\Models\Category' => '商品分類',
|
|
'App\Models\Unit' => '單位',
|
|
'App\Models\PurchaseOrder' => '採購單',
|
|
'App\Models\Warehouse' => '倉庫',
|
|
'App\Models\Inventory' => '庫存',
|
|
];
|
|
|
|
$eventMap = [
|
|
'created' => '新增',
|
|
'updated' => '更新',
|
|
'deleted' => '刪除',
|
|
];
|
|
|
|
return [
|
|
'id' => $activity->id,
|
|
'description' => $eventMap[$activity->event] ?? $activity->event,
|
|
'subject_type' => $subjectMap[$activity->subject_type] ?? class_basename($activity->subject_type),
|
|
'event' => $activity->event,
|
|
'causer' => $activity->causer ? $activity->causer->name : 'System',
|
|
'created_at' => $activity->created_at->format('Y-m-d H:i:s'),
|
|
'properties' => $activity->properties,
|
|
];
|
|
});
|
|
|
|
return Inertia::render('Admin/ActivityLog/Index', [
|
|
'activities' => $activities,
|
|
'filters' => [
|
|
'per_page' => $request->input('per_page', '10'),
|
|
'sort_by' => $request->input('sort_by'),
|
|
'sort_order' => $request->input('sort_order'),
|
|
],
|
|
]);
|
|
}
|
|
}
|