FarmHouseConfigController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App\Module\Farm\AdminControllers;
  3. use App\Module\Farm\AdminControllers\Helper\FilterHelper;
  4. use App\Module\Farm\AdminControllers\Helper\FormHelper;
  5. use App\Module\Farm\AdminControllers\Helper\GridHelper;
  6. use App\Module\Farm\AdminControllers\Helper\ShowHelper;
  7. use App\Module\Farm\AdminControllers\Tools\RefreshCheckTool;
  8. use App\Module\Farm\AdminControllers\Tools\SyncFarmHouseJsonTool;
  9. use App\Module\Farm\Repositories\FarmHouseConfigRepository;
  10. use Dcat\Admin\Form;
  11. use Dcat\Admin\Grid;
  12. use Dcat\Admin\Show;
  13. use Spatie\RouteAttributes\Attributes\Get;
  14. use Spatie\RouteAttributes\Attributes\Resource;
  15. use UCore\DcatAdmin\AdminController;
  16. /**
  17. * 房屋等级配置管理控制器
  18. */
  19. #[Resource('farm-house-configs', names: 'dcat.admin.farm-house-configs')]
  20. class FarmHouseConfigController extends AdminController
  21. {
  22. /**
  23. * 生成房屋配置JSON数据
  24. */
  25. #[Get('farm-house-configs/generate-json')]
  26. public function generateJson()
  27. {
  28. try {
  29. // 直接调用命令生成JSON
  30. $process = new \Symfony\Component\Process\Process(['php', 'artisan', 'farm:generate-house-json']);
  31. $process->setWorkingDirectory(base_path());
  32. $process->run();
  33. if (!$process->isSuccessful()) {
  34. return response()->json([
  35. 'status' => 'error',
  36. 'message' => 'JSON生成失败: ' . $process->getErrorOutput()
  37. ]);
  38. }
  39. return response()->json([
  40. 'status' => 'success',
  41. 'message' => 'JSON生成成功'
  42. ]);
  43. } catch (\Exception $e) {
  44. return response()->json([
  45. 'status' => 'error',
  46. 'message' => 'JSON生成失败: ' . $e->getMessage()
  47. ]);
  48. }
  49. }
  50. /**
  51. * 页面标题
  52. *
  53. * @var string
  54. */
  55. protected $title = '房屋等级配置管理';
  56. /**
  57. * 页面描述
  58. *
  59. * @var string
  60. */
  61. protected $description = '管理房屋等级的配置信息';
  62. /**
  63. * 构建表格
  64. *
  65. * @return Grid
  66. */
  67. protected function grid()
  68. {
  69. return Grid::make(new FarmHouseConfigRepository(), function (Grid $grid) {
  70. // 检查配置表状态
  71. $status = RefreshCheckTool::checkSyncStatus();
  72. if ($status['is_synced']) {
  73. admin_success('JSON配置表状态', $status['message']);
  74. } else {
  75. admin_warning('JSON配置表状态', $status['message']);
  76. }
  77. // 添加工具按钮
  78. $grid->tools([
  79. new RefreshCheckTool($status['should_display']),
  80. new SyncFarmHouseJsonTool($status['should_display'])
  81. ]);
  82. $helper = new GridHelper($grid, $this);
  83. $helper->columnId();
  84. $grid->column('level', '等级')->sortable();
  85. $grid->column('output_bonus', '产出加成')->display(function ($value) {
  86. return ($value * 100) . '%';
  87. })->sortable();
  88. $grid->column('special_land_limit', '特殊土地上限')->sortable();
  89. $grid->column('downgrade_days', '降级天数')->sortable();
  90. $helper->columnCreatedAt();
  91. $helper->columnUpdatedAt();
  92. $grid->filter(function (Grid\Filter $filter) {
  93. $filterHelper = new FilterHelper($filter, $this);
  94. $filterHelper->equalId();
  95. $filter->equal('level', '等级');
  96. $filterHelper->betweenDatetime('created_at', '创建时间');
  97. });
  98. $grid->actions(function (Grid\Displayers\Actions $actions) {
  99. $actions->disableDelete();
  100. });
  101. });
  102. }
  103. /**
  104. * 构建详情页
  105. *
  106. * @param mixed $id
  107. * @return Show
  108. */
  109. protected function detail($id)
  110. {
  111. return Show::make($id, new FarmHouseConfigRepository(), function (Show $show) {
  112. $helper = new ShowHelper($show, $this);
  113. $show->field('id', 'ID');
  114. $show->field('level', '等级');
  115. $show->field('output_bonus', '产出加成')->as(function ($value) {
  116. return ($value * 100) . '%';
  117. });
  118. $show->field('special_land_limit', '特殊土地上限');
  119. $helper->fieldModelCatsJson('upgrade_materials', '升级所需材料');
  120. $show->field('downgrade_days', '降级天数');
  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 FarmHouseConfigRepository(), function (Form $form) {
  133. $helper = new FormHelper($form, $this);
  134. $form->display('id', 'ID');
  135. $form->number('level', '等级')->min(1)->max(12)->required();
  136. $form->rate('output_bonus', '产出加成')->max(1)->step(0.05)->required();
  137. $form->number('special_land_limit', '特殊土地上限')->min(0)->default(0)->required();
  138. $helper->tableMaterials('upgrade_materials', '升级所需材料');
  139. $form->number('downgrade_days', '降级天数')->min(1)->help('留空表示不降级');
  140. $form->display('created_at', '创建时间');
  141. $form->display('updated_at', '更新时间');
  142. });
  143. }
  144. }