201757-添加物品冻结日志后台管理功能.md 4.4 KB

添加物品冻结日志后台管理功能

任务时间

  • 开始时间:2025-06-20 17:57:28
  • 完成时间:2025-06-20 17:57:28

任务描述

用户反馈后台物品冻结日志没有加入菜单,需要添加物品冻结日志的后台管理功能。

实现内容

1. 创建数据仓库类

  • 文件:app/Module/GameItems/Repositorys/ItemFreezeLogRepository.php
  • 继承自 EloquentRepository
  • 关联 ItemFreezeLog 模型
  • 添加详细的中文注释说明功能

2. 创建后台控制器

  • 文件:app/Module/GameItems/AdminControllers/FreezeLogController.php
  • 路由:/admin/game-items-freeze-logs
  • 继承自 UCore\DcatAdmin\AdminController
  • 使用 #[Resource] 注解自动注册路由

3. 功能特性

  • 列表页面

    • 显示ID、用户ID、物品名称、物品ID、实例ID、数量
    • 操作类型(冻结/解冻)、操作原因、来源类型、来源ID
    • 操作员ID、操作时间
    • 支持排序功能
  • 筛选功能

    • ID、用户ID、实例ID、操作员ID精确筛选
    • 物品下拉选择筛选
    • 操作类型(冻结/解冻)选择筛选
    • 操作原因模糊搜索
    • 来源类型、来源ID精确筛选
    • 操作时间范围筛选
  • 详情页面

    • 显示所有字段的详细信息
    • 操作类型正确显示中文(冻结/解冻)
  • 权限控制

    • 禁用创建按钮(日志表不允许手动创建)
    • 禁用编辑按钮(日志表不允许修改)
    • 禁用删除按钮(日志表不允许删除)
    • 禁用批量操作(保护数据完整性)

4. 菜单配置

  • 添加到"游戏运营管理" -> "游戏物品管理"下
  • 菜单标题:物品冻结日志
  • 图标:fa-snowflake-o(雪花图标,符合冻结主题)
  • 排序:68(位于物品分解记录之后)
  • URI:game-items-freeze-logs

5. 数据展示优化

  • 物品名称通过关联查询显示,未知物品显示"未知物品"
  • 实例ID为空时显示"-"
  • 操作类型使用彩色标签:
    • 冻结:红色标签 <span class="badge badge-danger">冻结</span>
    • 解冻:绿色标签 <span class="badge badge-success">解冻</span>
  • 操作员ID为空时显示"系统"
  • 操作原因超长时截断显示(30字符)

测试验证

1. 菜单访问测试

  • ✅ 菜单正确显示在"游戏物品管理"下
  • ✅ 点击菜单能正常跳转到列表页
  • ✅ 页面标题显示"物品冻结日志"

2. 列表功能测试

  • ✅ 数据正常显示,共5条冻结记录
  • ✅ 物品名称正确显示(辣椒、萝卜)
  • ✅ 操作类型正确显示为"冻结"标签
  • ✅ 排序功能正常工作
  • ✅ 分页功能正常

3. 筛选功能测试

  • ✅ 用户ID筛选:输入39071,正确筛选出2条记录
  • ✅ 筛选结果正确,URL参数正确传递
  • ✅ 重置功能正常工作

4. 详情页测试

  • ✅ 详情页正常显示所有字段
  • ✅ 操作类型正确显示为"冻结"
  • ✅ 所有字段格式化正确

5. 权限控制测试

  • ✅ 新增按钮已移除
  • ✅ 编辑按钮已移除
  • ✅ 删除按钮已移除
  • ✅ 只保留"显示"按钮

技术要点

1. 枚举值处理

// 列表页显示
$grid->column('action_type', '操作类型')->display(function ($value) {
    return $value === FREEZE_ACTION_TYPE::FREEZE ? 
        '<span class="badge badge-danger">冻结</span>' : 
        '<span class="badge badge-success">解冻</span>';
});

// 详情页显示
$helper->field('action_type', '操作类型')->as(function ($value) {
    if ($value instanceof FREEZE_ACTION_TYPE) {
        return $value === FREEZE_ACTION_TYPE::FREEZE ? '冻结' : '解冻';
    }
    return FREEZE_ACTION_TYPE::getName($value);
});

2. 关联查询

// 显示物品名称
$grid->column('item.name', '物品名称')->display(function ($name) {
    return $name ?: '未知物品';
});

3. 权限控制

// 禁用所有修改操作
$grid->disableCreateButton();
$grid->disableEditButton();
$grid->disableDeleteButton();
$grid->disableBatchActions();

代码提交

  • 提交哈希:120cba2a
  • 提交信息:添加物品冻结日志后台管理功能
  • 文件变更:2个新文件,228行代码
  • 已推送到远程仓库

总结

成功为物品冻结日志添加了完整的后台管理功能,包括列表、详情、筛选等功能,并正确配置了菜单。由于是日志表,正确禁用了所有修改操作,确保数据的完整性和安全性。功能经过全面测试,工作正常。