disableCreateButton(); $grid->disableBatchDelete(); $grid->disableDeleteButton(); $grid->disableEditButton(); // 只保留详情按钮 $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableDelete(); $actions->disableEdit(); $actions->disableQuickEdit(); // 保留详情按钮(show) }); $helper->columnId(); $grid->column('user_id', '用户ID'); $grid->column('chest.name', '宝箱名称'); $grid->column('open_quantity', '开启数量'); // 奖励内容列 - 使用RewardTypeDescriptor解析 $grid->column('result_items', '奖励内容')->display(function ($resultItems) { if (empty($resultItems)) { return '无'; } $rewardTexts = []; // 遍历每次开箱结果 foreach ($resultItems as $index => $chestResult) { $chestRewards = []; // 遍历每个奖励物品(RewardItemDto格式) foreach ($chestResult as $item) { // 使用RewardTypeDescriptor解析奖励信息 $rewardText = \App\Module\Game\Services\RewardTypeDescriptor::formatRewardDisplay( $item['rewardType'], // 奖励类型 $item['targetId'], // 目标ID $item['quantity'], // 数量 $item['param1'] ?? 0, // 参数1 $item['param2'] ?? 0, // 参数2 false // 不使用HTML徽章样式 ); $chestRewards[] = $rewardText; } if (count($resultItems) > 1) { $rewardTexts[] = '第' . ($index + 1) . '次: ' . implode(', ', $chestRewards); } else { $rewardTexts = $chestRewards; } } return implode('
', $rewardTexts); }); $grid->column('open_time', '开启时间')->sortable(); $grid->column('ip_address', 'IP地址'); $grid->column('created_at', '创建时间'); // 筛选 $grid->filter(function ($filter) { $helper = new FilterHelper($filter, $this); $helper->equal('id', 'ID'); $helper->equal('user_id', '用户ID'); $filter->equal('chest_id', '宝箱')->select( \App\Module\GameItems\Models\Item::where('type', 5)->pluck('name', 'id') ); $filter->between('open_time', '开启时间')->datetime(); }); }); } /** * 详情页 * * @param mixed $id * @param Content $content * @return Content */ public function show($id, Content $content) { return $content ->header($this->title) ->description('详情') ->body($this->detail($id)); } /** * 详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new ItemChestOpenLogRepository(), function (Show $show) { $helper = new ShowHelper($show, $this); // 禁用编辑和删除按钮 $show->panel()->tools(function ($tools) { $tools->disableEdit(); $tools->disableDelete(); }); $helper->field('id', 'ID'); $helper->field('user_id', '用户ID'); $show->field('chest.name', '宝箱名称'); $helper->field('open_quantity', '开启数量'); // 显示奖励内容 $show->field('result_items', '奖励内容')->as(function ($resultItems) { if (empty($resultItems)) { return '无'; } if (is_string($resultItems)) { $resultItems = json_decode($resultItems, true); } if (is_array($resultItems)) { $html = ''; foreach ($resultItems as $index => $chestResult) { $html .= '

第' . ($index + 1) . '次开箱

'; $html .= ''; $html .= ''; $html .= ''; foreach ($chestResult as $item) { // 使用RewardTypeDescriptor解析奖励信息(RewardItemDto格式) $rewardTypeName = \App\Module\Game\Enums\REWARD_TYPE::getName($item['rewardType']); $targetName = \App\Module\Game\Services\RewardTypeDescriptor::getTargetName( $item['rewardType'], $item['targetId'], $item['param1'] ?? 0, $item['param2'] ?? 0 ); $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; } $html .= '
奖励类型奖励名称数量
' . $rewardTypeName . '' . $targetName . '' . $item['quantity'] . '
'; } return $html; } return $resultItems; }); $helper->field('open_time', '开启时间'); $helper->field('ip_address', 'IP地址'); $helper->field('device_info', '设备信息'); $helper->field('created_at', '创建时间'); }); } }