FarmSeedController.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Module\Farm\AdminControllers;
  3. use App\Module\Farm\Enums\SEED_TYPE;
  4. use App\Module\Farm\Repositories\FarmSeedRepository;
  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 Spatie\RouteAttributes\Attributes\Get;
  11. /**
  12. * 种子配置管理控制器
  13. */
  14. #[Resource('farm-seeds', names: 'dcat.admin.farm-seeds')]
  15. class FarmSeedController extends AdminController
  16. {
  17. /**
  18. * 页面标题
  19. *
  20. * @var string
  21. */
  22. protected $title = '种子配置管理';
  23. /**
  24. * 页面描述
  25. *
  26. * @var string
  27. */
  28. protected $description = '管理种子的基本配置信息';
  29. /**
  30. * 构建表格
  31. *
  32. * @return Grid
  33. */
  34. protected function grid()
  35. {
  36. return Grid::make(new FarmSeedRepository(), function (Grid $grid) {
  37. $grid->column('id', 'ID')->sortable();
  38. $grid->column('name', '名称')->sortable();
  39. $grid->column('type', '类型')->display(function ($value) {
  40. return SEED_TYPE::getName($value);
  41. })->sortable();
  42. $grid->column('seed_time', '种子期时间(秒)')->sortable();
  43. $grid->column('sprout_time', '发芽期时间(秒)')->sortable();
  44. $grid->column('growth_time', '生长期时间(秒)')->sortable();
  45. $grid->column('min_output', '最小产出')->sortable();
  46. $grid->column('max_output', '最大产出')->sortable();
  47. $grid->column('item_id', '物品ID')->sortable();
  48. $grid->column('created_at', '创建时间')->sortable();
  49. $grid->column('updated_at', '更新时间')->sortable();
  50. $grid->filter(function (Grid\Filter $filter) {
  51. $filter->equal('id', 'ID');
  52. $filter->like('name', '名称');
  53. $filter->equal('type', '类型')->select([
  54. SEED_TYPE::NORMAL => SEED_TYPE::getName(SEED_TYPE::NORMAL),
  55. SEED_TYPE::MYSTERIOUS => SEED_TYPE::getName(SEED_TYPE::MYSTERIOUS),
  56. SEED_TYPE::GIANT => SEED_TYPE::getName(SEED_TYPE::GIANT),
  57. ]);
  58. $filter->equal('item_id', '物品ID');
  59. $filter->between('created_at', '创建时间')->datetime();
  60. });
  61. // 添加复制功能
  62. $grid->tools(function (Grid\Tools $tools) {
  63. $tools->batch(function (Grid\Tools\BatchActions $batch) {
  64. $batch->disableDelete();
  65. });
  66. });
  67. $grid->actions(function (Grid\Displayers\Actions $actions) {
  68. $actions->append('<a href="' . admin_url('farm/seeds/' . $actions->getKey() . '/duplicate') . '" class="btn btn-sm btn-primary">复制</a>');
  69. });
  70. });
  71. }
  72. /**
  73. * 复制种子配置
  74. *
  75. * @param int $id
  76. * @return \Illuminate\Http\RedirectResponse
  77. */
  78. #[Get('farm-seeds/{id}/duplicate')]
  79. public function duplicate($id)
  80. {
  81. $repository = new FarmSeedRepository();
  82. $seed = $repository->find($id);
  83. if (!$seed) {
  84. return response()->json(['message' => '种子配置不存在'], 404);
  85. }
  86. $newSeed = $seed->replicate();
  87. $newSeed->name = $seed->name . ' (复制)';
  88. $newSeed->save();
  89. return redirect()->back()->with('success', '复制成功');
  90. }
  91. /**
  92. * 构建详情页
  93. *
  94. * @param mixed $id
  95. * @return Show
  96. */
  97. protected function detail($id)
  98. {
  99. return Show::make($id, new FarmSeedRepository(), function (Show $show) {
  100. $show->field('id', 'ID');
  101. $show->field('name', '名称');
  102. $show->field('type', '类型')->as(function ($value) {
  103. return SEED_TYPE::getName($value);
  104. });
  105. $show->field('seed_time', '种子期时间(秒)');
  106. $show->field('sprout_time', '发芽期时间(秒)');
  107. $show->field('growth_time', '生长期时间(秒)');
  108. $show->field('min_output', '最小产出');
  109. $show->field('max_output', '最大产出');
  110. $show->field('item_id', '物品ID');
  111. $show->field('disaster_resistance', '灾害抵抗')->json();
  112. $show->field('display_attributes', '显示属性')->json();
  113. $show->field('created_at', '创建时间');
  114. $show->field('updated_at', '更新时间');
  115. });
  116. }
  117. /**
  118. * 构建表单
  119. *
  120. * @return Form
  121. */
  122. protected function form()
  123. {
  124. return Form::make(new FarmSeedRepository(), function (Form $form) {
  125. $form->display('id', 'ID');
  126. $form->text('name', '名称')->required();
  127. $form->select('type', '类型')->options([
  128. SEED_TYPE::NORMAL => SEED_TYPE::getName(SEED_TYPE::NORMAL),
  129. SEED_TYPE::MYSTERIOUS => SEED_TYPE::getName(SEED_TYPE::MYSTERIOUS),
  130. SEED_TYPE::GIANT => SEED_TYPE::getName(SEED_TYPE::GIANT),
  131. ])->required();
  132. $form->number('seed_time', '种子期时间(秒)')->min(0)->required();
  133. $form->number('sprout_time', '发芽期时间(秒)')->min(0)->required();
  134. $form->number('growth_time', '生长期时间(秒)')->min(0)->required();
  135. $form->number('min_output', '最小产出')->min(0)->required();
  136. $form->number('max_output', '最大产出')->min(0)->required();
  137. $form->number('item_id', '物品ID')->min(1)->required();
  138. $form->textarea('disaster_resistance', '灾害抵抗')->json();
  139. $form->textarea('display_attributes', '显示属性')->json();
  140. $form->display('created_at', '创建时间');
  141. $form->display('updated_at', '更新时间');
  142. });
  143. }
  144. }