column('id', 'ID')->sortable(); $grid->column('seed_id', '种子ID')->sortable(); $grid->column('item_id', '产出物品ID')->sortable(); $grid->column('min_amount', '最小产出数量')->sortable(); $grid->column('max_amount', '最大产出数量')->sortable(); $grid->column('probability', '产出概率')->display(function ($value) { return ($value * 100) . '%'; })->sortable(); $grid->column('is_default', '默认产出')->bool()->sortable(); $grid->column('created_at', '创建时间')->sortable(); $grid->column('updated_at', '更新时间')->sortable(); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->equal('seed_id', '种子ID'); $filter->equal('item_id', '产出物品ID'); $filter->equal('is_default', '默认产出')->radio([ 1 => '是', 0 => '否', ]); $filter->between('created_at', '创建时间')->datetime(); }); }); } /** * 构建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new FarmSeedOutputRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('seed_id', '种子ID'); $show->field('item_id', '产出物品ID'); $show->field('min_amount', '最小产出数量'); $show->field('max_amount', '最大产出数量'); $show->field('probability', '产出概率')->as(function ($value) { return ($value * 100) . '%'; }); $show->field('is_default', '默认产出')->as(function ($value) { return $value ? '是' : '否'; }); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 构建表单 * * @return Form */ protected function form() { return Form::make(new FarmSeedOutputRepository(), function (Form $form) { $form->display('id', 'ID'); // 获取所有种子选项 $seedRepository = new FarmSeedRepository(); $seedOptions = $seedRepository->all()->pluck('name', 'id')->toArray(); $form->select('seed_id', '种子ID')->options($seedOptions)->required(); $form->number('item_id', '产出物品ID')->min(1)->required(); $form->number('min_amount', '最小产出数量')->min(0)->required(); $form->number('max_amount', '最大产出数量')->min(0)->required(); $form->rate('probability', '产出概率')->max(1)->step(0.01)->required(); $form->switch('is_default', '默认产出')->default(false); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 验证概率总和不超过1 $form->saving(function (Form $form) { if ($form->isCreating()) { $seedId = $form->seed_id; $probability = $form->probability; $repository = new FarmSeedOutputRepository(); $totalProbability = $repository->findBySeedId($seedId)->sum('probability'); if ($totalProbability + $probability > 1) { return $form->error('该种子的产出概率总和已超过100%'); } } if ($form->isEditing()) { $id = $form->getKey(); $seedId = $form->seed_id; $probability = $form->probability; $repository = new FarmSeedOutputRepository(); $currentItem = $repository->find($id); $totalProbability = $repository->findBySeedId($seedId)->sum('probability') - $currentItem->probability; if ($totalProbability + $probability > 1) { return $form->error('该种子的产出概率总和已超过100%'); } } }); }); } }