17日1439-修复Cleanup模块后台计划内容列表显示问题.md 3.6 KB

修复Cleanup模块后台计划内容列表显示问题

任务概述

修复后台 /admin/cleanup/plan-contents?page=1 页面中"所属计划"和"模型"列显示错误的问题。

问题描述

在Cleanup模块的计划内容管理页面中,发现以下显示问题:

  1. 所属计划列:显示为空白,应该显示计划名称
  2. 启用状态列:显示为空白,应该显示"启用"或"禁用"
  3. 备份启用列:显示为空白,应该显示"启用"或"禁用"

问题分析

通过检查代码和数据库,发现问题原因:

1. 关联查询问题

  • CleanupPlanContentRepository 没有预加载关联关系
  • Grid中使用 plan.plan_name 但没有预加载 plan 关联
  • 导致关联查询失败,显示为空

2. Switch字段显示问题

  • Grid中使用 .switch() 方法显示布尔字段
  • 但在列表页面中,switch字段可能不会正确渲染
  • 需要使用 .using() + .label() 方式显示

解决方案

1. 修复Repository关联关系

修改 app/Module/Cleanup/Repositories/CleanupPlanContentRepository.php

/**
 * 构造函数 - 设置关联关系
 */
public function __construct()
{
    // 设置需要预加载的关联关系
    parent::__construct(['plan']);
}

2. 修复Grid字段显示

修改 app/Module/Cleanup/AdminControllers/CleanupPlanContentController.php

// 状态
$grid->column('is_enabled', '启用状态')->using([1 => '启用', 0 => '禁用'])->label([
    1 => 'success',
    0 => 'danger',
])->sortable();
$grid->column('backup_enabled', '备份启用')->using([1 => '启用', 0 => '禁用'])->label([
    1 => 'success',
    0 => 'danger',
])->sortable();

修复结果

修复后的页面显示效果:

  • 所属计划列:正确显示"日志数据清理测试"
  • Model类列:正确显示Model类名或"未设置"
  • 表名列:正确显示表名,并标注是否为旧数据
  • 启用状态列:正确显示"启用"状态
  • 备份启用列:正确显示"启用"状态

技术要点

Dcat Admin关联查询

在Dcat Admin中使用关联查询时,需要在Repository中预加载关联关系:

// 在构造函数中设置关联关系
parent::__construct(['relation1', 'relation2']);

Grid字段显示方式

对于布尔字段,推荐使用 using() + label() 而不是 switch()

// 推荐方式
$grid->column('field')->using([1 => '启用', 0 => '禁用'])->label([
    1 => 'success',
    0 => 'danger',
]);

// 避免在列表页使用
$grid->column('field')->switch(); // 可能不显示

提交信息

修复Cleanup模块后台计划内容列表显示问题

- 修复CleanupPlanContentRepository缺少关联关系预加载的问题
- 修复所属计划列显示为空的问题
- 修复启用状态和备份启用列显示为空的问题
- 将switch字段改为using+label显示方式,确保正确显示状态

后续修改

2025-06-17 14:52 - 修改Model类显示方式

用户反馈希望显示完整的类名(包含命名空间),而不是简化的类名。

修改内容

  • 移除 class_basename($value) 函数调用
  • 直接显示完整的类名:$value
  • 保持HTML标签样式不变

修改前:显示 AdminActionlog 修改后:显示 App\Module\System\Models\AdminActionlog

时间记录

  • 开始时间:2025-06-17 14:39
  • 第一次完成:2025-06-17 14:50
  • 后续修改:2025-06-17 14:52
  • 总耗时:约13分钟

相关文件

  • app/Module/Cleanup/Repositories/CleanupPlanContentRepository.php
  • app/Module/Cleanup/AdminControllers/CleanupPlanContentController.php