CompleteParticipationAction.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Module\Activity\AdminControllers\Actions;
  3. use App\Module\Activity\Enums\PARTICIPATION_STATUS;
  4. use App\Module\Activity\Models\ActivityParticipation;
  5. use Dcat\Admin\Grid\RowAction;
  6. use Illuminate\Http\Request;
  7. /**
  8. * 标记活动参与为完成操作
  9. */
  10. class CompleteParticipationAction extends RowAction
  11. {
  12. /**
  13. * 操作按钮标题
  14. *
  15. * @var string
  16. */
  17. protected $title = '<i class="fa fa-check"></i> 标记完成';
  18. /**
  19. * 判断是否允许显示此操作
  20. *
  21. * @return bool
  22. */
  23. public function allowed()
  24. {
  25. return $this->row->completion_status === PARTICIPATION_STATUS::IN_PROGRESS;
  26. }
  27. /**
  28. * 处理请求
  29. *
  30. * @param Request $request
  31. * @return mixed
  32. */
  33. public function handle(Request $request)
  34. {
  35. try {
  36. $id = $this->getKey();
  37. $participation = ActivityParticipation::findOrFail($id);
  38. if ($participation->completion_status !== PARTICIPATION_STATUS::IN_PROGRESS) {
  39. return $this->response()->error('只有进行中的参与记录才能标记为完成');
  40. }
  41. $participation->completion_status = PARTICIPATION_STATUS::COMPLETED;
  42. $participation->completion_time = now();
  43. $participation->save();
  44. // 触发活动完成事件
  45. event(new \App\Module\Activity\Events\ActivityCompletedEvent(
  46. $participation->user_id,
  47. $participation->activity_id
  48. ));
  49. return $this->response()
  50. ->success("参与记录 [{$id}] 已标记为完成")
  51. ->refresh();
  52. } catch (\Exception $e) {
  53. return $this->response()
  54. ->error('操作失败: ' . $e->getMessage());
  55. }
  56. }
  57. /**
  58. * 确认信息
  59. *
  60. * @return array|string|void
  61. */
  62. public function confirm()
  63. {
  64. return ['确定要标记此参与记录为完成吗?', '标记完成后,用户将可以领取活动奖励'];
  65. }
  66. }