title(OperationLogServiceProvider::trans('log.title')) ->description(trans('admin.list')) ->body($this->grid()); } protected function grid() { return new Grid(OperationLog::with('user'), function (Grid $grid) { $grid->column('id', 'ID')->sortable(); $grid->column('user', trans('admin.user')) ->display(function ($user) { if (! $user) { return; } $user = Helper::array($user); return $user['name'] ?? ($user['username'] ?? $user['id']); }) ->link(function () { if ($this->user) { return admin_url('auth/users/'.$this->user['id']); } }); $grid->column('method', trans('admin.method')) ->label(OperationLog::$methodColors) ->filterByValue(); $grid->column('path', trans('admin.uri'))->display(function ($v) { return "$v"; })->filterByValue(); $grid->column('ip', 'IP')->filterByValue(); $grid->column('input')->display(function ($input) { $input = json_decode($input, true); if (empty($input)) { return; } $input = Arr::except($input, ['_pjax', '_token', '_method', '_previous_']); if (empty($input)) { return; } return '
'.json_encode($input, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE).'
'; }); $grid->column('created_at', trans('admin.created_at')); $grid->model()->orderBy('id', 'DESC'); $grid->disableCreateButton(); $grid->disableQuickEditButton(); $grid->disableEditButton(); $grid->disableViewButton(); $grid->showColumnSelector(); $grid->setActionClass(Grid\Displayers\Actions::class); $grid->filter(function (Grid\Filter $filter) { $userModel = config('admin.database.users_model'); $filter->in('user_id', trans('admin.user')) ->multipleSelect($userModel::pluck('name', 'id')); $filter->equal('method', trans('admin.method')) ->select( array_combine(OperationLog::$methods, OperationLog::$methods) ); $filter->like('path', trans('admin.uri')); $filter->equal('ip', 'IP'); $filter->between('created_at')->datetime(); }); }); } public function destroy($id) { $ids = explode(',', $id); OperationLog::destroy(array_filter($ids)); return JsonResponse::make() ->success(trans('admin.delete_succeeded')) ->refresh() ->send(); } }