| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- 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\Enums\GROWTH_STAGE;
- use App\Module\Farm\Repositories\FarmCropRepository;
- use App\Module\Farm\Repositories\FarmSeedRepository;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use UCore\DcatAdmin\AdminController;
- use Spatie\RouteAttributes\Attributes\Resource;
- use Spatie\RouteAttributes\Attributes\Post;
- /**
- * 作物管理控制器
- */
- #[Resource('farm-crops', names: 'dcat.admin.farm-crops')]
- class FarmCropController extends AdminController
- {
- /**
- * 页面标题
- *
- * @var string
- */
- protected $title = '作物管理';
- /**
- * 页面描述
- *
- * @var string
- */
- protected $description = '管理用户种植的作物';
- /**
- * 构建表格
- *
- * @return Grid
- */
- protected function grid()
- {
- return Grid::make(new FarmCropRepository(['final_output_item']), function (Grid $grid) {
- $helper = new GridHelper($grid, $this);
- $helper->columnId();
- $grid->column('land_id', '土地ID')->sortable();
- $helper->columnUserId();
- $grid->column('seed_id', '种子ID')->sortable();
- $grid->column('land_level', '土地等级')->sortable()->display(function ($value) {
- $landType = \App\Module\Farm\Models\FarmLandType::find($value);
- $typeName = $landType ? $landType->name : '未知';
- return "<span class='badge badge-info'>{$typeName}({$value})</span>";
- });
- $grid->column('plant_time', '种植时间')->sortable();
- $helper->columnUseingEnmu('growth_stage', \App\Module\Farm\Enums\GROWTH_STAGE::class,'生长阶段');
- $grid->column('stage_end_time', '阶段结束时间')->sortable();
- // 添加产出相关字段
- $grid->column('final_output_item_id', '产出物品ID')->sortable()->display(function ($value) {
- if ($value) {
- return "<span class='label label-success'>{$value}</span>";
- }
- return "<span class='label label-warning'>未确定</span>";
- });
- $grid->column('final_output_item.name', '产出物品')->sortable()->display(function ($value) {
- if ($value) {
- return "<span class='label label-success'>{$value}</span>";
- }
- return "<span class='label label-warning'>-</span>";
- });
- $grid->column('final_output_amount', '预定产量')->sortable()->display(function ($value) {
- if ($value) {
- return "<span class='label label-info'>{$value}</span>";
- }
- return "<span class='label --warning'>未确定</span>";
- });
- $helper->columnFertilized();
- $helper->columnCreatedAt();
- $helper->columnUpdatedAt();
- $grid->filter(function (Grid\Filter $filter) {
- $filterHelper = new FilterHelper($filter, $this);
- $filter->scope('trashed', '回收站')->onlyTrashed();
- $filterHelper->equalId();
- $filter->equal('land_id', '土地ID');
- $filterHelper->equalUserId();
- $filter->equal('seed_id', '种子ID');
- $filterHelper->equalGrowthStage();
- $filterHelper->equalLandType('land_level'); // land_level
- $filterHelper->betweenDatetime('plant_time', '种植时间');
- $filterHelper->betweenDatetime('stage_end_time', '阶段结束时间');
- // 添加产出相关过滤器
- $filter->equal('final_output_item_id', '产出物品ID');
- $filter->where('output_status', function ($query) {
- $value = $this->input;
- if ($value == 'has_amount') {
- $query->whereNotNull('final_output_amount');
- } elseif ($value == 'no_amount') {
- $query->whereNull('final_output_amount');
- }
- }, '产量状态')->select([
- 'has_amount' => '已确定产量',
- 'no_amount' => '未确定产量'
- ]);
- $filterHelper->equalFertilized();
- $filterHelper->betweenDatetime('created_at', '创建时间');
- });
- });
- }
- /**
- * 构建详情页
- *
- * @param mixed $id
- * @return Show
- */
- protected function detail($id)
- {
- return Show::make($id, new FarmCropRepository(), function (Show $show) {
- $helper = new ShowHelper($show, $this);
- $show->field('id', 'ID');
- $show->field('land_id', '土地ID');
- $helper->fieldUserId('user_id', '用户ID');
- $show->field('seed_id', '种子ID');
- $show->field('land_level', '土地等级')->as(function ($value) {
- $landType = \App\Module\Farm\Models\FarmLandType::find($value);
- $typeName = $landType ? $landType->name : '未知';
- return "<span class='badge badge-info'>{$typeName}({$value})</span>";
- });
- $show->field('plant_time', '种植时间');
- $helper->fieldGrowthStage('growth_stage', '生长阶段');
- $show->field('stage_end_time', '阶段结束时间');
- // 添加产出相关字段(增强版本)
- $show->field('final_output_item_id', '产出物品ID')->as(function ($value) {
- return $value ? "<span class='label label-success'>{$value}</span>" : "<span class='label label-warning'>未确定</span>";
- });
- $show->field('final_output_amount', '预定产量')->as(function ($value) {
- return $value ? "<span class='label label-info'>{$value}</span>" : "<span class='label label-warning'>未确定</span>";
- });
- // 添加数据完整性状态
- $show->field('data_status', '数据状态')->as(function () {
- $hasItemId = !empty($this->final_output_item_id);
- $hasAmount = !empty($this->final_output_amount);
- $isMature = $this->growth_stage == GROWTH_STAGE::MATURE->value;
- if ($isMature) {
- if ($hasItemId && $hasAmount) {
- return "<span class='label label-success'>数据完整,可正常收获</span>";
- } elseif ($hasItemId) {
- return "<span class='label label-warning'>缺少产量,需要修复</span>";
- } else {
- return "<span class='label label-danger'>缺少产出物品ID,严重错误</span>";
- }
- } else {
- if ($hasItemId) {
- return "<span class='label label-info'>已确定产出物品,等待成熟期确定产量</span>";
- } else {
- return "<span class='label label-default'>等待发芽期确定产出物品</span>";
- }
- }
- });
- // 使用新的灾害显示方法
- $show->fieldModelCatsJson2('disasters', '灾害情况');
- $helper->fieldFertilized('fertilized', '已施肥');
- $show->field('created_at', '创建时间');
- $show->field('updated_at', '更新时间');
- });
- }
- /**
- * 构建表单
- *
- * @return Form
- */
- protected function form()
- {
- return Form::make(new FarmCropRepository(), function (Form $form) {
- $helper = new FormHelper($form, $this);
- $form->display('id', 'ID');
- $form->text('land_id', '土地ID')->required()->rules('required|integer');
- $helper->display('user_id', '用户ID');
- // 获取所有种子选项
- $form->display('seed_id', '种子ID');
- // 土地等级字段
- $form->select('land_level', '土地等级')
- ->options(\App\Module\Farm\Models\FarmLandType::pluck('name', 'id')->toArray())
- ->help('种植时记录的土地等级,用于产出计算');
- $form->datetime('plant_time', '种植时间')->required();
- $helper->selectOptionCast('growth_stage', '生长阶段');
- $form->datetime('stage_end_time', '阶段结束时间');
- // 添加产出相关字段
- $form->number('final_output_item_id', '产出物品ID')
- ->help('发芽期自动确定,也可手动设置');
- $form->number('final_output_amount', '预定产量')
- ->min(1)
- ->help('成熟期自动计算,也可手动设置。注意:手动设置后收获时会直接使用此产量');
- // 添加数据状态提示
- $form->html('<div class="alert alert-info">
- <h4>产出数据说明:</h4>
- <ul>
- <li><strong>产出物品ID</strong>:在发芽期自动确定,决定收获什么物品</li>
- <li><strong>预定产量</strong>:在成熟期自动计算,决定收获数量</li>
- <li><strong>成熟期作物</strong>:必须有完整的产出数据才能正常收获</li>
- <li><strong>修复建议</strong>:如果数据不完整,请运行修复命令:<code>php artisan farm:fix-crop-mature-output</code></li>
- </ul>
- </div>');
- $helper->display('disasters', '灾害情况');
- $helper->switchFertilized();
- $form->display('created_at', '创建时间');
- $form->display('updated_at', '更新时间');
- });
- }
- }
|