| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- namespace App\Module\Activity\AdminControllers;
- use App\Module\Activity\AdminControllers\Actions\CloseActivityAction;
- use App\Module\Activity\AdminControllers\Actions\DuplicateActivityAction;
- use App\Module\Activity\AdminControllers\Actions\EndActivityAction;
- use App\Module\Activity\AdminControllers\Actions\StartActivityAction;
- use App\Module\Activity\Enums\ACTIVITY_STATUS;
- use App\Module\Activity\Enums\ACTIVITY_TYPE;
- use App\Module\Activity\Repositorys\ActivityConfigRepository;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use Dcat\Admin\Http\Controllers\AdminController;
- use Dcat\Admin\Widgets\Card;
- use Dcat\Admin\Widgets\Table;
- /**
- * 活动管理控制器
- */
- class ActivityController extends AdminController
- {
- /**
- * 标题
- *
- * @return string
- */
- protected function title()
- {
- return '活动管理';
- }
- /**
- * 创建表格
- *
- * @return Grid
- */
- protected function grid()
- {
- return Grid::make(new ActivityConfigRepository(), function (Grid $grid) {
- $grid->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 ?? '无') . '<br>';
- $rewardInfo .= '奖励组编码: ' . ($this->reward_group_code ?? '无') . '<br>';
- // 这里可以调用奖励组服务获取更详细的奖励信息
- // 由于没有实际的奖励组服务,这里只返回基本信息
- 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', '更新时间');
- });
- }
- }
|