27日2110-物品数量为0不删除记录并添加后台数量操作功能.md 3.3 KB

物品数量为0时不删除记录并添加后台数量操作功能

时间: 2025年05月27日 21:10
任务: 修改物品消耗逻辑,当物品剩余数量为0时不删除数据库行数据;在后台用户物品管理列表中增加行操作,可以快捷处理物品数量的增加/减少

实现内容

1. 修改物品消耗逻辑

文件: app/Module/GameItems/Logics/Item.php

  • 修改位置: consumeNormalItem 方法第349-370行
  • 原逻辑: 当物品数量全部消耗完时,删除用户物品记录 ($userItem->delete())
  • 新逻辑: 当物品数量全部消耗完时,将数量设置为0并保留记录 ($userItem->quantity = 0; $userItem->save())
  • 增加: 触发物品数量变更事件,记录从原数量到0的变化

2. 新增物品数量操作行动作

文件: app/Module/GameItems/AdminControllers/Actions/ItemQuantityAction.php

  • 功能: 为用户物品管理列表提供快捷的数量操作按钮
  • 显示条件: 只对普通物品(非单独属性物品)显示
  • 界面: 使用Modal弹窗展示操作表单
  • 按钮样式: 带编辑图标的"数量操作"按钮

3. 新增物品数量操作表单

文件: app/Module/GameItems/AdminControllers/Actions/ItemQuantityForm.php

  • 操作类型: 支持增加数量和减少数量两种操作
  • 数量验证: 确保输入数量大于0,减少时不能超过当前数量
  • 操作记录: 记录管理员信息、操作类型、数量和原因
  • 事务安全: 使用物品逻辑层的标准方法确保数据一致性

4. 集成到用户物品管理控制器

文件: app/Module/GameItems/AdminControllers/UserItemController.php

  • 修改: 启用行操作并添加自定义的ItemQuantityAction
  • 原有功能: 保持原有的增加物品、筛选等功能不变
  • 新增功能: 每行物品记录都有数量操作按钮(仅普通物品)

功能特点

  1. 数据保留: 物品数量为0时保留数据库记录,便于历史追踪和数据分析
  2. 快捷操作: 后台管理员可以直接在列表页面快速调整物品数量
  3. 操作日志: 所有数量变更都有完整的日志记录,包含操作人员和原因
  4. 安全验证: 减少数量时检查当前库存,防止负数
  5. 事件触发: 数量变更会触发相应事件,保持系统数据一致性

使用方式

  1. 进入后台"用户物品管理"页面
  2. 在物品列表中找到需要操作的记录
  3. 点击该行的"数量操作"按钮
  4. 在弹出的表单中选择操作类型(增加/减少)
  5. 输入数量和操作原因
  6. 提交后系统自动处理并刷新列表

技术实现

  • 使用Dcat Admin的RowAction和Form组件
  • 集成现有的物品逻辑层方法确保数据一致性
  • 支持事务处理和错误回滚
  • 记录详细的操作日志便于审计

提交信息

实现物品数量为0时不删除记录,并在后台用户物品管理中添加数量操作功能

- 修改物品消耗逻辑:当物品数量为0时保留记录而不删除
- 新增ItemQuantityAction行操作类,提供快捷的数量增减功能  
- 新增ItemQuantityForm表单类,支持物品数量的增加和减少操作
- 在用户物品管理列表中集成数量操作按钮
- 添加操作日志记录,包含管理员信息和操作原因

状态: ✅ 已完成并提交