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

ID: {$group->id}

" . "

名称: {$group->name}

" . "

编码: {$group->code}

" . "

描述: {$group->description}

" )); } } return $content ->title($this->title()) ->description('管理消耗项') ->body($this->grid()); } /** * 创建表格 * * @return Grid */ protected function grid() { return Grid::make(new GameConsumeItemRepository(), 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(' 添加消耗项 '); }); } $grid->column('id', 'ID')->sortable(); $grid->column('group_id', '消耗组')->display(function ($groupId) { $group = GameConsumeGroup::find($groupId); return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})"; }); $grid->column('consume_type', '消耗类型')->display(function ($type) { return CONSUME_TYPE::getName($type); }); $grid->column('target_id', '目标')->display(function ($targetId) { // 获取完整的消耗项对象 $consumeItem = GameConsumeItem::find($this->getAttribute('id')); if (!$consumeItem) { return $targetId; } // 根据消耗类型显示目标名称 if ($consumeItem->consume_type == CONSUME_TYPE::ITEM->value) { $item = Item::find($targetId); return $item ? "{$item->name} (ID: {$targetId})" : "物品 (ID: {$targetId})"; } elseif ($consumeItem->consume_type == CONSUME_TYPE::CURRENCY->value) { $currency = FundCurrencyModel::find($targetId); return $currency ? "{$currency->name} (ID: {$targetId})" : "货币 (ID: {$targetId})"; } elseif ($consumeItem->consume_type == CONSUME_TYPE::FUND->value) { $fund = FundConfigModel::find($targetId); return $fund ? "{$fund->name} (ID: {$targetId})" : "代币账户 (ID: {$targetId})"; } return $targetId; }); $grid->column('quantity', '数量'); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); // 添加行操作 $grid->actions(function (Grid\Displayers\Actions $actions) { // 添加复制操作 $actions->append(new DuplicateConsumeItemAction()); }); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->equal('group_id', '消耗组')->select( GameConsumeGroup::pluck('name', 'id') ); $filter->equal('consume_type', '消耗类型')->select(CONSUME_TYPE::getAll()); $filter->equal('target_id', '目标ID'); }); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new GameConsumeItemRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('group_id', '消耗组')->as(function ($groupId) { $group = GameConsumeGroup::find($groupId); return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})"; }); $show->field('consume_type', '消耗类型')->as(function ($type) { return CONSUME_TYPE::getName($type); }); $show->field('target_id', '目标ID')->as(function ($targetId) { // 根据消耗类型显示目标名称 $consumeType = $this->getAttribute('consume_type'); if ($consumeType == CONSUME_TYPE::ITEM->value) { $item = Item::find($targetId); return $item ? "{$item->name} ({$targetId})" : $targetId; } elseif ($consumeType == CONSUME_TYPE::CURRENCY->value) { $currency = FundCurrencyModel::find($targetId); return $currency ? "{$currency->name} ({$targetId})" : $targetId; } elseif ($consumeType == CONSUME_TYPE::FUND->value) { $fund = FundConfigModel::find($targetId); return $fund ? "{$fund->name} ({$targetId})" : $targetId; } return $targetId; }); $show->field('param1', '参数1'); $show->field('param2', '参数2'); $show->field('quantity', '数量'); $show->field('extra_data', '额外数据')->json(); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 创建表单 * * @return Form */ protected function form() { return Form::make(new GameConsumeItemRepository(), function (Form $form) { $form->display('id', 'ID'); // 如果有group_id参数,则默认选中该消耗组 $groupId = request()->get('group_id'); $form->select('group_id', '消耗组') ->options(GameConsumeGroup::pluck('name', 'id')) ->default($groupId); $form->select('consume_type', '消耗类型') ->options(CONSUME_TYPE::getAll()) ->required() ->default(request()->input('consume_type')); $form->select('target_id', '目标ID') ->options(function () { $conditionType = request()->input('consume_type',$this->consume_type); // 根据条件类型返回不同的选项 if ($conditionType == REWARD_TYPE::ITEM->value) { return Item::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONSUME_TYPE::CURRENCY->value) { return FundCurrencyModel::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONSUME_TYPE::FUND->value) { return FundConfigModel::pluck('name', 'id')->toArray(); } return []; }); $form->number('param1', '参数1') ->default(0) ->help('根据消耗类型不同含义,如物品的品质、货币的来源等'); $form->number('param2', '参数2') ->default(0) ->help('根据消耗类型不同含义,如物品的绑定状态、货币的类型等'); $form->number('quantity', '数量') ->default(1) ->min(1) ->required(); $form->textarea('extra_data', '额外数据') ->help('JSON格式,可存储特定消耗类型的额外参数'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); $form->html(<< $(function() { // 监听条件类型变化 $('select[name="consume_type"]').on('change', function() { // 刷新页面,传递条件类型参数 var url = new URL(window.location.href); url.searchParams.set('consume_type', $(this).val()); // 保留group_id参数 var groupId = url.searchParams.get('group_id'); if (groupId) { url.searchParams.set('group_id', groupId); } window.location.href = url.toString(); }); }); HTML); // 保存后跳转回列表页 $form->saved(function (Form $form) { $groupId = $form->model()->group_id; return redirect(admin_url('game-consume-items?group_id=' . $groupId)); }); }); } }