DuplicateActivityAction.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace App\Module\Activity\AdminControllers\Actions;
  3. use App\Module\Activity\Enums\ACTIVITY_STATUS;
  4. use App\Module\Activity\Models\ActivityConfig;
  5. use Dcat\Admin\Grid\RowAction;
  6. use Illuminate\Http\Request;
  7. /**
  8. * 复制活动操作
  9. */
  10. class DuplicateActivityAction 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 mixed
  23. */
  24. public function handle(Request $request)
  25. {
  26. try {
  27. $id = $this->getKey();
  28. // 查找原始活动及其条件
  29. $activity = ActivityConfig::with('conditions')->findOrFail($id);
  30. // 复制活动基本信息
  31. $newActivity = $activity->replicate();
  32. $newActivity->name = $activity->name . ' (复制)';
  33. $newActivity->status = ACTIVITY_STATUS::NOT_STARTED;
  34. $newActivity->save();
  35. // 复制活动条件
  36. foreach ($activity->conditions as $condition) {
  37. $newCondition = $condition->replicate();
  38. $newCondition->activity_id = $newActivity->id;
  39. $newCondition->save();
  40. }
  41. return $this->response()
  42. ->success("已成功复制活动 [{$newActivity->name}]")
  43. ->refresh();
  44. } catch (\Exception $e) {
  45. return $this->response()
  46. ->error('复制失败: ' . $e->getMessage());
  47. }
  48. }
  49. /**
  50. * 确认信息
  51. *
  52. * @return array|string|void
  53. */
  54. public function confirm()
  55. {
  56. return ['确定要复制此活动吗?', '复制操作将创建一个新的活动记录,包括所有条件配置'];
  57. }
  58. }