UserActionController.php 8.8 KB

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