column('id', 'ID')->sortable(); $grid->column('user.username', '用户名') ->link(function ($value) { return admin_url("users/{$this->user_id}"); }); $grid->column('user_id', '用户ID')->sortable(); $grid->column('rewardGroup.name', '奖励组') ->link(function ($value) { return admin_url("game/reward-groups/{$this->reward_group_id}"); }); $grid->column('rewardItem.name', '奖励项') ->display(function () { if ($this->rewardItem) { return $this->rewardItem->name; } return '未知奖励项'; }); $grid->column('count', '当前计数') ->display(function ($value) { $threshold = $this->pity_threshold; $percentage = $threshold > 0 ? round(($value / $threshold) * 100, 1) : 0; $color = $percentage >= 80 ? 'danger' : ($percentage >= 50 ? 'warning' : 'success'); return "{$value} ({$percentage}%)"; }); $grid->column('pity_threshold', '保底阈值')->sortable(); $grid->column('progress', '保底进度') ->display(function () { if ($this->pity_threshold <= 0) { return '未启用'; } $percentage = round(($this->count / $this->pity_threshold) * 100, 1); $color = $percentage >= 100 ? 'success' : ($percentage >= 80 ? 'warning' : 'info'); return "
{$percentage}%
"; }); $grid->column('last_attempt_at', '最后尝试时间') ->display(function ($value) { return $value ? $value->format('Y-m-d H:i:s') : '-'; }); $grid->column('last_hit_at', '最后命中时间') ->display(function ($value) { return $value ? $value->format('Y-m-d H:i:s') : '-'; }); $grid->column('created_at', '创建时间')->sortable(); $grid->column('updated_at', '更新时间')->sortable(); // 筛选器 $grid->filter(function (Grid\Filter $filter) { FilterHelper::defaultDateRange($filter); $filter->equal('user_id', '用户ID'); $filter->like('user.username', '用户名'); $filter->equal('reward_group_id', '奖励组') ->select(GameRewardGroup::pluck('name', 'id')); $filter->between('count', '当前计数'); $filter->between('pity_threshold', '保底阈值'); $filter->where(function ($query) { $query->whereRaw('count >= pity_threshold'); }, '已达保底', 'reached_pity')->checkbox(); }); // 工具栏 GridHelper::defaultToolbar($grid); // 禁用新增和编辑(这些记录由系统自动管理) $grid->disableCreateButton(); $grid->disableEditButton(); // 只允许查看详情 $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableEdit(); $actions->disableDelete(); }); // 排序 $grid->model()->orderBy('updated_at', 'desc'); }); } /** * 详情页面 * * @param mixed $id * @return Show */ public function detail($id): Show { return Show::make($id, GameRewardGroupPityCount::with(['user', 'rewardGroup', 'rewardItem']), function (Show $show) { ShowHelper::defaultShow($show); $show->field('id', 'ID'); $show->field('user.username', '用户名') ->link(function ($value) { return admin_url("users/{$this->user_id}"); }); $show->field('user_id', '用户ID'); $show->field('rewardGroup.name', '奖励组') ->link(function ($value) { return admin_url("game/reward-groups/{$this->reward_group_id}"); }); $show->field('rewardItem.name', '奖励项'); $show->field('count', '当前计数'); $show->field('pity_threshold', '保底阈值'); $show->field('progress', '保底进度') ->as(function () { if ($this->pity_threshold <= 0) { return '未启用保底机制'; } $percentage = round(($this->count / $this->pity_threshold) * 100, 1); $status = $percentage >= 100 ? '已达保底' : '未达保底'; return "{$percentage}% ({$status})"; }); $show->field('last_attempt_at', '最后尝试时间'); $show->field('last_hit_at', '最后命中时间'); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 禁用编辑和删除 $show->disableEditButton(); $show->disableDeleteButton(); }); } /** * 表单页面(仅用于查看,不允许编辑) * * @return Form */ public function form(): Form { return Form::make(GameRewardGroupPityCount::class, function (Form $form) { FormHelper::defaultForm($form); $form->display('id', 'ID'); $form->display('user_id', '用户ID'); $form->display('reward_group_id', '奖励组ID'); $form->display('reward_item_id', '奖励项ID'); $form->display('count', '当前计数'); $form->display('pity_threshold', '保底阈值'); $form->display('last_attempt_at', '最后尝试时间'); $form->display('last_hit_at', '最后命中时间'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 禁用所有操作 $form->disableCreatingCheck(); $form->disableEditingCheck(); $form->disableViewCheck(); }); } }