222039-修复农作物日志后台管理页面生长阶段显示错误.md 3.1 KB

修复农作物日志后台管理页面生长阶段显示错误

任务时间

  • 开始时间:2025-06-22 20:39
  • 完成时间:2025-06-22 20:39

问题描述

后台 /admin/farm-crop-logs 页面存在显示错误:

  1. 生长阶段列显示为"未知阶段"
  2. 详情页面中"事件类型"和"生长阶段"字段显示为空白
  3. 筛选器中的生长阶段选项不正确

问题分析

通过检查发现问题根源:

  1. 数据库存储值与枚举映射不匹配

    • 数据库中存储的growth_stage值为:20(发芽期)、30(生长期)、40(成熟期)等
    • 但模型的getGrowthStageNameAttribute方法使用的是1,2,3,4的简单映射
    • 实际的SEED_STATUS常量值为:SEEN_STAGE=1, SPROUTING_STAGE=20, GROWING_STAGE=30, MATURE_STAGE=40, WITHERED_STAGE=50
  2. 筛选器配置错误

    • 控制器中筛选器使用硬编码的1,2,3,4映射
    • 与实际枚举值不匹配

解决方案

1. 修复模型访问器

修改 app/Module/Farm/Models/FarmCropLog.php

// 修改前
public function getGrowthStageNameAttribute(): string
{
    return match($this->growth_stage) {
        1 => '种子期',
        2 => '发芽期', 
        3 => '生长期',
        4 => '成熟期',
        default => '未知阶段'
    };
}

// 修改后
public function getGrowthStageNameAttribute(): string
{
    return GROWTH_STAGE::getName($this->growth_stage);
}

2. 修复筛选器配置

修改 app/Module/Farm/AdminControllers/FarmCropLogController.php

// 修改前
$filter->equal('growth_stage', '生长阶段')->select([
    1 => '种子期',
    2 => '发芽期',
    3 => '生长期', 
    4 => '成熟期',
]);

// 修改后
$filter->equal('growth_stage', '生长阶段')->select(\App\Module\Farm\Enums\GROWTH_STAGE::getAll());

测试验证

  1. 列表页面测试:访问 /admin/farm-crop-logs,确认生长阶段列正确显示为"发芽期"等具体阶段名称
  2. 筛选器测试:点击生长阶段筛选器,确认显示完整的选项:种子期、发芽期、生长期、成熟期、枯萎期
  3. 详情页面测试:点击显示链接查看详情,确认生长阶段字段正确显示

修复结果

✅ 列表页面生长阶段列正确显示具体阶段名称
✅ 筛选器正确显示所有生长阶段选项
✅ 详情页面生长阶段字段正确显示

技术要点

  1. 枚举使用规范:应该使用枚举类的方法而不是硬编码映射
  2. 数据一致性:确保模型访问器与实际数据库存储值匹配
  3. 筛选器配置:使用枚举的getAll()方法获取完整选项列表

代码提交

git add app/Module/Farm/AdminControllers/FarmCropLogController.php app/Module/Farm/Models/FarmCropLog.php
git commit -m "修复农作物日志后台管理页面生长阶段显示错误

- 修复FarmCropLog模型的getGrowthStageNameAttribute方法,使用GROWTH_STAGE枚举正确转换生长阶段名称
- 修复FarmCropLogController筛选器中的生长阶段选项,使用GROWTH_STAGE::getAll()获取正确的枚举值  
- 解决列表页面和详情页面中生长阶段显示为'未知阶段'或空白的问题"
git push