PetRemouldLogController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace App\Module\Pet\AdminControllers;
  3. use App\Module\Pet\Enums\PetGrade;
  4. use App\Module\Pet\Models\PetRemouldLog;
  5. use App\Module\Pet\Repositorys\PetRemouldLogRepository;
  6. use Dcat\Admin\Form;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Show;
  9. use UCore\DcatAdmin\AdminController;
  10. use Spatie\RouteAttributes\Attributes\Resource;
  11. use App\Module\Pet\AdminControllers\Helper\FilterHelper;
  12. use App\Module\Pet\AdminControllers\Helper\FormHelper;
  13. use App\Module\Pet\AdminControllers\Helper\GridHelper;
  14. use App\Module\Pet\AdminControllers\Helper\ShowHelper;
  15. /**
  16. * 宠物洗髓记录控制器
  17. *
  18. * @package App\Module\Pet\AdminControllers
  19. */
  20. #[Resource('pet-remould-logs', names: 'dcat.admin.pet-remould-logs')]
  21. class PetRemouldLogController extends AdminController
  22. {
  23. /**
  24. * 标题
  25. *
  26. * @var string
  27. */
  28. protected $title = '宠物洗髓记录';
  29. /**
  30. * 列表页
  31. *
  32. * @return Grid
  33. */
  34. protected function grid()
  35. {
  36. return Grid::make(new PetRemouldLogRepository(['pet']), function (Grid $grid) {
  37. $helper = new GridHelper($grid, $this);
  38. $grid->column('id', 'ID')->sortable();
  39. $grid->column('pet.name', '宠物名称');
  40. $grid->column('old_grade', '原品阶')->display(function ($value) {
  41. if ($value instanceof PetGrade) {
  42. $value = $value->value;
  43. }
  44. $labels = [
  45. PetGrade::FIRST->value => '一品',
  46. PetGrade::SECOND->value => '二品',
  47. PetGrade::THIRD->value => '三品',
  48. PetGrade::FOURTH->value => '四品',
  49. ];
  50. return $labels[$value] ?? '未知';
  51. });
  52. $grid->column('new_grade', '新品阶')->display(function ($value) {
  53. if ($value instanceof PetGrade) {
  54. $value = $value->value;
  55. }
  56. $labels = [
  57. PetGrade::FIRST->value => '一品',
  58. PetGrade::SECOND->value => '二品',
  59. PetGrade::THIRD->value => '三品',
  60. PetGrade::FOURTH->value => '四品',
  61. ];
  62. return $labels[$value] ?? '未知';
  63. });
  64. $grid->column('remould_time', '洗髓时间')->sortable();
  65. $grid->column('created_at', '创建时间');
  66. // 筛选
  67. $grid->filter(function ($filter) {
  68. $helper = new FilterHelper($filter, $this);
  69. $helper->equal('id', 'ID');
  70. $helper->equalSelectModelPet('pet_id', '宠物');
  71. $filter->equal('old_grade', '原品阶')->select([
  72. PetGrade::FIRST->value => '一品',
  73. PetGrade::SECOND->value => '二品',
  74. PetGrade::THIRD->value => '三品',
  75. PetGrade::FOURTH->value => '四品',
  76. ]);
  77. $filter->equal('new_grade', '新品阶')->select([
  78. PetGrade::FIRST->value => '一品',
  79. PetGrade::SECOND->value => '二品',
  80. PetGrade::THIRD->value => '三品',
  81. PetGrade::FOURTH->value => '四品',
  82. ]);
  83. $filter->between('remould_time', '洗髓时间')->datetime();
  84. });
  85. // 默认按洗髓时间倒序排序
  86. $grid->model()->orderBy('remould_time', 'desc');
  87. return $grid;
  88. });
  89. }
  90. /**
  91. * 详情页
  92. *
  93. * @param mixed $id
  94. * @return Show
  95. */
  96. protected function detail($id)
  97. {
  98. return Show::make($id, new PetRemouldLogRepository(['pet']), function (Show $show) {
  99. $helper = new ShowHelper($show, $this);
  100. $helper->field('id', 'ID');
  101. $show->field('pet.name', '宠物名称');
  102. $show->field('pet.user_id', '用户ID');
  103. $helper->fieldPetGrade('old_grade', '原品阶');
  104. $helper->fieldPetGrade('new_grade', '新品阶');
  105. $show->field('remould_time', '洗髓时间');
  106. $show->field('created_at', '创建时间');
  107. return $show;
  108. });
  109. }
  110. /**
  111. * 表单
  112. *
  113. * @return Form
  114. */
  115. protected function form()
  116. {
  117. return Form::make(new PetRemouldLogRepository(), function (Form $form) {
  118. $helper = new FormHelper($form, $this);
  119. $form->display('id', 'ID');
  120. $helper->selectModelPet('pet_id', '宠物')
  121. ->required();
  122. $form->select('old_grade', '原品阶')
  123. ->options([
  124. PetGrade::FIRST->value => '一品',
  125. PetGrade::SECOND->value => '二品',
  126. PetGrade::THIRD->value => '三品',
  127. PetGrade::FOURTH->value => '四品',
  128. ])
  129. ->required();
  130. $form->select('new_grade', '新品阶')
  131. ->options([
  132. PetGrade::FIRST->value => '一品',
  133. PetGrade::SECOND->value => '二品',
  134. PetGrade::THIRD->value => '三品',
  135. PetGrade::FOURTH->value => '四品',
  136. ])
  137. ->required();
  138. $form->datetime('remould_time', '洗髓时间')
  139. ->default(now())
  140. ->required();
  141. $form->display('created_at', '创建时间');
  142. return $form;
  143. });
  144. }
  145. }