物品数量为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
- 原有功能: 保持原有的增加物品、筛选等功能不变
- 新增功能: 每行物品记录都有数量操作按钮(仅普通物品)
功能特点
- 数据保留: 物品数量为0时保留数据库记录,便于历史追踪和数据分析
- 快捷操作: 后台管理员可以直接在列表页面快速调整物品数量
- 操作日志: 所有数量变更都有完整的日志记录,包含操作人员和原因
- 安全验证: 减少数量时检查当前库存,防止负数
- 事件触发: 数量变更会触发相应事件,保持系统数据一致性
使用方式
- 进入后台"用户物品管理"页面
- 在物品列表中找到需要操作的记录
- 点击该行的"数量操作"按钮
- 在弹出的表单中选择操作类型(增加/减少)
- 输入数量和操作原因
- 提交后系统自动处理并刷新列表
技术实现
- 使用Dcat Admin的RowAction和Form组件
- 集成现有的物品逻辑层方法确保数据一致性
- 支持事务处理和错误回滚
- 记录详细的操作日志便于审计
提交信息
实现物品数量为0时不删除记录,并在后台用户物品管理中添加数量操作功能
- 修改物品消耗逻辑:当物品数量为0时保留记录而不删除
- 新增ItemQuantityAction行操作类,提供快捷的数量增减功能
- 新增ItemQuantityForm表单类,支持物品数量的增加和减少操作
- 在用户物品管理列表中集成数量操作按钮
- 添加操作日志记录,包含管理员信息和操作原因
状态: ✅ 已完成并提交