column('id', 'ID')->sortable(); $grid->column('name', '活动名称'); $grid->column('type', '活动类型')->display(function ($type) { return ACTIVITY_TYPE::getName($type); }); $grid->column('start_time', '开始时间')->sortable(); $grid->column('end_time', '结束时间')->sortable(); $grid->column('status', '状态')->display(function ($status) { return ACTIVITY_STATUS::getName($status); })->label([ ACTIVITY_STATUS::NOT_STARTED => 'default', ACTIVITY_STATUS::IN_PROGRESS => 'success', ACTIVITY_STATUS::ENDED => 'warning', ACTIVITY_STATUS::CLOSED => 'danger', ]); $grid->column('display_order', '显示顺序')->sortable(); $grid->column('reward_group_id', '奖励组ID'); $grid->column('reward_group_code', '奖励组编码'); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->like('name', '活动名称'); $filter->equal('type', '活动类型')->select(ACTIVITY_TYPE::getAll()); $filter->equal('status', '状态')->select(ACTIVITY_STATUS::getAll()); $filter->between('start_time', '开始时间')->datetime(); $filter->between('end_time', '结束时间')->datetime(); }); // 使用 RowAction 类添加行操作按钮 $grid->actions(function (Grid\Displayers\Actions $actions) { // 添加复制按钮 $actions->append(new DuplicateActivityAction()); // 添加状态变更按钮(这些按钮会根据当前状态自动显示或隐藏) $actions->append(new StartActivityAction()); $actions->append(new EndActivityAction()); $actions->append(new CloseActivityAction()); }); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new ActivityConfigRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('name', '活动名称'); $show->field('type', '活动类型')->as(function ($type) { return ACTIVITY_TYPE::getName($type); }); $show->field('description', '活动描述'); $show->field('start_time', '开始时间'); $show->field('end_time', '结束时间'); $show->field('status', '状态')->as(function ($status) { return ACTIVITY_STATUS::getName($status); }); $show->field('display_order', '显示顺序'); $show->field('icon', '活动图标')->image(); $show->field('banner', '活动横幅')->image(); $show->field('reward_group_id', '奖励组ID'); $show->field('reward_group_code', '奖励组编码'); $show->field('config_params', '配置参数')->json(); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 显示活动条件 $show->divider(); $show->field('条件')->as(function () { $conditions = $this->conditions()->get(); if ($conditions->isEmpty()) { return '无条件'; } $headers = ['ID', '条件类型', '参与条件', '完成条件', '显示顺序']; $rows = []; foreach ($conditions as $condition) { $rows[] = [ $condition->id, $condition->getConditionTypeName(), $condition->is_participation_condition ? '是' : '否', $condition->is_completion_condition ? '是' : '否', $condition->display_order ]; } return Card::make( Table::make($headers, $rows) ); }); // 显示奖励信息 $show->divider(); $show->field('奖励信息')->as(function () { if (empty($this->reward_group_id) && empty($this->reward_group_code)) { return '未配置奖励'; } $rewardInfo = '奖励组ID: ' . ($this->reward_group_id ?? '无') . '
'; $rewardInfo .= '奖励组编码: ' . ($this->reward_group_code ?? '无') . '
'; // 这里可以调用奖励组服务获取更详细的奖励信息 // 由于没有实际的奖励组服务,这里只返回基本信息 return $rewardInfo; })->unescape(); }); } /** * 创建表单 * * @return Form */ protected function form() { return Form::make(new ActivityConfigRepository(), function (Form $form) { $form->display('id', 'ID'); $form->text('name', '活动名称')->required(); $form->select('type', '活动类型')->options(ACTIVITY_TYPE::getAll())->required(); $form->textarea('description', '活动描述'); $form->datetime('start_time', '开始时间')->required(); $form->datetime('end_time', '结束时间')->required(); $form->select('status', '状态')->options(ACTIVITY_STATUS::getAll())->default(ACTIVITY_STATUS::NOT_STARTED); $form->number('display_order', '显示顺序')->default(0); $form->image('icon', '活动图标')->autoUpload(); $form->image('banner', '活动横幅')->autoUpload(); // 奖励组选择 $form->divider('奖励配置'); $form->number('reward_group_id', '奖励组ID')->help('填写奖励组ID或奖励组编码,两者选其一即可'); $form->text('reward_group_code', '奖励组编码')->help('填写奖励组ID或奖励组编码,两者选其一即可'); // 活动条件 $form->divider('活动条件'); $form->hasMany('conditions', '条件', function (Form\NestedForm $form) { $form->select('condition_type', '条件类型')->options(\App\Module\Activity\Enums\CONDITION_TYPE::getAll())->required(); $form->textarea('condition_params', '条件参数')->help('JSON格式,根据条件类型填写不同的参数'); $form->switch('is_participation_condition', '参与条件')->default(false); $form->switch('is_completion_condition', '完成条件')->default(false); $form->number('display_order', '显示顺序')->default(0); }); // 高级配置 $form->divider('高级配置'); $form->textarea('config_params', '配置参数')->help('JSON格式,用于存储活动特定的配置参数'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); }); } }