PetUserController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. // 筛选
  50. $grid->filter(function ($filter) {
  51. $helper = new FilterHelper($filter, $this);
  52. $helper->equal('id', 'ID');
  53. $helper->equal('user_id', '用户ID');
  54. $filter->like('name', '宠物名称');
  55. $helper->equalRadioPetGrade('grade', '品阶');
  56. $filter->between('level', '等级');
  57. $helper->equalRadioPetStatus('status', '状态');
  58. });
  59. return $grid;
  60. });
  61. }
  62. /**
  63. * 详情页
  64. *
  65. * @param mixed $id
  66. * @return Show
  67. */
  68. protected function detail($id)
  69. {
  70. return Show::make($id, new PetUserRepository(['user', 'skillLogs', 'remouldLogs']), function (Show $show) {
  71. $helper = new ShowHelper($show, $this);
  72. $helper->field('id', 'ID');
  73. $helper->field('user_id', '用户ID');
  74. $show->field('name', '宠物名称');
  75. $helper->fieldPetGrade('grade');
  76. $show->field('level', '等级');
  77. $show->field('experience', '经验值');
  78. $show->field('stamina', '体力值');
  79. $helper->fieldPetStatus('status');
  80. $show->field('created_at', '创建时间');
  81. $show->field('updated_at', '更新时间');
  82. // 显示技能使用记录
  83. $show->skillLogs('技能使用记录', function ($skillLogs) {
  84. $skillLogs->resource('/admin/pet-skill-logs');
  85. $skillLogs->id('ID');
  86. $skillLogs->skill()->skill_name('技能名称');
  87. $skillLogs->used_at('使用时间');
  88. $skillLogs->effect_result('效果结果')->json();
  89. });
  90. // 显示洗髓记录
  91. $show->remouldLogs('洗髓记录', function ($remouldLogs) {
  92. $remouldLogs->resource('/admin/pet-remould-logs');
  93. $remouldLogs->id('ID');
  94. $remouldLogs->old_grade('原品阶')->as(function ($grade) {
  95. $labels = [
  96. PetGrade::FIRST->value => '一品',
  97. PetGrade::SECOND->value => '二品',
  98. PetGrade::THIRD->value => '三品',
  99. PetGrade::FOURTH->value => '四品',
  100. ];
  101. return $labels[$grade] ?? '未知';
  102. });
  103. $remouldLogs->new_grade('新品阶')->as(function ($grade) {
  104. $labels = [
  105. PetGrade::FIRST->value => '一品',
  106. PetGrade::SECOND->value => '二品',
  107. PetGrade::THIRD->value => '三品',
  108. PetGrade::FOURTH->value => '四品',
  109. ];
  110. return $labels[$grade] ?? '未知';
  111. });
  112. $remouldLogs->remould_time('洗髓时间');
  113. });
  114. return $show;
  115. });
  116. }
  117. /**
  118. * 表单
  119. *
  120. * @return Form
  121. */
  122. protected function form()
  123. {
  124. return Form::make(new PetUserRepository(), function (Form $form) {
  125. $helper = new FormHelper($form, $this);
  126. $form->display('id', 'ID');
  127. $form->number('user_id', '用户ID')->required();
  128. $helper->text('name')->required();
  129. $form->select('grade', '品阶')->options([
  130. PetGrade::FIRST->value => '一品',
  131. PetGrade::SECOND->value => '二品',
  132. PetGrade::THIRD->value => '三品',
  133. PetGrade::FOURTH->value => '四品',
  134. ])->required();
  135. $form->number('level', '等级')
  136. ->default(1)
  137. ->min(1)
  138. ->max(30)
  139. ->required();
  140. $form->number('experience', '经验值')
  141. ->default(0)
  142. ->min(0)
  143. ->required();
  144. $form->number('stamina', '体力值')
  145. ->default(100)
  146. ->min(0)
  147. ->max(100)
  148. ->required();
  149. $form->select('status', '状态')->options([
  150. PetStatus::NONE->value => '未知',
  151. PetStatus::NORMAL->value => '正常',
  152. PetStatus::FIGHTING->value => '战斗中',
  153. PetStatus::DEAD->value => '死亡',
  154. ])->default(PetStatus::NORMAL->value)
  155. ->required();
  156. $form->display('created_at', '创建时间');
  157. $form->display('updated_at', '更新时间');
  158. return $form;
  159. });
  160. }
  161. }