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 .= '
| 奖励类型 | 奖励名称 | 数量 |
|---|---|---|
| ' . $rewardTypeName . ' | '; $html .= '' . $targetName . ' | '; $html .= '' . $item['quantity'] . ' | '; $html .= '