model()->with('consumeItems'); $grid->column('id', 'ID')->sortable(); $grid->column('name', '名称'); $grid->column('code', '编码'); $grid->column('description', '描述')->limit(30); // 消耗详情列 $grid->column('consume_details', '消耗详情')->display(function () { return $this->formatConsumeDetails(); })->width(300); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); // 添加消耗项数量统计和链接 $grid->column('items_count', '消耗项数量')->display(function () { $count = GameConsumeItem::where('group_id', $this->getAttribute('id'))->count(); return "{$count} "; }); // 添加行操作 $grid->actions(function (Grid\Displayers\Actions $actions) { // 添加复制操作 $actions->append(new DuplicateConsumeGroupAction()); // 添加管理消耗项操作 $actions->append(' 管理消耗项 '); }); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->like('name', '名称'); $filter->like('code', '编码'); }); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new GameConsumeGroupRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('name', '名称'); $show->field('code', '编码'); $show->field('description', '描述'); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 显示消耗项列表 $show->relation('consumeItems', '消耗项列表', function ($model) { $grid = new Grid(new GameConsumeItemRepository()); $grid->model()->where('group_id', $model->id); $grid->column('id', 'ID'); $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 = \App\Module\GameItems\Models\Item::find($targetId); return $item ? "{$item->name} (ID: {$targetId})" : "物品 (ID: {$targetId})"; } elseif ($consumeItem->consume_type == CONSUME_TYPE::CURRENCY->value) { $currency = \App\Module\Fund\Models\FundCurrencyModel::find($targetId); return $currency ? "{$currency->name} (ID: {$targetId})" : "货币 (ID: {$targetId})"; } elseif ($consumeItem->consume_type == CONSUME_TYPE::FUND->value) { $fund = \App\Module\Fund\Models\FundConfigModel::find($targetId); return $fund ? "{$fund->name} (ID: {$targetId})" : "代币账户 (ID: {$targetId})"; } return $targetId; }); $grid->column('quantity', '数量'); // 添加操作按钮 $grid->disableCreateButton(); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableDelete(); $actions->disableEdit(); $actions->disableView(); // 添加编辑链接 $actions->append(' 编辑 '); }); $grid->disableBatchDelete(); $grid->disableRowSelector(); // 添加创建按钮 $grid->tools(function (Grid\Tools $tools) use ($model) { $tools->append(' 添加消耗项 '); }); return $grid; }); // 添加返回按钮 $show->tools(function (Show\Tools $tools) { $tools->append(' 返回列表 '); }); }); } /** * 创建表单 * * @return Form */ protected function form() { return Form::make(new GameConsumeGroupRepository(), function (Form $form) { $form->display('id', 'ID'); $form->text('name', '名称')->required(); $form->text('code', '编码') ->required() ->creationRules(['required', 'unique:game_consume_groups,code']) ->updateRules(['required', 'unique:game_consume_groups,code,{{id}}']); $form->textarea('description', '描述'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 添加提示信息,告知用户如何管理消耗项 if ($form->isEditing()) { $id = $form->getKey(); $form->html('

消耗项管理已移至单独页面,请保存当前表单后使用以下链接管理消耗项:

管理消耗项
'); } else { $form->html('

消耗项管理已移至单独页面,请先保存当前表单,然后才能添加消耗项。

'); } }); } }