PetBattleLogController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace App\Module\Pet\AdminControllers;
  3. use App\Module\Pet\Models\PetBattleLog;
  4. use App\Module\Pet\Repositorys\PetBattleLogRepository;
  5. use Dcat\Admin\Form;
  6. use Dcat\Admin\Grid;
  7. use Dcat\Admin\Show;
  8. use UCore\DcatAdmin\AdminController;
  9. use Spatie\RouteAttributes\Attributes\Resource;
  10. use App\Module\Pet\AdminControllers\Helper\FilterHelper;
  11. use App\Module\Pet\AdminControllers\Helper\FormHelper;
  12. use App\Module\Pet\AdminControllers\Helper\GridHelper;
  13. use App\Module\Pet\AdminControllers\Helper\ShowHelper;
  14. /**
  15. * 宠物战斗记录控制器
  16. *
  17. * @package App\Module\Pet\AdminControllers
  18. */
  19. #[Resource('pet-battle-logs', names: 'dcat.admin.pet-battle-logs')]
  20. class PetBattleLogController extends AdminController
  21. {
  22. /**
  23. * 标题
  24. *
  25. * @var string
  26. */
  27. protected $title = '宠物战斗记录';
  28. /**
  29. * 列表页
  30. *
  31. * @return Grid
  32. */
  33. protected function grid()
  34. {
  35. return Grid::make(new PetBattleLogRepository(['pet', 'opponent']), function (Grid $grid) {
  36. $helper = new GridHelper($grid, $this);
  37. $grid->column('id', 'ID')->sortable();
  38. $grid->column('pet.name', '宠物名称');
  39. $grid->column('battle_type', '战斗类型')->display(function ($value) {
  40. $types = [
  41. PetBattleLog::BATTLE_TYPE_HARVEST => '偷菜',
  42. PetBattleLog::BATTLE_TYPE_GUARD => '守护',
  43. PetBattleLog::BATTLE_TYPE_ROYALE => '争霸赛',
  44. ];
  45. return $types[$value] ?? '未知';
  46. });
  47. $grid->column('opponent.name', '对手宠物')->display(function ($value) {
  48. return $value ?: '无对手';
  49. });
  50. $grid->column('result', '战斗结果')->display(function ($value) {
  51. $results = [
  52. PetBattleLog::RESULT_FAIL => '<span class="label bg-danger">失败</span>',
  53. PetBattleLog::RESULT_SUCCESS => '<span class="label bg-success">胜利</span>',
  54. ];
  55. return $results[$value] ?? '未知';
  56. })->label();
  57. $grid->column('reward', '战斗奖励')->display(function ($value) {
  58. if (is_array($value) || is_object($value)) {
  59. return json_encode($value, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  60. }
  61. return $value ?: '无奖励';
  62. });
  63. $grid->column('battle_time', '战斗时间')->sortable();
  64. $grid->column('created_at', '创建时间');
  65. // 筛选
  66. $grid->filter(function ($filter) {
  67. $helper = new FilterHelper($filter, $this);
  68. $helper->equal('id', 'ID');
  69. $helper->equalSelectModelPet('pet_id', '宠物');
  70. $filter->equal('battle_type', '战斗类型')->select([
  71. PetBattleLog::BATTLE_TYPE_HARVEST => '偷菜',
  72. PetBattleLog::BATTLE_TYPE_GUARD => '守护',
  73. PetBattleLog::BATTLE_TYPE_ROYALE => '争霸赛',
  74. ]);
  75. $filter->equal('result', '战斗结果')->select([
  76. PetBattleLog::RESULT_FAIL => '失败',
  77. PetBattleLog::RESULT_SUCCESS => '胜利',
  78. ]);
  79. $filter->between('battle_time', '战斗时间')->datetime();
  80. });
  81. // 默认按战斗时间倒序排序
  82. $grid->model()->orderBy('battle_time', 'desc');
  83. return $grid;
  84. });
  85. }
  86. /**
  87. * 详情页
  88. *
  89. * @param mixed $id
  90. * @return Show
  91. */
  92. protected function detail($id)
  93. {
  94. return Show::make($id, new PetBattleLogRepository(['pet', 'opponent']), function (Show $show) {
  95. $helper = new ShowHelper($show, $this);
  96. $helper->field('id', 'ID');
  97. $show->field('pet.name', '宠物名称');
  98. $show->field('pet.user_id', '用户ID');
  99. $show->field('battle_type', '战斗类型')->as(function ($value) {
  100. $types = [
  101. PetBattleLog::BATTLE_TYPE_HARVEST => '偷菜',
  102. PetBattleLog::BATTLE_TYPE_GUARD => '守护',
  103. PetBattleLog::BATTLE_TYPE_ROYALE => '争霸赛',
  104. ];
  105. return $types[$value] ?? '未知';
  106. });
  107. $show->field('opponent.name', '对手宠物')->as(function ($value) {
  108. return $value ?: '无对手';
  109. });
  110. $show->field('result', '战斗结果')->as(function ($value) {
  111. $results = [
  112. PetBattleLog::RESULT_FAIL => '失败',
  113. PetBattleLog::RESULT_SUCCESS => '胜利',
  114. ];
  115. return $results[$value] ?? '未知';
  116. });
  117. $show->field('reward', '战斗奖励')->json();
  118. $show->field('battle_time', '战斗时间');
  119. $show->field('created_at', '创建时间');
  120. return $show;
  121. });
  122. }
  123. /**
  124. * 表单
  125. *
  126. * @return Form
  127. */
  128. protected function form()
  129. {
  130. return Form::make(new PetBattleLogRepository(), function (Form $form) {
  131. $helper = new FormHelper($form, $this);
  132. $form->display('id', 'ID');
  133. $helper->selectModelPet('pet_id', '宠物')
  134. ->required();
  135. $form->select('battle_type', '战斗类型')
  136. ->options([
  137. PetBattleLog::BATTLE_TYPE_HARVEST => '偷菜',
  138. PetBattleLog::BATTLE_TYPE_GUARD => '守护',
  139. PetBattleLog::BATTLE_TYPE_ROYALE => '争霸赛',
  140. ])
  141. ->required();
  142. $helper->selectModelPet('opponent_id', '对手宠物')
  143. ->help('可以为空,表示没有对手的战斗');
  144. $form->select('result', '战斗结果')
  145. ->options([
  146. PetBattleLog::RESULT_FAIL => '失败',
  147. PetBattleLog::RESULT_SUCCESS => '胜利',
  148. ])
  149. ->required();
  150. $helper->embedsCats('reward', '战斗奖励')
  151. ->help('战斗奖励,JSON格式');
  152. $form->datetime('battle_time', '战斗时间')
  153. ->default(now())
  154. ->required();
  155. $form->display('created_at', '创建时间');
  156. return $form;
  157. });
  158. }
  159. }