FarmFruitGrowthCycleController.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace App\Module\Farm\AdminControllers;
  3. use App\Module\Farm\AdminControllers\Helper\FormHelper;
  4. use App\Module\Farm\AdminControllers\Helper\GridHelper;
  5. use App\Module\Farm\AdminControllers\Helper\ShowHelper;
  6. use App\Module\Farm\Repositories\FarmFruitGrowthCycleRepository;
  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. /**
  13. * 果实生长周期配置管理控制器
  14. */
  15. #[Resource('farm-fruit-growth-cycles', names: 'dcat.admin.farm-fruit-growth-cycles')]
  16. class FarmFruitGrowthCycleController extends AdminController
  17. {
  18. /**
  19. * 页面标题
  20. *
  21. * @var string
  22. */
  23. protected $title = '果实生长周期配置管理';
  24. /**
  25. * 页面描述
  26. *
  27. * @var string
  28. */
  29. protected $description = '管理特定果实的生长周期配置信息';
  30. /**
  31. * 构建表格
  32. *
  33. * @return Grid
  34. */
  35. protected function grid()
  36. {
  37. return Grid::make(new FarmFruitGrowthCycleRepository(['fruitItem']), function (Grid $grid) {
  38. $helper = new GridHelper($grid, $this);
  39. $grid->column('id', 'ID')->sortable();
  40. $grid->column('fruit_item_id', '果实物品ID')->sortable();
  41. // 显示果实物品名称
  42. $grid->column('fruitItem.name', '果实名称')->sortable();
  43. $grid->column('sprout_time', '发芽期时间(秒)')->sortable()->display(function ($value) {
  44. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  45. });
  46. $grid->column('growth_time', '生长期时间(秒)')->sortable()->display(function ($value) {
  47. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  48. });
  49. $grid->column('mature_time', '成熟期时间(秒)')->sortable()->display(function ($value) {
  50. if ($value == 0) {
  51. return '0 (无限)';
  52. }
  53. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  54. });
  55. $grid->column('wither_time', '枯萎期时间(秒)')->sortable()->display(function ($value) {
  56. if ($value == 0) {
  57. return '0 (无限)';
  58. }
  59. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  60. });
  61. $grid->column('created_at', '创建时间')->sortable();
  62. $grid->column('updated_at', '更新时间')->sortable();
  63. $grid->filter(function (Grid\Filter $filter) {
  64. $filter->equal('id', 'ID');
  65. $filter->equal('fruit_item_id', '果实物品ID');
  66. $filter->between('created_at', '创建时间')->datetime();
  67. });
  68. $grid->tools(function (Grid\Tools $tools) {
  69. $tools->batch(function (Grid\Tools\BatchActions $batch) {
  70. $batch->disableDelete();
  71. });
  72. });
  73. $grid->actions(function (Grid\Displayers\Actions $actions) {
  74. $actions->disableDelete();
  75. });
  76. });
  77. }
  78. /**
  79. * 构建详情页
  80. *
  81. * @param mixed $id
  82. * @return Show
  83. */
  84. protected function detail($id)
  85. {
  86. return Show::make($id, new FarmFruitGrowthCycleRepository(['fruitItem']), function (Show $show) {
  87. $helper = new ShowHelper($show, $this);
  88. $show->field('id', 'ID');
  89. $show->field('fruit_item_id', '果实物品ID');
  90. $show->field('fruitItem.name', '果实名称');
  91. $show->field('sprout_time', '发芽期时间(秒)')->as(function ($value) {
  92. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  93. });
  94. $show->field('growth_time', '生长期时间(秒)')->as(function ($value) {
  95. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  96. });
  97. $show->field('mature_time', '成熟期时间(秒)')->as(function ($value) {
  98. if ($value == 0) {
  99. return '0 (无限)';
  100. }
  101. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  102. });
  103. $show->field('wither_time', '枯萎期时间(秒)')->as(function ($value) {
  104. if ($value == 0) {
  105. return '0 (无限)';
  106. }
  107. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  108. });
  109. $show->field('created_at', '创建时间');
  110. $show->field('updated_at', '更新时间');
  111. });
  112. }
  113. /**
  114. * 构建表单
  115. *
  116. * @return Form
  117. */
  118. protected function form()
  119. {
  120. return Form::make(new FarmFruitGrowthCycleRepository(['fruitItem']), function (Form $form) {
  121. $helper = new FormHelper($form, $this);
  122. $form->display('id', 'ID');
  123. $form->number('fruit_item_id', '果实物品ID')
  124. ->min(1)
  125. ->required()
  126. ->help('对应的果实物品ID,必须是有效的物品ID');
  127. $form->number('sprout_time', '发芽期时间(秒)')
  128. ->min(0)
  129. ->required()
  130. ->help('发芽期持续时间,单位:秒');
  131. $form->number('growth_time', '生长期时间(秒)')
  132. ->min(0)
  133. ->required()
  134. ->help('生长期持续时间,单位:秒');
  135. $form->number('mature_time', '成熟期时间(秒)')
  136. ->min(0)
  137. ->default(0)
  138. ->help('成熟期持续时间,单位:秒。设置为0表示无限时间,直到收获');
  139. $form->number('wither_time', '枯萎期时间(秒)')
  140. ->min(0)
  141. ->default(0)
  142. ->help('枯萎期持续时间,单位:秒。设置为0表示无限时间,不会自动消失');
  143. $form->display('created_at', '创建时间');
  144. $form->display('updated_at', '更新时间');
  145. // 验证果实物品ID的唯一性
  146. $form->saving(function (Form $form) {
  147. $fruitItemId = $form->fruit_item_id;
  148. $id = $form->model()->id ?? null;
  149. $exists = \App\Module\Farm\Models\FarmFruitGrowthCycle::where('fruit_item_id', $fruitItemId)
  150. ->when($id, function ($query) use ($id) {
  151. return $query->where('id', '!=', $id);
  152. })
  153. ->exists();
  154. if ($exists) {
  155. return $form->error('该果实物品ID已存在生长周期配置');
  156. }
  157. });
  158. });
  159. }
  160. }