DuplicateRewardItemAction.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Module\Game\AdminControllers\Actions;
  3. use App\Module\Game\Models\GameRewardItem;
  4. use Dcat\Admin\Grid\RowAction;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. /**
  8. * 复制奖励项行操作
  9. */
  10. class DuplicateRewardItemAction extends RowAction
  11. {
  12. /**
  13. * 按钮标题
  14. *
  15. * @var string
  16. */
  17. protected $title = '<i class="fa fa-copy"></i> 复制';
  18. /**
  19. * 处理请求
  20. *
  21. * @param Request $request
  22. * @return \Dcat\Admin\Actions\Response
  23. */
  24. public function handle(Request $request)
  25. {
  26. // 获取当前行ID
  27. $id = $this->getKey();
  28. // 查找原奖励项
  29. $originalItem = GameRewardItem::find($id);
  30. if (!$originalItem) {
  31. return $this->response()->error('奖励项不存在');
  32. }
  33. // 开启事务
  34. DB::beginTransaction();
  35. try {
  36. // 创建新奖励项
  37. $newItem = new GameRewardItem();
  38. $newItem->group_id = $originalItem->group_id;
  39. $newItem->reward_type = $originalItem->reward_type;
  40. $newItem->target_id = $originalItem->target_id;
  41. $newItem->param1 = $originalItem->param1;
  42. $newItem->param2 = $originalItem->param2;
  43. $newItem->quantity = $originalItem->quantity;
  44. $newItem->min_quantity = $originalItem->min_quantity;
  45. $newItem->max_quantity = $originalItem->max_quantity;
  46. $newItem->weight = $originalItem->weight;
  47. $newItem->probability = $originalItem->probability;
  48. $newItem->is_guaranteed = $originalItem->is_guaranteed;
  49. $newItem->extra_data = $originalItem->extra_data;
  50. $newItem->save();
  51. DB::commit();
  52. return $this->response()
  53. ->success("复制成功 [ID: {$newItem->id}]")
  54. ->refresh();
  55. } catch (\Exception $e) {
  56. DB::rollBack();
  57. return $this->response()->error('复制失败: ' . $e->getMessage());
  58. }
  59. }
  60. /**
  61. * 确认信息
  62. *
  63. * @return array
  64. */
  65. public function confirm()
  66. {
  67. return ['确定要复制这个奖励项吗?', '复制操作将在同一奖励组中创建一个新的奖励项记录'];
  68. }
  69. }