FarmFruitGrowthCycleController.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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('fruit_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('mature_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('wither_time', '枯萎期时间(秒)')->sortable()->display(function ($value) {
  62. if ($value == 0) {
  63. return '0 (无限)';
  64. }
  65. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  66. });
  67. $grid->column('created_at', '创建时间')->sortable();
  68. $grid->column('updated_at', '更新时间')->sortable();
  69. $grid->filter(function (Grid\Filter $filter) {
  70. $filter->equal('id', 'ID');
  71. $filter->equal('fruit_item_id', '果实物品ID');
  72. $filter->between('created_at', '创建时间')->datetime();
  73. });
  74. $grid->tools(function (Grid\Tools $tools) {
  75. $tools->batch(function (Grid\Tools\BatchActions $batch) {
  76. $batch->disableDelete();
  77. });
  78. });
  79. $grid->actions(function (Grid\Displayers\Actions $actions) {
  80. $actions->disableDelete();
  81. });
  82. });
  83. }
  84. /**
  85. * 构建详情页
  86. *
  87. * @param mixed $id
  88. * @return Show
  89. */
  90. protected function detail($id)
  91. {
  92. return Show::make($id, new FarmFruitGrowthCycleRepository(['fruitItem']), function (Show $show) {
  93. $helper = new ShowHelper($show, $this);
  94. $show->field('id', 'ID');
  95. $show->field('fruit_item_id', '果实物品ID');
  96. $show->field('fruitItem.name', '果实名称');
  97. $show->field('sprout_time', '发芽期时间(秒)')->as(function ($value) {
  98. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  99. });
  100. $show->field('growth_time', '生长期时间(秒)')->as(function ($value) {
  101. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  102. });
  103. $show->field('fruit_time', '果实期时间(秒)')->as(function ($value) {
  104. if ($value == 0) {
  105. return '0 (跳过)';
  106. }
  107. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  108. });
  109. $show->field('mature_time', '成熟期时间(秒)')->as(function ($value) {
  110. if ($value == 0) {
  111. return '0 (无限)';
  112. }
  113. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  114. });
  115. $show->field('wither_time', '枯萎期时间(秒)')->as(function ($value) {
  116. if ($value == 0) {
  117. return '0 (无限)';
  118. }
  119. return $value . ' (' . gmdate('H:i:s', $value) . ')';
  120. });
  121. $show->field('created_at', '创建时间');
  122. $show->field('updated_at', '更新时间');
  123. });
  124. }
  125. /**
  126. * 构建表单
  127. *
  128. * @return Form
  129. */
  130. protected function form()
  131. {
  132. return Form::make(new FarmFruitGrowthCycleRepository(['fruitItem']), function (Form $form) {
  133. $helper = new FormHelper($form, $this);
  134. $form->display('id', 'ID');
  135. $form->number('fruit_item_id', '果实物品ID')
  136. ->min(1)
  137. ->required()
  138. ->help('对应的果实物品ID,必须是有效的物品ID');
  139. $form->number('sprout_time', '发芽期时间(秒)')
  140. ->min(0)
  141. ->required()
  142. ->help('发芽期持续时间,单位:秒');
  143. $form->number('growth_time', '生长期时间(秒)')
  144. ->min(0)
  145. ->required()
  146. ->help('生长期持续时间,单位:秒');
  147. $form->number('fruit_time', '果实期时间(秒)')
  148. ->min(0)
  149. ->default(0)
  150. ->help('果实期持续时间,单位:秒。设置为0表示跳过果实期');
  151. $form->number('mature_time', '成熟期时间(秒)')
  152. ->min(0)
  153. ->default(0)
  154. ->help('成熟期持续时间,单位:秒。设置为0表示无限时间,直到收获');
  155. $form->number('wither_time', '枯萎期时间(秒)')
  156. ->min(0)
  157. ->default(0)
  158. ->help('枯萎期持续时间,单位:秒。设置为0表示无限时间,不会自动消失');
  159. $form->display('created_at', '创建时间');
  160. $form->display('updated_at', '更新时间');
  161. // 验证果实物品ID的唯一性
  162. $form->saving(function (Form $form) {
  163. $fruitItemId = $form->fruit_item_id;
  164. $id = $form->model()->id ?? null;
  165. $exists = \App\Module\Farm\Models\FarmFruitGrowthCycle::where('fruit_item_id', $fruitItemId)
  166. ->when($id, function ($query) use ($id) {
  167. return $query->where('id', '!=', $id);
  168. })
  169. ->exists();
  170. if ($exists) {
  171. return $form->error('该果实物品ID已存在生长周期配置');
  172. }
  173. });
  174. });
  175. }
  176. }