UserActionController.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. ACTION_TYPE::BAN->name => '封禁',
  57. ACTION_TYPE::RESTRICT->name => '禁止登录',
  58. ACTION_TYPE::DELETE->name => '删除',
  59. ACTION_TYPE::NORMAL->name => '正常化',
  60. ];
  61. return $typeMap[$value] ?? $value;
  62. });
  63. $grid->column('desc', '描述')->limit(30);
  64. $grid->column('exp_time', '有效期')->display(function ($value) {
  65. return $value ? date('Y-m-d H:i:s', $value) : '永久';
  66. });
  67. $grid->column('status', '状态')->display(function ($value) {
  68. $statusMap = [
  69. ACTION_STATUS::ING->value => '生效中',
  70. ACTION_STATUS::OK->value => '已生效',
  71. ACTION_STATUS::OUT_TIME->value => '已过期',
  72. ACTION_STATUS::END->value => '已结束',
  73. ];
  74. return $statusMap[$value] ?? '未知';
  75. })->label([
  76. ACTION_STATUS::ING->value => 'success',
  77. ACTION_STATUS::OK->value => 'info',
  78. ACTION_STATUS::OUT_TIME->value => 'warning',
  79. ACTION_STATUS::END->value => 'default',
  80. ]);
  81. $grid->column('re_type', '关联类型');
  82. $grid->column('re_id', '关联ID');
  83. $helper->columnCreatedAt();
  84. // 筛选器
  85. $grid->filter(function (Grid\Filter $filter) {
  86. $helper = new FilterHelper($filter, $this);
  87. $filter->equal('id', 'ID');
  88. $filter->equal('user_id', '用户ID');
  89. $filter->equal('admin_id', '管理员ID');
  90. $filter->equal('type', '操作类型')->select([
  91. ACTION_TYPE::BAN->name => '封禁',
  92. ACTION_TYPE::RESTRICT->name => '禁止登录',
  93. ACTION_TYPE::DELETE->name => '删除',
  94. ACTION_TYPE::NORMAL->name => '正常化',
  95. ]);
  96. $filter->like('desc', '描述');
  97. $filter->equal('status', '状态')->select([
  98. ACTION_STATUS::ING->value => '生效中',
  99. ACTION_STATUS::OK->value => '已生效',
  100. ACTION_STATUS::OUT_TIME->value => '已过期',
  101. ACTION_STATUS::END->value => '已结束',
  102. ]);
  103. $filter->equal('re_type', '关联类型');
  104. $filter->equal('re_id', '关联ID');
  105. $helper->betweenCreatedAt();
  106. });
  107. });
  108. }
  109. /**
  110. * 详情页面
  111. *
  112. * @param mixed $id
  113. * @return Show
  114. */
  115. protected function detail($id)
  116. {
  117. return Show::make($id, new UserActionRepository(), function (Show $show) {
  118. $helper = new ShowHelper($show, $this);
  119. $show->field('id', 'ID');
  120. $show->field('user_id', '用户ID');
  121. $show->field('admin_id', '管理员ID');
  122. $show->field('type', '操作类型')->as(function ($value) {
  123. $typeMap = [
  124. ACTION_TYPE::BAN->name => '封禁',
  125. ACTION_TYPE::RESTRICT->name => '禁止登录',
  126. ACTION_TYPE::DELETE->name => '删除',
  127. ACTION_TYPE::NORMAL->name => '正常化',
  128. ];
  129. return $typeMap[$value] ?? $value;
  130. });
  131. $show->field('desc', '描述');
  132. $show->field('exp_time', '有效期')->as(function ($value) {
  133. return $value ? date('Y-m-d H:i:s', $value) : '永久';
  134. });
  135. $show->field('status', '状态')->as(function ($value) {
  136. $statusMap = [
  137. ACTION_STATUS::ING->value => '生效中',
  138. ACTION_STATUS::OK->value => '已生效',
  139. ACTION_STATUS::OUT_TIME->value => '已过期',
  140. ACTION_STATUS::END->value => '已结束',
  141. ];
  142. return $statusMap[$value] ?? '未知';
  143. });
  144. $show->field('re_type', '关联类型');
  145. $show->field('re_id', '关联ID');
  146. });
  147. }
  148. /**
  149. * 表单页面
  150. *
  151. * @return Form
  152. */
  153. protected function form()
  154. {
  155. return Form::make(new UserActionRepository(), function (Form $form) {
  156. $helper = new FormHelper($form, $this);
  157. $form->display('id', 'ID');
  158. $form->number('user_id', '用户ID')
  159. ->required()
  160. ->min(1)
  161. ->help('用户ID,必须是有效的用户');
  162. $form->number('admin_id', '管理员ID')
  163. ->required()
  164. ->min(1)
  165. ->help('管理员ID,必须是有效的管理员');
  166. $form->select('type', '操作类型')
  167. ->options([
  168. ACTION_TYPE::BAN->name => '封禁',
  169. ACTION_TYPE::RESTRICT->name => '禁止登录',
  170. ACTION_TYPE::DELETE->name => '删除',
  171. ACTION_TYPE::NORMAL->name => '正常化',
  172. ])
  173. ->required();
  174. $form->textarea('desc', '描述')
  175. ->required()
  176. ->rows(3)
  177. ->help('操作描述,说明操作原因等');
  178. $form->datetime('exp_time', '有效期')
  179. ->help('操作有效期,留空表示永久有效')
  180. ->saving(function ($value) {
  181. return $value ? strtotime($value) : null;
  182. });
  183. $form->radio('status', '状态')
  184. ->options([
  185. ACTION_STATUS::ING->value => '生效中',
  186. ACTION_STATUS::OK->value => '已生效',
  187. ACTION_STATUS::OUT_TIME->value => '已过期',
  188. ACTION_STATUS::END->value => '已结束',
  189. ])
  190. ->default(ACTION_STATUS::ING->value);
  191. $form->text('re_type', '关联类型')
  192. ->help('关联的业务类型,如order, recharge等');
  193. $form->number('re_id', '关联ID')
  194. ->default(0)
  195. ->help('关联的业务ID,如订单ID等');
  196. $form->display('created_at', '创建时间');
  197. $form->display('updated_at', '更新时间');
  198. // 保存前回调
  199. $form->saving(function (Form $form) {
  200. // 如果是新建记录,需要检查用户ID是否存在
  201. if ($form->isCreating()) {
  202. $userId = $form->user_id;
  203. $user = \App\Module\User\Models\User::find($userId);
  204. if (!$user) {
  205. return $form->response()->error('用户ID不存在');
  206. }
  207. }
  208. });
  209. });
  210. }
  211. }