model()->orderBy('stats_date', 'desc');
$grid->column('id', 'ID')->sortable();
$grid->column('stats_date', '统计日期')->sortable();
$grid->column('total_users', '总用户数')->sortable();
$grid->column('active_users', '活跃用户数')->sortable();
// 房屋等级统计(显示前5级)
$grid->column('house_stats', '房屋等级统计')->display(function () {
$html = '';
for ($level = 1; $level <= 5; $level++) {
$field = "house_level_{$level}";
$count = $this->$field ?? 0;
if ($count > 0) {
$html .= "
{$level}级: {$count}个
";
}
}
return $html ?: '无数据';
});
// 土地类型统计
$grid->column('land_type_stats', '土地类型统计')->display(function () {
$typeNames = [
1 => '普通',
2 => '红土',
3 => '黑土',
4 => '金土',
5 => '蓝土',
6 => '紫土',
];
$html = '';
for ($type = 1; $type <= 6; $type++) {
$field = "land_type_{$type}";
$count = $this->$field ?? 0;
if ($count > 0) {
$typeName = $typeNames[$type];
$html .= "{$typeName}: {$count}块
";
}
}
return $html ?: '无数据';
});
$grid->column('total_lands', '总土地数')->sortable();
$grid->column('total_special_lands', '特殊土地数')->sortable();
$grid->column('total_crops', '总作物数')->sortable();
$grid->column('total_disasters', '总灾害数')->sortable();
$helper->columnCreatedAt();
// 筛选器
$grid->filter(function (Grid\Filter $filter) {
$filter->between('stats_date', '统计日期')->date();
$filter->equal('total_users', '总用户数');
$filter->equal('active_users', '活跃用户数');
});
// 禁用创建按钮(统计数据由命令生成)
$grid->disableCreateButton();
// 禁用批量删除
$grid->disableBatchActions();
// 行操作
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableEdit(); // 禁用编辑
});
});
}
/**
* 详情页面
*/
protected function detail($id): Show
{
return Show::make($id, new FarmDailyStats(), function (Show $show) {
$helper = new ShowHelper($show, $this);
$show->field('id', 'ID');
$show->field('stats_date', '统计日期');
$show->field('total_users', '总用户数');
$show->field('active_users', '活跃用户数');
// 房屋等级统计
$show->divider('房屋等级统计');
for ($level = 1; $level <= 10; $level++) {
$field = "house_level_{$level}";
$show->field($field, "{$level}级房屋数量");
}
// 土地类型统计
$show->divider('土地类型统计');
$landTypeNames = [
1 => '普通土地数量',
2 => '红土地数量',
3 => '黑土地数量',
4 => '金色特殊土地数量',
5 => '蓝色特殊土地数量',
6 => '紫色特殊土地数量',
];
for ($type = 1; $type <= 6; $type++) {
$field = "land_type_{$type}";
$show->field($field, $landTypeNames[$type]);
}
// 土地状态统计
$show->divider('土地状态统计');
$landStatusNames = [
0 => '空闲土地数量',
1 => '种植中土地数量',
2 => '灾害土地数量',
3 => '可收获土地数量',
4 => '枯萎土地数量',
];
for ($status = 0; $status <= 4; $status++) {
$field = "land_status_{$status}";
$show->field($field, $landStatusNames[$status]);
}
// 总计统计
$show->divider('总计统计');
$show->field('total_lands', '总土地数量');
$show->field('total_special_lands', '特殊土地总数量');
$show->field('total_crops', '总作物数量');
$show->field('total_disasters', '总灾害数量');
$show->field('created_at', '创建时间');
$show->field('updated_at', '更新时间');
});
}
/**
* 表单页面(禁用)
*/
protected function form(): Form
{
return Form::make(new FarmDailyStats(), function (Form $form) {
$helper = new FormHelper($form, $this);
$form->display('id', 'ID');
$form->date('stats_date', '统计日期')->required();
// 基础统计
$form->number('total_users', '总用户数')->required();
$form->number('active_users', '活跃用户数')->required();
// 房屋等级统计
$form->tab('房屋等级统计', function (Form $form) {
for ($level = 1; $level <= 10; $level++) {
$form->number("house_level_{$level}", "{$level}级房屋数量")->default(0);
}
});
// 土地类型统计
$form->tab('土地类型统计', function (Form $form) {
$landTypeNames = [
1 => '普通土地数量',
2 => '红土地数量',
3 => '黑土地数量',
4 => '金色特殊土地数量',
5 => '蓝色特殊土地数量',
6 => '紫色特殊土地数量',
];
for ($type = 1; $type <= 6; $type++) {
$form->number("land_type_{$type}", $landTypeNames[$type])->default(0);
}
});
// 土地状态统计
$form->tab('土地状态统计', function (Form $form) {
$landStatusNames = [
0 => '空闲土地数量',
1 => '种植中土地数量',
2 => '灾害土地数量',
3 => '可收获土地数量',
4 => '枯萎土地数量',
];
for ($status = 0; $status <= 4; $status++) {
$form->number("land_status_{$status}", $landStatusNames[$status])->default(0);
}
});
// 总计统计
$form->tab('总计统计', function (Form $form) {
$form->number('total_lands', '总土地数量')->default(0);
$form->number('total_special_lands', '特殊土地总数量')->default(0);
$form->number('total_crops', '总作物数量')->default(0);
$form->number('total_disasters', '总灾害数量')->default(0);
});
});
}
/**
* 首页概览
*/
public function index(Content $content)
{
return $content
->title('农场每日统计')
->description('查看农场模块的每日统计数据')
->body($this->grid())
->body($this->getStatsCards());
}
/**
* 获取统计卡片
*/
protected function getStatsCards()
{
$latestStats = FarmDailyStats::orderBy('stats_date', 'desc')->first();
if (!$latestStats) {
return new Alert('warning', '暂无统计数据,请先运行统计命令生成数据');
}
$content = "
最新统计日期
{$latestStats->stats_date->format('Y-m-d')}
总用户数
{$latestStats->total_users}
活跃用户数
{$latestStats->active_users}
总土地数
{$latestStats->total_lands}
";
return new Card('农场统计概览', $content);
}
}