PetUserController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. namespace App\Module\Pet\AdminControllers;
  3. use App\Module\Pet\Enums\PetGrade;
  4. use App\Module\Pet\Enums\PetStatus;
  5. use App\Module\Pet\Models\PetUser;
  6. use App\Module\Pet\Repositorys\PetUserRepository;
  7. use Dcat\Admin\Form;
  8. use Dcat\Admin\Grid;
  9. use Dcat\Admin\Show;
  10. use UCore\DcatAdmin\AdminController;
  11. use Spatie\RouteAttributes\Attributes\Resource;
  12. use App\Module\Pet\AdminControllers\Helper\FilterHelper;
  13. use App\Module\Pet\AdminControllers\Helper\FormHelper;
  14. use App\Module\Pet\AdminControllers\Helper\GridHelper;
  15. use App\Module\Pet\AdminControllers\Helper\ShowHelper;
  16. /**
  17. * 宠物用户管理控制器
  18. *
  19. * @package App\Module\Pet\AdminControllers
  20. */
  21. #[Resource('pet-users', names: 'dcat.admin.pet-users')]
  22. class PetUserController extends AdminController
  23. {
  24. /**
  25. * 标题
  26. *
  27. * @var string
  28. */
  29. protected $title = '宠物管理';
  30. /**
  31. * 列表页
  32. *
  33. * @return Grid
  34. */
  35. protected function grid()
  36. {
  37. return Grid::make(new PetUserRepository(['user']), function (Grid $grid) {
  38. $helper = new GridHelper($grid, $this);
  39. $grid->column('id', 'ID')->sortable();
  40. $grid->column('user_id', '用户ID')->sortable();
  41. $grid->column('name', '宠物名称');
  42. $helper->columnPetGrade('grade');
  43. $grid->column('level', '等级')->sortable();
  44. $grid->column('experience', '经验值')->sortable();
  45. $grid->column('stamina', '体力值')->sortable();
  46. $helper->columnPetStatus('status');
  47. $grid->column('created_at', '创建时间');
  48. $grid->column('updated_at', '更新时间');
  49. $grid->column('deleted_at', '删除时间');
  50. // 筛选
  51. $grid->filter(function ($filter) {
  52. $helper = new FilterHelper($filter, $this);
  53. $helper->equal('id', 'ID');
  54. $helper->equal('user_id', '用户ID');
  55. $filter->like('name', '宠物名称');
  56. $filter->between('level', '等级');
  57. $helper->equalRadioPetStatus('status', '状态');
  58. // 添加软删除筛选
  59. $filter->scope('trashed', '已删除')->onlyTrashed();
  60. $filter->scope('with_trashed', '包含已删除')->withTrashed();
  61. });
  62. return $grid;
  63. });
  64. }
  65. /**
  66. * 详情页
  67. *
  68. * @param mixed $id
  69. * @return Show
  70. */
  71. protected function detail($id)
  72. {
  73. return Show::make($id, new PetUserRepository(['user', 'skillLogs', 'remouldLogs']), function (Show $show) {
  74. $helper = new ShowHelper($show, $this);
  75. $helper->field('id', 'ID');
  76. $helper->field('user_id', '用户ID');
  77. $show->field('name', '宠物名称');
  78. $helper->fieldPetGrade('grade');
  79. $show->field('level', '等级');
  80. $show->field('experience', '经验值');
  81. $show->field('stamina', '体力值');
  82. $helper->fieldPetStatus('status');
  83. $show->field('created_at', '创建时间');
  84. $show->field('updated_at', '更新时间');
  85. $show->field('deleted_at', '删除时间');
  86. // 显示技能使用记录
  87. $show->skillLogs('技能使用记录', function ($skillLogs) {
  88. $skillLogs->resource('/admin/pet-skill-logs');
  89. $skillLogs->id('ID');
  90. $skillLogs->skill()->skill_name('技能名称');
  91. $skillLogs->used_at('使用时间');
  92. $skillLogs->effect_result('效果结果')->json();
  93. });
  94. // 显示洗髓记录
  95. $show->remouldLogs('洗髓记录', function ($remouldLogs) {
  96. $remouldLogs->resource('/admin/pet-remould-logs');
  97. $remouldLogs->id('ID');
  98. $remouldLogs->old_grade('原品阶')->as(function ($grade) {
  99. $labels = [
  100. PetGrade::FIRST->value => '一品',
  101. PetGrade::SECOND->value => '二品',
  102. PetGrade::THIRD->value => '三品',
  103. PetGrade::FOURTH->value => '四品',
  104. ];
  105. return $labels[$grade] ?? '未知';
  106. });
  107. $remouldLogs->new_grade('新品阶')->as(function ($grade) {
  108. $labels = [
  109. PetGrade::FIRST->value => '一品',
  110. PetGrade::SECOND->value => '二品',
  111. PetGrade::THIRD->value => '三品',
  112. PetGrade::FOURTH->value => '四品',
  113. ];
  114. return $labels[$grade] ?? '未知';
  115. });
  116. $remouldLogs->remould_time('洗髓时间');
  117. });
  118. return $show;
  119. });
  120. }
  121. /**
  122. * 表单
  123. *
  124. * @return Form
  125. */
  126. protected function form()
  127. {
  128. return Form::make(new PetUserRepository(), function (Form $form) {
  129. $helper = new FormHelper($form, $this);
  130. $form->display('id', 'ID');
  131. $form->number('user_id', '用户ID')->required();
  132. $helper->text('name')->required();
  133. $form->select('grade', '品阶')->options([
  134. PetGrade::FIRST->value => '一品',
  135. PetGrade::SECOND->value => '二品',
  136. PetGrade::THIRD->value => '三品',
  137. PetGrade::FOURTH->value => '四品',
  138. ])->required();
  139. $form->number('level', '等级')
  140. ->default(1)
  141. ->min(1)
  142. ->max(30)
  143. ->required();
  144. $form->number('experience', '经验值')
  145. ->default(0)
  146. ->min(0)
  147. ->required();
  148. $form->number('stamina', '体力值')
  149. ->default(100)
  150. ->min(0)
  151. ->max(100)
  152. ->required();
  153. $form->select('status', '状态')->options([
  154. PetStatus::NONE->value => '未知',
  155. PetStatus::NORMAL->value => '正常',
  156. PetStatus::FIGHTING->value => '战斗中',
  157. PetStatus::DEAD->value => '死亡',
  158. ])->default(PetStatus::NORMAL->value)
  159. ->required();
  160. $form->display('created_at', '创建时间');
  161. $form->display('updated_at', '更新时间');
  162. return $form;
  163. });
  164. }
  165. }