get('group_id'); // 如果有奖励组ID,则显示该奖励组的信息 if ($groupId) { $group = GameRewardGroup::find($groupId); if ($group) { $content->body(new Card( '奖励组信息', "

ID: {$group->id}

" . "

名称: {$group->name}

" . "

编码: {$group->code}

" . "

描述: {$group->description}

" . "

随机发放: " . ($group->is_random ? '是' : '否') . "

" . ($group->is_random ? "

随机数量: {$group->random_count}

" : '') )); } } return $content ->title($this->title()) ->description('管理奖励项') ->body($this->grid()); } /** * 创建表格 * * @return Grid */ protected function grid() { return Grid::make(new GameRewardItemRepository(), function (Grid $grid) { // 获取请求中的奖励组ID $groupId = request()->get('group_id'); // 如果有奖励组ID,则只显示该奖励组的奖励项 if ($groupId) { $grid->model()->where('group_id', $groupId); // 添加返回按钮 $grid->tools(function (Grid\Tools $tools) use ($groupId) { $tools->append(' 返回奖励组 '); }); // 添加创建按钮 $grid->tools(function (Grid\Tools $tools) use ($groupId) { $tools->append(' 添加奖励项 '); }); } else { // 如果没有奖励组ID,则添加奖励组筛选 $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->equal('group_id', '奖励组')->select( GameRewardGroup::pluck('name', 'id') ); $filter->equal('reward_type', '奖励类型')->select(REWARD_TYPE::getAll()); $filter->equal('target_id', '目标ID'); $filter->equal('is_guaranteed', '必中')->select([0 => '否', 1 => '是']); }); } $grid->column('id', 'ID')->sortable(); $grid->column('group_id', '奖励组')->display(function ($groupId) { $group = GameRewardGroup::find($groupId); return $group ? "{$group->name} (ID: {$groupId})" : "未知 ({$groupId})"; }); $grid->column('reward_type', '奖励类型')->display(function ($type) { return REWARD_TYPE::getName($type); }); $grid->column('target_id', '目标')->display(function ($targetId) { // 获取当前行的奖励类型 $rewardType = $this->getAttribute('reward_type'); // 根据奖励类型显示不同的目标信息 switch ($rewardType) { case REWARD_TYPE::ITEM->value: $item = Item::find($targetId); return $item ? "{$item->name} (ID: {$targetId})" : "物品 (ID: {$targetId})"; case REWARD_TYPE::CURRENCY->value: $currency = FundCurrencyModel::find($targetId); return $currency ? "{$currency->name} (ID: {$targetId})" : "货币 (ID: {$targetId})"; case REWARD_TYPE::FUND->value: $fund = FundConfigModel::find($targetId); return $fund ? "{$fund->name} (ID: {$targetId})" : "代币账户 (ID: {$targetId})"; case REWARD_TYPE::PET_EXP->value: return "宠物经验 (宠物ID: {$targetId})"; case REWARD_TYPE::PET_ENERGY->value: return "宠物体力 (宠物ID: {$targetId})"; case REWARD_TYPE::OTHER->value: return "其他奖励 (ID: {$targetId})"; default: return "未知奖励类型 (ID: {$targetId})"; } }); $grid->column('param1', '参数1'); $grid->column('param2', '参数2'); $grid->column('quantity', '数量'); $grid->column('weight', '权重'); $grid->column('is_guaranteed', '必中')->switch(); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new GameRewardItemRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('group_id', '奖励组')->as(function ($groupId) { $group = GameRewardGroup::find($groupId); return $group ? "{$group->name} (ID: {$groupId})" : "未知 ({$groupId})"; }); $show->field('reward_type', '奖励类型')->as(function ($type) { return REWARD_TYPE::getName($type); }); // 根据奖励类型显示不同的目标信息 $show->field('target_id', '目标')->unescape()->as(function ($targetId) { // 获取当前记录的奖励类型 $rewardType = $this->getAttribute('reward_type'); switch ($rewardType) { case REWARD_TYPE::ITEM->value: $item = Item::find($targetId); return $item ? "{$item->name} (ID: {$targetId})" : "物品 (ID: {$targetId})"; case REWARD_TYPE::CURRENCY->value: $currency = FundCurrencyModel::find($targetId); return $currency ? "{$currency->name} (ID: {$targetId})" : "货币 (ID: {$targetId})"; case REWARD_TYPE::FUND->value: $fund = FundConfigModel::find($targetId); return $fund ? "{$fund->name} (ID: {$targetId})" : "代币账户 (ID: {$targetId})"; case REWARD_TYPE::PET_EXP->value: return "宠物经验 (宠物ID: {$targetId})"; case REWARD_TYPE::PET_ENERGY->value: return "宠物体力 (宠物ID: {$targetId})"; case REWARD_TYPE::OTHER->value: return "其他奖励 (ID: {$targetId})"; default: return "未知奖励类型 (ID: {$targetId})"; } }); $show->field('param1', '参数1'); $show->field('param2', '参数2'); $show->field('quantity', '数量'); $show->field('weight', '权重'); $show->field('is_guaranteed', '必中')->as(function ($value) { return $value ? '是' : '否'; }); $show->field('extra_data', '额外数据')->json(); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 添加返回按钮 $show->tools(function (Show\Tools $tools) { // 简单地添加返回列表按钮,不需要获取当前记录ID $tools->append(' 返回列表 '); }); }); } /** * 创建表单 * * @return Form */ protected function form() { return Form::make(new GameRewardItemRepository(), function (Form $form) { $form->display('id', 'ID'); // 获取请求中的奖励组ID $groupId = request()->get('group_id'); // 如果有奖励组ID,则设置默认值 if ($groupId && $form->isCreating()) { $form->hidden('group_id')->default($groupId); // 显示奖励组信息 $group = GameRewardGroup::find($groupId); if ($group) { $form->display('group_info', '奖励组')->value("{$group->name} (ID: {$groupId})"); } } else { $form->select('group_id', '奖励组') ->options(GameRewardGroup::pluck('name', 'id')) ->required(); } $form->select('reward_type', '奖励类型') ->options(REWARD_TYPE::getAll()) ->required(); $form->select('target_id', '目标ID') ->options(function () use ($form) { // 获取当前奖励类型 $rewardType = $form->model()->reward_type ?? request()->get('reward_type'); // 根据奖励类型返回不同的选项 if ($rewardType == REWARD_TYPE::ITEM->value) { // 物品类型,返回物品列表 return Item::pluck('name', 'id')->toArray(); } elseif ($rewardType == REWARD_TYPE::CURRENCY->value) { // 货币类型,返回货币列表 return FundCurrencyModel::pluck('name', 'id')->toArray(); } elseif ($rewardType == REWARD_TYPE::FUND->value) { // 代币账户类型,返回代币账户列表 return FundConfigModel::pluck('name', 'id')->toArray(); } // 默认返回空选项 return []; }) ->required() ->help('根据奖励类型不同,表示物品ID、货币ID等'); $form->number('param1', '参数1') ->default(0) ->help('根据奖励类型不同含义,如物品的品质、货币的来源等'); $form->number('param2', '参数2') ->default(0) ->help('根据奖励类型不同含义,如物品的绑定状态、货币的类型等'); $form->number('quantity', '数量') ->default(1) ->min(1) ->required(); $form->number('weight', '权重') ->default(1.00) ->step(0.01) ->required() ->help('随机发放时使用,权重越高,被选中的概率越大'); $form->switch('is_guaranteed', '必中') ->default(0) ->help('开启后,在随机发放时会优先选择'); $form->textarea('extra_data', '额外数据') ->help('JSON格式,可存储特定奖励类型的额外参数'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 添加动态更新目标ID选择器的JavaScript $form->script(<<saved(function (Form $form) { return redirect(admin_url('game-reward-items?group_id=' . $form->model()->group_id)); }); }); } }