UserActionController.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. namespace App\Module\User\AdminControllers;
  3. use App\Module\User\AdminControllers\Helper\FilterHelper;
  4. use App\Module\User\AdminControllers\Helper\FormHelper;
  5. use App\Module\User\AdminControllers\Helper\GridHelper;
  6. use App\Module\User\AdminControllers\Helper\ShowHelper;
  7. use App\Module\User\Enums\ACTION_STATUS;
  8. use App\Module\User\Enums\ACTION_TYPE;
  9. use App\Module\User\Models\UserAction;
  10. use App\Module\User\Services\UserService;
  11. use Dcat\Admin\Form;
  12. use Dcat\Admin\Grid;
  13. use Dcat\Admin\Show;
  14. use Spatie\RouteAttributes\Attributes\Resource;
  15. use UCore\DcatAdmin\AdminController;
  16. /**
  17. * 用户操作记录管理控制器
  18. */
  19. #[Resource('user-actions', names: 'dcat.admin.user-actions')]
  20. class UserActionController extends AdminController
  21. {
  22. /**
  23. * 页面标题
  24. *
  25. * @var string
  26. */
  27. protected $title = '用户操作记录管理';
  28. /**
  29. * 用户服务
  30. *
  31. * @var UserService
  32. */
  33. protected $service;
  34. /**
  35. * 构造函数
  36. */
  37. public function __construct()
  38. {
  39. $this->service = new UserService();
  40. }
  41. /**
  42. * 列表页面
  43. *
  44. * @return Grid
  45. */
  46. protected function grid()
  47. {
  48. return Grid::make(new UserAction(), function (Grid $grid) {
  49. $helper = new GridHelper($grid, $this);
  50. $grid->column('id', 'ID')->sortable();
  51. $grid->column('user_id', '用户ID')->sortable();
  52. $grid->column('admin_id', '管理员ID');
  53. $grid->column('type', '操作类型')->display(function ($value) {
  54. $typeMap = [
  55. ACTION_TYPE::BAN->name => '封禁',
  56. ACTION_TYPE::RESTRICT->name => '禁止登录',
  57. ACTION_TYPE::DELETE->name => '删除',
  58. ACTION_TYPE::NORMAL->name => '正常化',
  59. ];
  60. return $typeMap[$value] ?? $value;
  61. });
  62. $grid->column('desc', '描述')->limit(30);
  63. $grid->column('exp_time', '有效期')->display(function ($value) {
  64. return $value ? date('Y-m-d H:i:s', $value) : '永久';
  65. });
  66. $grid->column('status', '状态')->display(function ($value) {
  67. $statusMap = [
  68. ACTION_STATUS::ING->value => '生效中',
  69. ACTION_STATUS::OK->value => '已生效',
  70. ACTION_STATUS::OUT_TIME->value => '已过期',
  71. ACTION_STATUS::END->value => '已结束',
  72. ];
  73. return $statusMap[$value] ?? '未知';
  74. })->label([
  75. ACTION_STATUS::ING->value => 'success',
  76. ACTION_STATUS::OK->value => 'info',
  77. ACTION_STATUS::OUT_TIME->value => 'warning',
  78. ACTION_STATUS::END->value => 'default',
  79. ]);
  80. $grid->column('re_type', '关联类型');
  81. $grid->column('re_id', '关联ID');
  82. $helper->columnCreatedAt();
  83. // 筛选器
  84. $grid->filter(function (Grid\Filter $filter) {
  85. $helper = new FilterHelper($filter, $this);
  86. $filter->equal('id', 'ID');
  87. $filter->equal('user_id', '用户ID');
  88. $filter->equal('admin_id', '管理员ID');
  89. $filter->equal('type', '操作类型')->select([
  90. ACTION_TYPE::BAN->name => '封禁',
  91. ACTION_TYPE::RESTRICT->name => '禁止登录',
  92. ACTION_TYPE::DELETE->name => '删除',
  93. ACTION_TYPE::NORMAL->name => '正常化',
  94. ]);
  95. $filter->like('desc', '描述');
  96. $filter->equal('status', '状态')->select([
  97. ACTION_STATUS::ING->value => '生效中',
  98. ACTION_STATUS::OK->value => '已生效',
  99. ACTION_STATUS::OUT_TIME->value => '已过期',
  100. ACTION_STATUS::END->value => '已结束',
  101. ]);
  102. $filter->equal('re_type', '关联类型');
  103. $filter->equal('re_id', '关联ID');
  104. $helper->betweenCreatedAt();
  105. });
  106. });
  107. }
  108. /**
  109. * 详情页面
  110. *
  111. * @param mixed $id
  112. * @return Show
  113. */
  114. protected function detail($id)
  115. {
  116. return Show::make($id, new UserAction(), function (Show $show) {
  117. $helper = new ShowHelper($show, $this);
  118. $show->field('id', 'ID');
  119. $show->field('user_id', '用户ID');
  120. $show->field('admin_id', '管理员ID');
  121. $show->field('type', '操作类型')->as(function ($value) {
  122. $typeMap = [
  123. ACTION_TYPE::BAN->name => '封禁',
  124. ACTION_TYPE::RESTRICT->name => '禁止登录',
  125. ACTION_TYPE::DELETE->name => '删除',
  126. ACTION_TYPE::NORMAL->name => '正常化',
  127. ];
  128. return $typeMap[$value] ?? $value;
  129. });
  130. $show->field('desc', '描述');
  131. $show->field('exp_time', '有效期')->as(function ($value) {
  132. return $value ? date('Y-m-d H:i:s', $value) : '永久';
  133. });
  134. $show->field('status', '状态')->as(function ($value) {
  135. $statusMap = [
  136. ACTION_STATUS::ING->value => '生效中',
  137. ACTION_STATUS::OK->value => '已生效',
  138. ACTION_STATUS::OUT_TIME->value => '已过期',
  139. ACTION_STATUS::END->value => '已结束',
  140. ];
  141. return $statusMap[$value] ?? '未知';
  142. });
  143. $show->field('re_type', '关联类型');
  144. $show->field('re_id', '关联ID');
  145. $helper->fieldCreatedAt();
  146. $helper->fieldUpdatedAt();
  147. $helper->fieldDeletedAt();
  148. });
  149. }
  150. /**
  151. * 表单页面
  152. *
  153. * @return Form
  154. */
  155. protected function form()
  156. {
  157. return Form::make(new UserAction(), function (Form $form) {
  158. $helper = new FormHelper($form, $this);
  159. $form->display('id', 'ID');
  160. $form->number('user_id', '用户ID')
  161. ->required()
  162. ->min(1)
  163. ->help('用户ID,必须是有效的用户');
  164. $form->number('admin_id', '管理员ID')
  165. ->required()
  166. ->min(1)
  167. ->help('管理员ID,必须是有效的管理员');
  168. $form->select('type', '操作类型')
  169. ->options([
  170. ACTION_TYPE::BAN->name => '封禁',
  171. ACTION_TYPE::RESTRICT->name => '禁止登录',
  172. ACTION_TYPE::DELETE->name => '删除',
  173. ACTION_TYPE::NORMAL->name => '正常化',
  174. ])
  175. ->required();
  176. $form->textarea('desc', '描述')
  177. ->required()
  178. ->rows(3)
  179. ->help('操作描述,说明操作原因等');
  180. $form->datetime('exp_time', '有效期')
  181. ->help('操作有效期,留空表示永久有效')
  182. ->saving(function ($value) {
  183. return $value ? strtotime($value) : null;
  184. });
  185. $form->radio('status', '状态')
  186. ->options([
  187. ACTION_STATUS::ING->value => '生效中',
  188. ACTION_STATUS::OK->value => '已生效',
  189. ACTION_STATUS::OUT_TIME->value => '已过期',
  190. ACTION_STATUS::END->value => '已结束',
  191. ])
  192. ->default(ACTION_STATUS::ING->value);
  193. $form->text('re_type', '关联类型')
  194. ->help('关联的业务类型,如order, recharge等');
  195. $form->number('re_id', '关联ID')
  196. ->default(0)
  197. ->help('关联的业务ID,如订单ID等');
  198. $form->display('created_at', '创建时间');
  199. $form->display('updated_at', '更新时间');
  200. // 保存前回调
  201. $form->saving(function (Form $form) {
  202. // 如果是新建记录,需要检查用户ID是否存在
  203. if ($form->isCreating()) {
  204. $userId = $form->user_id;
  205. $user = \App\Module\User\Models\User::find($userId);
  206. if (!$user) {
  207. return $form->response()->error('用户ID不存在');
  208. }
  209. }
  210. });
  211. });
  212. }
  213. }