PetSkillProcessLogController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace App\Module\Pet\AdminControllers;
  3. use App\Module\Pet\Models\PetSkillProcessLog;
  4. use UCore\DcatAdmin\AdminController;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Show;
  7. use Dcat\Admin\Form;
  8. use Spatie\RouteAttributes\Attributes\Resource;
  9. /**
  10. * 宠物技能处理日志管理
  11. */
  12. #[Resource('pet-skill-process-logs', names: 'dcat.admin.pet-skill-process-logs')]
  13. class PetSkillProcessLogController extends AdminController
  14. {
  15. /**
  16. * 标题
  17. *
  18. * @var string
  19. */
  20. protected $title = '宠物技能处理日志';
  21. /**
  22. * 列表页面
  23. *
  24. * @return Grid
  25. */
  26. protected function grid(): Grid
  27. {
  28. return Grid::make(PetSkillProcessLog::with(['activeSkill', 'pet']), function (Grid $grid) {
  29. $grid->column('id', 'ID')->sortable();
  30. $grid->column('active_skill_id', '激活技能ID')->display(function ($value) {
  31. return "<a href='/admin/pet/active-skills/{$value}' target='_blank'>{$value}</a>";
  32. });
  33. $grid->column('pet_id', '宠物ID')->display(function ($value) {
  34. return "<a href='/admin/pet/users/{$value}' target='_blank'>{$value}</a>";
  35. });
  36. $grid->column('user_id', '用户ID')->display(function ($value) {
  37. return "<a href='/admin/users/{$value}' target='_blank'>{$value}</a>";
  38. });
  39. $grid->column('skill_name', '技能名称')->label([
  40. '自动收菜' => 'success',
  41. '自动播种' => 'primary',
  42. '自动浇水' => 'info',
  43. '自动除草' => 'warning',
  44. '自动杀虫' => 'danger',
  45. '自动施肥' => 'success',
  46. ]);
  47. $grid->column('process_status', '处理状态')->using([
  48. 'success' => '成功',
  49. 'failed' => '失败',
  50. 'skipped' => '跳过',
  51. 'expired' => '过期'
  52. ])->label([
  53. 'success' => 'success',
  54. 'failed' => 'danger',
  55. 'skipped' => 'warning',
  56. 'expired' => 'secondary'
  57. ]);
  58. $grid->column('process_reason', '处理原因')->limit(50);
  59. $grid->column('execution_time', '执行耗时(秒)')->display(function ($value) {
  60. if ($value > 1) {
  61. return "<span class='text-danger'>{$value}</span>";
  62. } elseif ($value > 0.5) {
  63. return "<span class='text-warning'>{$value}</span>";
  64. } else {
  65. return "<span class='text-success'>{$value}</span>";
  66. }
  67. });
  68. $grid->column('processed_at', '处理时间')->sortable();
  69. // 筛选器
  70. $grid->filter(function (Grid\Filter $filter) {
  71. $filter->equal('user_id', '用户ID');
  72. $filter->equal('pet_id', '宠物ID');
  73. $filter->equal('skill_name', '技能名称')->select([
  74. '自动收菜' => '自动收菜',
  75. '自动播种' => '自动播种',
  76. '自动浇水' => '自动浇水',
  77. '自动除草' => '自动除草',
  78. '自动杀虫' => '自动杀虫',
  79. '自动施肥' => '自动施肥',
  80. ]);
  81. $filter->equal('process_status', '处理状态')->select([
  82. 'success' => '成功',
  83. 'failed' => '失败',
  84. 'skipped' => '跳过',
  85. 'expired' => '过期'
  86. ]);
  87. $filter->between('processed_at', '处理时间')->datetime();
  88. $filter->between('execution_time', '执行耗时(秒)');
  89. });
  90. // 默认排序
  91. $grid->model()->orderBy('processed_at', 'desc');
  92. // 禁用操作
  93. $grid->disableCreateButton();
  94. $grid->disableEditButton();
  95. $grid->disableDeleteButton();
  96. $grid->disableBatchDelete();
  97. // 行操作
  98. $grid->actions(function (Grid\Displayers\Actions $actions) {
  99. $actions->disableEdit();
  100. $actions->disableDelete();
  101. });
  102. // 工具栏
  103. $grid->tools(function (Grid\Tools $tools) {
  104. $tools->append('<a href="javascript:void(0)" class="btn btn-sm btn-outline-primary" onclick="location.reload()">刷新</a>');
  105. });
  106. });
  107. }
  108. /**
  109. * 详情页面
  110. *
  111. * @param mixed $id
  112. * @return Show
  113. */
  114. protected function detail($id): Show
  115. {
  116. return Show::make($id, PetSkillProcessLog::with(['activeSkill', 'pet']), function (Show $show) {
  117. $show->field('id', 'ID');
  118. $show->field('active_skill_id', '激活技能ID');
  119. $show->field('pet_id', '宠物ID');
  120. $show->field('user_id', '用户ID');
  121. $show->field('skill_name', '技能名称');
  122. $show->field('process_status', '处理状态')->using([
  123. 'success' => '成功',
  124. 'failed' => '失败',
  125. 'skipped' => '跳过',
  126. 'expired' => '过期'
  127. ]);
  128. $show->field('process_reason', '处理原因');
  129. $show->field('process_data', '处理数据')->json();
  130. $show->field('execution_time', '执行耗时(秒)');
  131. $show->field('processed_at', '处理时间');
  132. $show->field('created_at', '创建时间');
  133. $show->field('updated_at', '更新时间');
  134. // 关联信息
  135. $show->divider();
  136. if ($show->model()->activeSkill) {
  137. $show->field('activeSkill.skill_name', '关联技能名称');
  138. $show->field('activeSkill.start_time', '技能开始时间');
  139. $show->field('activeSkill.end_time', '技能结束时间');
  140. $show->field('activeSkill.status', '技能状态');
  141. }
  142. if ($show->model()->pet) {
  143. $show->field('pet.name', '宠物名称');
  144. $show->field('pet.level', '宠物等级');
  145. }
  146. });
  147. }
  148. /**
  149. * 表单页面(禁用)
  150. *
  151. * @return Form
  152. */
  153. protected function form(): Form
  154. {
  155. return Form::make(new PetSkillProcessLog(), function (Form $form) {
  156. $form->display('id', 'ID');
  157. $form->display('active_skill_id', '激活技能ID');
  158. $form->display('pet_id', '宠物ID');
  159. $form->display('user_id', '用户ID');
  160. $form->display('skill_name', '技能名称');
  161. $form->display('process_status', '处理状态');
  162. $form->display('process_reason', '处理原因');
  163. $form->display('process_data', '处理数据');
  164. $form->display('execution_time', '执行耗时(秒)');
  165. $form->display('processed_at', '处理时间');
  166. $form->display('created_at', '创建时间');
  167. $form->display('updated_at', '更新时间');
  168. $form->disableCreatingCheck();
  169. $form->disableEditingCheck();
  170. $form->disableViewCheck();
  171. });
  172. }
  173. }