columnId(); $grid->column('name', '配方名称'); $grid->column('code', '配方编码'); $grid->column('description', '描述')->limit(50); $grid->column('consume_group_id', '消耗组')->display(function ($value) { if (!$value) return '无'; $group = \App\Module\Game\Models\GameConsumeGroup::find($value); return $group ? $group->name : "消耗组 {$value}"; }); $grid->column('reward_group_id', '奖励组')->display(function ($value) { if (!$value) return '无'; $group = \App\Module\Game\Models\GameRewardGroup::find($value); return $group ? $group->name : "奖励组 {$value}"; }); $grid->column('condition_group_id', '条件组')->display(function ($value) { if (!$value) return '无'; $group = \App\Module\Game\Models\GameConditionGroup::find($value); return $group ? $group->name : "条件组 {$value}"; }); $grid->column('success_rate', '成功率')->display(function ($value) { return ($value * 100) . '%'; }); $grid->column('cooldown_seconds', '冷却时间(秒)'); $grid->column('is_active', '是否激活')->switch(); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); // 筛选 $grid->filter(function ($filter) { $helper = new FilterHelper($filter, $this); $helper->equal('id', 'ID'); $filter->like('name', '配方名称'); $filter->like('code', '配方编码'); $filter->equal('consume_group_id', '消耗组')->select( \App\Module\Game\Models\GameConsumeGroup::pluck('name', 'id') ); $filter->equal('reward_group_id', '奖励组')->select( \App\Module\Game\Models\GameRewardGroup::pluck('name', 'id') ); $filter->equal('condition_group_id', '条件组')->select( \App\Module\Game\Models\GameConditionGroup::pluck('name', 'id') ); $filter->equal('is_active', '是否激活')->radio([ 1 => '是', 0 => '否', ]); }); }); } /** * 详情页 * * @param mixed $id * @param Content $content * @return Content */ public function show($id, Content $content) { return $content ->header($this->title) ->description('详情') ->body($this->detail($id)); } /** * 详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new ItemRecipeRepository(), function (Show $show) { $helper = new ShowHelper($show, $this); $helper->field('id', 'ID'); $helper->field('name', '配方名称'); $helper->field('code', '配方编码'); $helper->field('description', '配方描述'); $show->field('success_rate', '成功率')->as(function ($value) { return ($value * 100) . '%'; }); $helper->field('cooldown_seconds', '冷却时间(秒)'); $show->field('is_active', '是否激活')->as(function ($value) { return $value ? '是' : '否'; }); // 显示消耗组 $show->divider('消耗组'); $show->field('consumeGroup.name', '消耗组名称'); $show->field('consumeGroup.description', '消耗组描述'); // 显示奖励组 $show->divider('奖励组'); $show->field('rewardGroup.name', '奖励组名称'); $show->field('rewardGroup.description', '奖励组描述'); // 显示条件组 $show->divider('条件组'); $show->field('conditionGroup.name', '条件组名称'); $show->field('conditionGroup.description', '条件组描述'); $helper->field('created_at', '创建时间'); $helper->field('updated_at', '更新时间'); }); } /** * 创建页 * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header($this->title) ->description('创建') ->body($this->form()); } /** * 编辑页 * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header($this->title) ->description('编辑') ->body($this->form()->edit($id)); } /** * 表单 * * @return Form */ protected function form() { return Form::make(new ItemRecipeRepository(), function (Form $form) { $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this); $helper->text('name', '配方名称')->required(); $helper->text('code', '配方编码') ->help('唯一的配方编码,用于程序识别'); $form->textarea('description', '配方描述') ->help('配方的详细描述'); // 消耗组选择 $form->select('consume_group_id', '消耗组') ->options(\App\Module\Game\Models\GameConsumeGroup::pluck('name', 'id')) ->help('选择合成时需要消耗的材料组'); // 奖励组选择 $form->select('reward_group_id', '奖励组') ->options(\App\Module\Game\Models\GameRewardGroup::pluck('name', 'id')) ->help('选择合成成功后获得的奖励组') ->required(); // 条件组选择 $form->select('condition_group_id', '条件组') ->options(\App\Module\Game\Models\GameConditionGroup::pluck('name', 'id')) ->help('选择解锁该配方需要满足的条件组(可选)'); $form->rate('success_rate', '成功率') ->default(1) ->help('合成成功的概率,1表示100%'); $form->number('cooldown_seconds', '冷却时间(秒)') ->default(0) ->min(0) ->help('两次合成之间的冷却时间,0表示无冷却'); $form->number('sort_order', '排序权重') ->default(0) ->help('数值越大排序越靠前'); $form->switch('is_active', '是否激活') ->default(true) ->help('是否激活该配方'); }); } }