columnId(); $grid->column('user_id', '用户ID')->sortable(); $grid->column('crop.id', '作物ID')->display(function ($value) { return "作物#{$value}"; }); $grid->column('seed.name', '种子名称')->display(function ($value) { return "{$value}"; }); $grid->column('land.id', '土地ID')->display(function ($value) { return "土地#{$value}"; }); $grid->column('event_type', '事件类型')->display(function ($value) { $colors = [ FarmCropLog::EVENT_FRUIT_CONFIRMED => 'success', FarmCropLog::EVENT_OUTPUT_CALCULATED => 'info', FarmCropLog::EVENT_DISASTER_OCCURRED => 'danger', FarmCropLog::EVENT_DISASTER_CLEARED => 'warning', FarmCropLog::EVENT_HARVESTED => 'primary', FarmCropLog::EVENT_FERTILIZED => 'success', FarmCropLog::EVENT_PESTICIDE_USED => 'warning', FarmCropLog::EVENT_WEEDICIDE_USED => 'warning', FarmCropLog::EVENT_WATERING => 'info', FarmCropLog::EVENT_REMOVED => 'danger', ]; $color = $colors[$value] ?? 'secondary'; $names = [ FarmCropLog::EVENT_FRUIT_CONFIRMED => '确认果实种类', FarmCropLog::EVENT_OUTPUT_CALCULATED => '确认产出数量', FarmCropLog::EVENT_DISASTER_OCCURRED => '灾害产生', FarmCropLog::EVENT_DISASTER_CLEARED => '灾害清除', FarmCropLog::EVENT_HARVESTED => '收获', FarmCropLog::EVENT_FERTILIZED => '施肥', FarmCropLog::EVENT_PESTICIDE_USED => '使用杀虫剂', FarmCropLog::EVENT_WEEDICIDE_USED => '使用除草剂', FarmCropLog::EVENT_WATERING => '浇水', FarmCropLog::EVENT_REMOVED => '铲除作物', ]; $name = $names[$value] ?? '未知事件'; return "{$name}"; }); $grid->column('growth_stage_name', '生长阶段')->display(function ($value) { return "{$value}"; }); $grid->column('event_data', '事件数据')->display(function ($value) { if (empty($value)) { return '无数据'; } // 使用静态方法解析数据 $summary = FarmCropLog::parseEventDataSummary($this->event_type, $value); return "{$summary}"; }); $helper->columnCreatedAt(); // 筛选器 $grid->filter(function (Grid\Filter $filter) { $helper = new FilterHelper($filter, $this); $filter->equal('user_id', '用户ID'); $filter->equal('crop_id', '作物ID'); $filter->equal('event_type', '事件类型')->select([ FarmCropLog::EVENT_FRUIT_CONFIRMED => '确认果实种类', FarmCropLog::EVENT_OUTPUT_CALCULATED => '确认产出数量', FarmCropLog::EVENT_DISASTER_OCCURRED => '灾害产生', FarmCropLog::EVENT_DISASTER_CLEARED => '灾害清除', FarmCropLog::EVENT_HARVESTED => '收获', FarmCropLog::EVENT_FERTILIZED => '施肥', FarmCropLog::EVENT_PESTICIDE_USED => '使用杀虫剂', FarmCropLog::EVENT_WEEDICIDE_USED => '使用除草剂', FarmCropLog::EVENT_WATERING => '浇水', FarmCropLog::EVENT_REMOVED => '铲除作物', ]); $filter->equal('growth_stage', '生长阶段')->select(\App\Module\Farm\Enums\GROWTH_STAGE::getAll()); $helper->betweenDatetime('created_at', '事件时间'); }); // 禁用新增、编辑、删除操作(只读日志) $grid->disableCreateButton(); $grid->disableEditButton(); $grid->disableDeleteButton(); $grid->disableBatchDelete(); // 设置默认排序 $grid->model()->orderBy('created_at', 'desc'); // 设置每页显示数量 $grid->paginate(20); }); } /** * 构建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new FarmCropLogRepository(['crop', 'seed', 'land']), function (Show $show) { $helper = new ShowHelper($show, $this); $show->field('id', 'ID'); $show->field('user_id', '用户ID'); $show->field('crop.id', '作物ID'); $show->field('seed.name', '种子名称'); $show->field('land.id', '土地ID'); $show->field('event_type_name', '事件类型'); $show->field('growth_stage_name', '生长阶段'); $show->field('land_type', '土地类型'); $show->field('event_data', '事件详细数据')->as(function ($value) { return FarmCropLog::parseEventDataDetail($this->event_type, $value); }); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); // 禁用编辑和删除按钮 $show->disableEditButton(); $show->disableDeleteButton(); }); } /** * 重写index方法,添加统计信息 */ public function index(Content $content) { return $content ->title($this->title()) ->description($this->description()) ->body($this->getStatsCards()) ->body($this->grid()); } /** * 获取统计卡片 */ protected function getStatsCards() { $stats = [ '总事件数' => FarmCropLog::count(), '今日事件数' => FarmCropLog::whereDate('created_at', today())->count(), '确认果实事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_FRUIT_CONFIRMED)->count(), '产出计算事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_OUTPUT_CALCULATED)->count(), '灾害产生事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_DISASTER_OCCURRED)->count(), '灾害清除事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_DISASTER_CLEARED)->count(), '收获事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_HARVESTED)->count(), '施肥事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_FERTILIZED)->count(), '除虫事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_PESTICIDE_USED)->count(), '除草事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_WEEDICIDE_USED)->count(), '浇水事件' => FarmCropLog::byEventType(FarmCropLog::EVENT_WATERING)->count(), ]; $cards = ''; foreach ($stats as $title => $count) { $cards .= "
{$title}