column('id', 'ID')->sortable(); $grid->column('user.username', '用户名') ->link(function ($value) { return admin_route('dcat.admin.users.show', ['user' => $this->user_id]); }); $grid->column('user_id', '用户ID'); $grid->column('message', '日志消息') ->limit(50) ->help('用户操作的详细描述'); $grid->column('source_type', '来源类型') ->using([ 'fund' => '资金', 'item' => '物品', 'farm' => '农场', 'pet' => '宠物', 'system' => '系统', ]) ->label([ 'fund' => 'success', 'item' => 'primary', 'farm' => 'warning', 'pet' => 'info', 'system' => 'default', ]); $grid->column('source_id', '来源ID'); $grid->column('source_table', '来源表名') ->limit(20); $grid->column('created_at', '创建时间') ->sortable(); // 筛选器 $grid->filter(function (Grid\Filter $filter) { $filter->equal('user_id', '用户ID'); $filter->like('message', '日志消息'); $filter->equal('source_type', '来源类型') ->select([ 'fund' => '资金', 'item' => '物品', 'farm' => '农场', 'pet' => '宠物', 'system' => '系统', ]); $filter->between('created_at', '创建时间')->datetime(); }); // 默认排序 $grid->model()->orderBy('created_at', 'desc'); // 禁用创建按钮 $grid->disableCreateButton(); // 禁用编辑 $grid->disableEditButton(); // 批量操作 $grid->batchActions(function (Grid\Tools\BatchActions $batch) { $batch->add('清理选中日志', new \App\Module\Game\AdminControllers\Actions\BatchDeleteUserLogsAction()); }); // 工具栏 $grid->tools(function (Grid\Tools $tools) { $tools->append(new \App\Module\Game\AdminControllers\Tools\CleanExpiredLogsButton()); $tools->append(new \App\Module\Game\AdminControllers\Tools\UserLogStatsButton()); }); }); } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, UserLog::with(['user']), function (Show $show) { $show->field('id', 'ID'); $show->field('user.username', '用户名') ->link(function ($value) { return admin_route('dcat.admin.users.show', ['user' => $this->user_id]); }); $show->field('user_id', '用户ID'); $show->field('message', '日志消息') ->unescape(); $show->field('source_type', '来源类型') ->using([ 'fund' => '资金', 'item' => '物品', 'farm' => '农场', 'pet' => '宠物', 'system' => '系统', ]); $show->field('source_id', '来源ID'); $show->field('source_table', '来源表名'); $show->field('created_at', '创建时间'); // 禁用编辑和删除按钮 $show->disableEditButton(); $show->disableDeleteButton(); }); } /** * Make a form builder. * * @return Form */ protected function form() { return Form::make(UserLog::class, function (Form $form) { $form->display('id', 'ID'); $form->number('user_id', '用户ID') ->required() ->help('关联的用户ID'); $form->textarea('message', '日志消息') ->required() ->rows(3) ->help('用户操作的详细描述'); $form->select('source_type', '来源类型') ->options([ 'fund' => '资金', 'item' => '物品', 'farm' => '农场', 'pet' => '宠物', 'system' => '系统', ]) ->help('日志来源的模块类型'); $form->number('source_id', '来源ID') ->help('关联的业务记录ID'); $form->text('source_table', '来源表名') ->help('关联的数据库表名'); $form->display('created_at', '创建时间'); // 禁用删除按钮 $form->disableDeleteButton(); }); } /** * 清理过期日志 * * @return \Illuminate\Http\JsonResponse */ public function cleanExpiredLogs() { try { $days = request('days', 30); $deletedCount = UserLogService::cleanExpiredLogs($days); return response()->json([ 'status' => true, 'message' => "成功清理 {$deletedCount} 条过期日志", ]); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => '清理过期日志失败:' . $e->getMessage(), ]); } } /** * 获取用户日志统计信息 * * @return \Illuminate\Http\JsonResponse */ public function getStats() { try { $userId = request('user_id'); if (!$userId) { return response()->json([ 'status' => false, 'message' => '请提供用户ID', ]); } $stats = UserLogService::getUserLogStats($userId); return response()->json([ 'status' => true, 'data' => $stats, ]); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => '获取统计信息失败:' . $e->getMessage(), ]); } } }