columnId(); $grid->column('seed_id', '种子'); $grid->column('seed.name', '种子'); $grid->column('item_id', '产出物品'); $grid->column('item.name', '产出物品'); $grid->column('min_amount', '最小产出数量')->sortable(); $grid->column('max_amount', '最大产出数量')->sortable(); $grid->column('probability', '产出概率')->display(function ($value) { return $value . '%'; })->sortable(); $grid->column('is_default', '默认产出')->switch(); $helper->columnCreatedAt(); $helper->columnUpdatedAt(); $grid->filter(function (Grid\Filter $filter) { $filterHelper = new FilterHelper($filter, $this); $filterHelper->equalId(); $filterHelper->equalSelectSeed('seed_id', '种子'); $filterHelper->equalSelectItem('item_id', '产出物品'); $filterHelper->equal('is_default', '默认产出'); $filterHelper->betweenDatetime('created_at', '创建时间'); }); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableDelete(); // 添加复制功能 $actions->append(new \App\Module\Farm\AdminControllers\Actions\CopyAction()); }); }); } /** * 构建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new FarmSeedOutputRepository(), function (Show $show) { $helper = new ShowHelper($show, $this); $show->field('id', 'ID'); $helper->fieldSeed('seed_id', '种子'); $helper->fieldItem('item_id', '产出物品'); $show->field('min_amount', '最小产出数量'); $show->field('max_amount', '最大产出数量'); $show->field('probability', '产出概率')->as(function ($value) { return $value . '%'; }); $helper->fieldIsDefault('is_default', '默认产出'); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 构建表单 * * @return Form */ protected function form() { return Form::make(new FarmSeedOutputRepository(), function (Form $form) { $helper = new FormHelper($form, $this); $form->display('id', 'ID'); $helper->selectSeed('seed_id', '种子'); $helper->selectModelItem('item_id', '产出物品'); $form->number('min_amount', '最小产出数量')->min(0)->required(); $form->number('max_amount', '最大产出数量')->min(0)->required(); $form->number('probability', '产出概率')->min(0)->max(100) ->help('请输入 0-100 之间的数字,表示百分比,如 10 表示 10%') ->required(); $helper->switch('is_default', '默认产出'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 验证概率总和不超过100%(概率值为 0-100,如 10 表示 10%) $form->saving(function (Form $form) { if ($form->isCreating()) { $seedId = $form->seed_id; $probability = $form->probability; $totalProbability = (new FarmSeedOutput())->where('seed_id', $seedId)->sum('probability'); if ($totalProbability + $probability > 100) { return $form->error('该种子的产出概率总和已超过100%'); } } if ($form->isEditing()) { $id = $form->getKey(); $seedId = $form->seed_id; $probability = $form->probability; $currentItem = (new FarmSeedOutput())->find($id); $totalProbability = (new FarmSeedOutput()) ->where('seed_id', $seedId) ->sum('probability') - $currentItem->probability; if ($totalProbability + $probability > 100) { return $form->error('该种子的产出概率总和已超过100%'); } } }); }); } }