column('id', 'ID')->sortable(); $grid->column('user_id', '用户ID'); $grid->column('activity_id', '活动')->display(function ($activityId) { $activity = ActivityConfig::find($activityId); return $activity ? $activity->name : "未知活动({$activityId})"; }); $grid->column('participate_time', '参与时间')->sortable(); $grid->column('completion_status', '完成状态')->display(function ($status) { return PARTICIPATION_STATUS::getName($status); })->label([ PARTICIPATION_STATUS::IN_PROGRESS => 'primary', PARTICIPATION_STATUS::COMPLETED => 'success', PARTICIPATION_STATUS::FAILED => 'danger', ]); $grid->column('completion_time', '完成时间'); $grid->column('reward_status', '奖励状态')->display(function ($status) { return REWARD_STATUS::getName($status); })->label([ REWARD_STATUS::NOT_CLAIMED => 'warning', REWARD_STATUS::CLAIMED => 'success', REWARD_STATUS::EXPIRED => 'danger', ]); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->equal('user_id', '用户ID'); $filter->equal('activity_id', '活动')->select( ActivityConfig::pluck('name', 'id') ); $filter->equal('completion_status', '完成状态')->select(PARTICIPATION_STATUS::getAll()); $filter->equal('reward_status', '奖励状态')->select(REWARD_STATUS::getAll()); $filter->between('participate_time', '参与时间')->datetime(); $filter->between('completion_time', '完成时间')->datetime(); }); // 禁用创建按钮 $grid->disableCreateButton(); // 使用 RowAction 类添加行操作按钮 $grid->actions(function (Grid\Displayers\Actions $actions) { // 添加标记完成按钮(只在进行中状态显示) $actions->append(new CompleteParticipationAction()); // 添加标记已领取按钮(只在已完成且未领取状态显示) $actions->append(new ClaimRewardAction()); // 添加标记已过期按钮(只在未领取状态显示) $actions->append(new ExpireRewardAction()); }); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new ActivityParticipationRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('user_id', '用户ID'); $show->field('activity_id', '活动')->as(function ($activityId) { $activity = ActivityConfig::find($activityId); return $activity ? $activity->name : "未知活动({$activityId})"; }); $show->field('participate_time', '参与时间'); $show->field('completion_status', '完成状态')->as(function ($status) { return PARTICIPATION_STATUS::getName($status); }); $show->field('completion_time', '完成时间'); $show->field('reward_status', '奖励状态')->as(function ($status) { return REWARD_STATUS::getName($status); }); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 显示用户活动数据 $show->divider(); $show->field('用户活动数据')->as(function () { $model = $this->model(); $userData = \App\Module\Activity\Models\UserActivityData::where('user_id', $model->user_id) ->where('activity_id', $model->activity_id) ->first(); if (!$userData) { return '无数据'; } $html = '
| 进度 | ' . $userData->progress . ' |
|---|---|
| 最后更新 | ' . $userData->last_update . ' |
| 详细进度数据 | ' . json_encode($userData->progress_data, JSON_PRETTY_PRINT) . ' |