|
|
@@ -2,7 +2,11 @@
|
|
|
|
|
|
namespace App\Module\Farm\AdminControllers;
|
|
|
|
|
|
+use App\Module\Farm\AdminControllers\Helper\FilterHelper;
|
|
|
+use App\Module\Farm\AdminControllers\Helper\FormHelper;
|
|
|
use App\Module\Farm\AdminControllers\Helper\GridHelper;
|
|
|
+use App\Module\Farm\AdminControllers\Helper\ShowHelper;
|
|
|
+use App\Module\Farm\Models\FarmSeedOutput;
|
|
|
use App\Module\Farm\Repositories\FarmSeedOutputRepository;
|
|
|
use App\Module\Farm\Repositories\FarmSeedRepository;
|
|
|
use Dcat\Admin\Form;
|
|
|
@@ -17,6 +21,7 @@ use Spatie\RouteAttributes\Attributes\Resource;
|
|
|
#[Resource('farm-seed-outputs', names: 'dcat.admin.farm-seed-outputs')]
|
|
|
class FarmSeedOutputController extends AdminController
|
|
|
{
|
|
|
+
|
|
|
/**
|
|
|
* 页面标题
|
|
|
*
|
|
|
@@ -38,30 +43,37 @@ class FarmSeedOutputController extends AdminController
|
|
|
*/
|
|
|
protected function grid()
|
|
|
{
|
|
|
- return Grid::make(new FarmSeedOutputRepository(), function (Grid $grid) {
|
|
|
+ return Grid::make(new FarmSeedOutputRepository([ 'seed', 'item' ]), function (Grid $grid) {
|
|
|
$helper = new GridHelper($grid, $this);
|
|
|
|
|
|
- $grid->column('id', 'ID')->sortable();
|
|
|
- $grid->column('seed_id', '种子ID')->sortable();
|
|
|
- $grid->column('item_id', '产出物品ID')->sortable();
|
|
|
+ $helper->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 * 100) . '%';
|
|
|
+ return $value . '%';
|
|
|
})->sortable();
|
|
|
- $grid->column('is_default', '默认产出')->bool()->sortable();
|
|
|
- $grid->column('created_at', '创建时间')->sortable();
|
|
|
- $grid->column('updated_at', '更新时间')->sortable();
|
|
|
+ $grid->column('is_default', '默认产出')->switch();
|
|
|
+ $helper->columnCreatedAt();
|
|
|
+ $helper->columnUpdatedAt();
|
|
|
|
|
|
$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();
|
|
|
+ $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());
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
@@ -75,17 +87,17 @@ class FarmSeedOutputController extends AdminController
|
|
|
protected function detail($id)
|
|
|
{
|
|
|
return Show::make($id, new FarmSeedOutputRepository(), function (Show $show) {
|
|
|
+ $helper = new ShowHelper($show, $this);
|
|
|
+
|
|
|
$show->field('id', 'ID');
|
|
|
- $show->field('seed_id', '种子ID');
|
|
|
- $show->field('item_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 * 100) . '%';
|
|
|
- });
|
|
|
- $show->field('is_default', '默认产出')->as(function ($value) {
|
|
|
- return $value ? '是' : '否';
|
|
|
+ return $value . '%';
|
|
|
});
|
|
|
+ $helper->fieldIsDefault('is_default', '默认产出');
|
|
|
$show->field('created_at', '创建时间');
|
|
|
$show->field('updated_at', '更新时间');
|
|
|
});
|
|
|
@@ -99,50 +111,53 @@ class FarmSeedOutputController extends AdminController
|
|
|
protected function form()
|
|
|
{
|
|
|
return Form::make(new FarmSeedOutputRepository(), function (Form $form) {
|
|
|
- $form->display('id', 'ID');
|
|
|
+ $helper = new FormHelper($form, $this);
|
|
|
|
|
|
- // 获取所有种子选项
|
|
|
- $seedRepository = new FarmSeedRepository();
|
|
|
- $seedOptions = $seedRepository->all()->pluck('name', 'id')->toArray();
|
|
|
+ $form->display('id', 'ID');
|
|
|
|
|
|
- $form->select('seed_id', '种子ID')->options($seedOptions)->required();
|
|
|
- $form->number('item_id', '产出物品ID')->min(1)->required();
|
|
|
+ $helper->selectSeed('seed_id', '种子');
|
|
|
+ $helper->selectModelItem('item_id', '产出物品');
|
|
|
$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->number('probability', '产出概率')->min(0)->max(100)
|
|
|
+ ->help('请输入 0-100 之间的数字,表示百分比,如 10 表示 10%')
|
|
|
+ ->required();
|
|
|
+ $helper->switch('is_default', '默认产出');
|
|
|
|
|
|
$form->display('created_at', '创建时间');
|
|
|
$form->display('updated_at', '更新时间');
|
|
|
|
|
|
- // 验证概率总和不超过1
|
|
|
+ // 验证概率总和不超过100%(概率值为 0-100,如 10 表示 10%)
|
|
|
$form->saving(function (Form $form) {
|
|
|
if ($form->isCreating()) {
|
|
|
- $seedId = $form->seed_id;
|
|
|
+ $seedId = $form->seed_id;
|
|
|
$probability = $form->probability;
|
|
|
|
|
|
- $repository = new FarmSeedOutputRepository();
|
|
|
- $totalProbability = $repository->findBySeedId($seedId)->sum('probability');
|
|
|
|
|
|
- if ($totalProbability + $probability > 1) {
|
|
|
+ $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;
|
|
|
+ $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) {
|
|
|
+ $currentItem = (new FarmSeedOutput())->find($id);
|
|
|
+ $totalProbability = (new FarmSeedOutput())
|
|
|
+ ->where('seed_id', $seedId)
|
|
|
+ ->sum('probability') - $currentItem->probability;
|
|
|
+
|
|
|
+ if ($totalProbability + $probability > 100) {
|
|
|
return $form->error('该种子的产出概率总和已超过100%');
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
}
|