0607-1906-为合成配方和分解规则管理页面增加行复制功能.md 4.8 KB

为合成配方和分解规则管理页面增加行复制功能

任务时间

  • 开始时间:2025年06月07日 19:00
  • 完成时间:2025年06月07日 19:06

任务描述

为合成配方管理页面和分解规则管理页面增加行复制功能,方便管理员快速复制现有配置创建新的配方或规则。

实现内容

1. 创建复制Action类

DuplicateItemRecipeAction.php

  • 文件路径:app/Module/GameItems/AdminControllers/Actions/DuplicateItemRecipeAction.php
  • 功能特性:
    • 复制现有合成配方的所有属性
    • 自动为配方名称添加"(复制)"后缀
    • 自动生成唯一的配方编码(原编码 + "copy" + 时间戳)
    • 复制的配方默认为未激活状态,避免意外生效
    • 复制成功后自动跳转到编辑页面
    • 包含确认对话框,防止误操作

DuplicateItemDismantleRuleAction.php

  • 文件路径:app/Module/GameItems/AdminControllers/Actions/DuplicateItemDismantleRuleAction.php
  • 功能特性:
    • 复制现有分解规则的所有属性
    • 自动为规则名称添加"(复制)"后缀
    • 自动生成唯一的规则编码(原编码 + "copy" + 时间戳)
    • 复制的规则默认为未激活状态,避免意外生效
    • 复制成功后自动跳转到编辑页面
    • 包含确认对话框,防止误操作

2. 修改控制器

RecipeController.php

  • 添加 DuplicateItemRecipeAction 的引用
  • grid() 方法中添加行操作:

    // 行操作
    $grid->actions(function (Grid\Displayers\Actions $actions) {
      // 添加复制按钮
      $actions->append(new DuplicateItemRecipeAction());
    });
    

DismantleRuleController.php

  • 添加 DuplicateItemDismantleRuleAction 的引用
  • grid() 方法中添加行操作:

    // 行操作
    $grid->actions(function (Grid\Displayers\Actions $actions) {
      // 添加复制按钮
      $actions->append(new DuplicateItemDismantleRuleAction());
    });
    

3. 复制逻辑设计

数据复制策略

  • 使用Laravel的 replicate() 方法复制模型实例
  • 自动处理主键重置和时间戳更新
  • 保留所有关联的消耗组、奖励组、条件组配置

唯一性处理

  • 名称唯一性:自动添加"(复制)"后缀
  • 编码唯一性:使用时间戳确保编码唯一性
  • 状态管理:复制的记录默认为未激活状态

用户体验优化

  • 确认对话框:防止误操作,提供清晰的操作说明
  • 成功反馈:显示复制成功消息,包含新记录ID
  • 自动跳转:复制后自动跳转到编辑页面,方便用户修改配置

测试验证

合成配方复制测试

  • ✅ 复制按钮正确显示在每行操作列中
  • ✅ 点击复制按钮显示确认对话框
  • ✅ 确认对话框内容正确:"确定要复制此合成配方吗?"
  • ✅ 复制功能正常工作,成功创建新配方
  • ✅ 新配方名称:金矿石冶炼 (复制)
  • ✅ 新配方编码:_copy_1749294269(唯一)
  • ✅ 新配方默认为未激活状态
  • ✅ 复制后自动跳转到编辑页面(ID: 8)
  • ✅ 消耗组和奖励组配置正确复制

分解规则复制测试

  • ✅ 复制按钮正确显示在每行操作列中
  • ✅ 点击复制按钮显示确认对话框
  • ✅ 确认对话框内容正确:"确定要复制此分解规则吗?"
  • ✅ 复制功能正常工作,成功创建新规则
  • ✅ 新规则名称:物品分解规则-39 (复制)
  • ✅ 新规则编码:_copy_1749294305(唯一)
  • ✅ 新规则默认为未激活状态
  • ✅ 复制后自动跳转到编辑页面(ID: 6)
  • ✅ 规则类型和其他配置正确复制

技术要点

1. Laravel模型复制

// 复制配方
$newRecipe = $originalRecipe->replicate();
$newRecipe->name = $originalRecipe->name . ' (复制)';
$newRecipe->code = $originalRecipe->code . '_copy_' . time();
$newRecipe->is_active = false;
$newRecipe->save();

2. 唯一编码生成

  • 使用时间戳确保编码唯一性
  • 格式:原编码_copy_时间戳
  • 避免编码冲突问题

3. 用户体验设计

  • 确认对话框防止误操作
  • 成功消息提供明确反馈
  • 自动跳转提升操作效率

4. 状态管理

  • 复制的记录默认为未激活状态
  • 避免复制后立即生效造成的问题
  • 需要用户手动激活确保配置正确

参考实现

完全参考宝箱配置的复制功能实现,确保:

  • 操作流程一致
  • 用户体验统一
  • 代码结构规范
  • 错误处理完善

提交信息

为合成配方和分解规则管理页面增加行复制功能

- 创建DuplicateItemRecipeAction复制合成配方
- 创建DuplicateItemDismantleRuleAction复制分解规则  
- 复制功能包含确认对话框和自动跳转到编辑页面
- 复制的记录自动添加(复制)后缀和唯一编码
- 复制的记录默认为未激活状态,避免意外生效

任务状态

✅ 已完成