UserPunishController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace App\Module\Ulogic\AdminControllers;
  3. use App\Module\Ulogic\AdminControllers\Helper\FilterHelper;
  4. use App\Module\Ulogic\AdminControllers\Helper\FormHelper;
  5. use App\Module\Ulogic\AdminControllers\Helper\GridHelper;
  6. use App\Module\Ulogic\AdminControllers\Helper\ShowHelper;
  7. use App\Module\Ulogic\Enum\PUNISH_TYPE;
  8. use App\Module\Ulogic\Models\UserPunish;
  9. use App\Module\Ulogic\Punish;
  10. use Dcat\Admin\Form;
  11. use Dcat\Admin\Grid;
  12. use Dcat\Admin\Show;
  13. use Spatie\RouteAttributes\Attributes\Resource;
  14. use UCore\DcatAdmin\AdminController;
  15. /**
  16. * 用户惩罚管理控制器
  17. */
  18. #[Resource('ulogic-punishes', names: 'dcat.admin.ulogic-punishes')]
  19. class UserPunishController extends AdminController
  20. {
  21. /**
  22. * 页面标题
  23. *
  24. * @var string
  25. */
  26. protected $title = '用户惩罚管理';
  27. /**
  28. * 列表页面
  29. *
  30. * @return Grid
  31. */
  32. protected function grid()
  33. {
  34. return Grid::make(new UserPunish(), function (Grid $grid) {
  35. $helper = new GridHelper($grid, $this);
  36. $helper->columnId();
  37. $helper->columnUserId();
  38. $helper->columnPunishType();
  39. $helper->columnPunishLevel();
  40. $helper->columnDesc();
  41. $helper->columnAdminId();
  42. $helper->columnCreatedAt();
  43. $helper->columnUpdatedAt();
  44. // 筛选器
  45. $grid->filter(function (Grid\Filter $filter) {
  46. $helper = new FilterHelper($filter, $this);
  47. $helper->equalId();
  48. $helper->equalUserId();
  49. $helper->equalPunishType();
  50. $helper->equalPunishLevel();
  51. $helper->likeDesc();
  52. $helper->equalAdminId();
  53. $helper->betweenCreatedAt();
  54. });
  55. });
  56. }
  57. /**
  58. * 详情页面
  59. *
  60. * @param mixed $id
  61. * @return Show
  62. */
  63. protected function detail($id)
  64. {
  65. return Show::make($id, new UserPunish(), function (Show $show) {
  66. $helper = new ShowHelper($show, $this);
  67. $helper->fieldUserId();
  68. $helper->fieldPunishType();
  69. $helper->fieldPunishLevel();
  70. $helper->fieldDesc();
  71. $helper->fieldAdminId();
  72. $helper->fieldCreatedAt();
  73. $helper->fieldUpdatedAt();
  74. $helper->fieldDeletedAt();
  75. // 显示关联的用户信息
  76. $show->relation('user', '用户信息', function ($model) {
  77. $show = Show::make($model, new \App\Module\User\Models\User());
  78. $helper = new \App\Module\User\AdminControllers\Helper\ShowHelper($show, $this);
  79. $helper->fieldUserId();
  80. $helper->fieldUsername();
  81. $helper->fieldStatus();
  82. $helper->fieldCreatedAt();
  83. $helper->fieldUpdatedAt();
  84. return $show;
  85. });
  86. });
  87. }
  88. /**
  89. * 表单页面
  90. *
  91. * @return Form
  92. */
  93. protected function form()
  94. {
  95. return Form::make(new UserPunish(), function (Form $form) {
  96. $helper = new FormHelper($form, $this);
  97. $form->display('id', 'ID');
  98. $helper->numberUserId();
  99. $helper->selectPunishType();
  100. $helper->numberPunishLevel();
  101. $helper->textareaDesc();
  102. $helper->numberAdminId();
  103. $form->display('created_at', '创建时间');
  104. $form->display('updated_at', '更新时间');
  105. // 保存前回调
  106. $form->saving(function (Form $form) {
  107. // 如果是新建记录,需要检查用户ID是否存在
  108. if ($form->isCreating()) {
  109. $userId = $form->user_id;
  110. $user = \App\Module\User\Models\User::find($userId);
  111. if (!$user) {
  112. return $form->response()->error('用户ID不存在');
  113. }
  114. // 设置管理员ID
  115. if (!$form->admin_id) {
  116. $form->admin_id = auth('admin')->id() ?: 0;
  117. }
  118. }
  119. });
  120. // 保存后回调
  121. $form->saved(function (Form $form) {
  122. // 如果是新建记录,触发惩罚处理
  123. if ($form->isCreating()) {
  124. try {
  125. $punishType = PUNISH_TYPE::from($form->type);
  126. Punish::call_user($form->user_id, $punishType, $form->admin_id, $form->desc);
  127. return $form->response()->success('惩罚处理成功');
  128. } catch (\Exception $e) {
  129. return $form->response()->error('惩罚处理失败: ' . $e->getMessage());
  130. }
  131. }
  132. });
  133. });
  134. }
  135. }