DuplicateItemDismantleRuleAction.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Module\GameItems\AdminControllers\Actions;
  3. use App\Module\GameItems\Models\ItemDismantleRule;
  4. use Dcat\Admin\Grid\RowAction;
  5. use Illuminate\Http\Request;
  6. /**
  7. * 复制物品分解规则行操作
  8. */
  9. class DuplicateItemDismantleRuleAction extends RowAction
  10. {
  11. /**
  12. * 按钮标题
  13. *
  14. * @var string
  15. */
  16. protected $title = '<i class="fa fa-copy"></i> 复制';
  17. /**
  18. * 处理请求
  19. *
  20. * @param Request $request
  21. * @return \Dcat\Admin\Actions\Response
  22. */
  23. public function handle(Request $request)
  24. {
  25. try {
  26. // 获取当前行ID
  27. $id = $this->getKey();
  28. // 查找原分解规则
  29. $originalRule = ItemDismantleRule::find($id);
  30. if (!$originalRule) {
  31. return $this->response()->error('分解规则不存在');
  32. }
  33. // 复制规则
  34. $newRule = $originalRule->replicate();
  35. $newRule->name = $originalRule->name . ' (复制)';
  36. $newRule->code = $originalRule->code . '_copy_' . time(); // 确保编码唯一
  37. $newRule->is_active = false; // 复制的规则默认为未激活状态
  38. $newRule->save();
  39. // 跳转到编辑页面,让用户修改配置
  40. return $this->response()
  41. ->success("已成功复制分解规则 [{$originalRule->name}] (ID: {$newRule->id})")
  42. ->redirect(admin_url("game-items-dismantle-rules/{$newRule->id}/edit"));
  43. } catch (\Exception $e) {
  44. return $this->response()
  45. ->error('复制失败: ' . $e->getMessage());
  46. }
  47. }
  48. /**
  49. * 确认信息
  50. *
  51. * @return array|string|void
  52. */
  53. public function confirm()
  54. {
  55. return ['确定要复制此分解规则吗?', '复制操作将创建一个新的分解规则记录,并跳转到编辑页面'];
  56. }
  57. }