columnId();
$helper->columnUserId();
$grid->column('position', '位置')->sortable();
$helper->columnLandType();
$helper->columnLandStatus();
$grid->column('has_crop', '是否有作物')->display(function ($value) {
return $value ? '有作物' : '无作物';
});
// 关联显示种子状态
$grid->column('crop.seed_id', '种子ID')->display(function ($seedId) {
return $seedId ?: '-';
});
$grid->column('crop.seed.name', '种子名称')->display(function ($name) {
return $name ?: '-';
});
$helper->columnUseingEnmu('crop.growth_stage', \App\Module\Farm\Enums\GROWTH_STAGE::class,'生长阶段');
$grid->column('crop.stage_end_time', '阶段结束时间')->display(function ($time) {
if (!$time) return '-';
return $time;
});
$grid->column('crop.disasters', '灾害情况')->display(function ($disasters) {
if (!$disasters) return '无';
$result = [];
$disasterData = is_string($disasters) ? json_decode($disasters, true) : $disasters;
foreach ($disasterData ?: [] as $disaster) {
if (isset($disaster['type'])) {
$typeName = \App\Module\Farm\Enums\DISASTER_TYPE::getName($disaster['type']);
$status = $disaster['status'] ?? 'active';
if ($status === 'active') {
$result[] = '' . $typeName . '';
} else {
$result[] = '' . $typeName . '(已处理)';
}
}
}
return empty($result) ? '无' : implode(' ', $result);
});
$grid->column('crop.fertilized', '是否施肥')->bool();
$helper->columnCreatedAt();
$helper->columnUpdatedAt();
$grid->filter(function (Grid\Filter $filter) {
$filterHelper = new FilterHelper($filter, $this);
$filterHelper->equalId();
$filterHelper->equalUserId();
$filter->equal('position', '位置');
$filterHelper->equalLandType();
$filterHelper->equalLandStatus();
$filter->equal('has_crop', '是否有作物')->select([0 => '无作物', 1 => '有作物']);
$filter->equal('crop.seed_id', '种子ID');
$filter->equal('crop.growth_stage', '生长阶段')->select(\App\Module\Farm\Enums\GROWTH_STAGE::getAll());
$filterHelper->betweenDatetime('created_at', '创建时间');
});
$grid->actions(function (Grid\Displayers\Actions $actions){
$actions->disableDelete();
});
// 默认按ID倒序排列
$grid->model()->orderBy('id', 'desc');
});
}
/**
* 构建详情页
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new FarmLandRepository(), function (Show $show) {
$helper = new ShowHelper($show, $this);
$show->field('id', 'ID');
$helper->fieldUserId('user_id', '用户ID');
$show->field('position', '位置');
$helper->fieldLandType('land_type', '土地类型');
$helper->fieldLandStatus('status', '状态');
$show->field('created_at', '创建时间');
$show->field('updated_at', '更新时间');
});
}
/**
* 构建表单
*
* @return Form
*/
protected function form()
{
return Form::make(new FarmLandRepository(), function (Form $form) {
$helper = new FormHelper($form, $this);
$form->display('id', 'ID');
$helper->selectTableUserID('user_id', '用户ID');
$form->number('position', '位置')->min(1)->max(20)->required();
$helper->selectLandType('land_type', '土地类型');
// 直接使用select方法而不是selectOptionCast,避免枚举类型转换问题
$form->select('status', '状态')->options(\App\Module\Farm\Enums\LAND_STATUS::getValueDescription());
$form->display('has_crop', '是否有作物')->with(function ($value) {
return $value ? '有作物' : '无作物';
});
$form->display('created_at', '创建时间');
$form->display('updated_at', '更新时间');
// 添加保存前的回调函数,确保status字段是整数类型
$form->saving(function (Form $form) {
// 确保status是整数
if ($form->status !== null) {
$form->status = (int)$form->status;
}
// 根据状态自动更新has_crop字段
$status = (int)$form->status;
$form->has_crop = in_array($status, [1, 2, 3, 4]) ? 1 : 0;
});
});
}
}