FarmShrineConfigController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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\RefreshFarmShrineJsonTool;
  8. use App\Module\Farm\Enums\BUFF_TYPE;
  9. use App\Module\Farm\Repositories\FarmShrineConfigRepository;
  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-shrine-configs', names: 'dcat.admin.farm-shrine-configs')]
  20. class FarmShrineConfigController extends AdminController
  21. {
  22. /**
  23. * 生成神像配置JSON数据
  24. */
  25. #[Get('farm-shrine-configs/generate-json')]
  26. public function generateJson()
  27. {
  28. try {
  29. // 直接调用命令生成JSON
  30. $process = new \Symfony\Component\Process\Process(['php', 'artisan', 'farm:generate-shrine-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. * @return Grid
  54. */
  55. protected function grid()
  56. {
  57. return Grid::make(new FarmShrineConfigRepository(), function (Grid $grid) {
  58. $helper = new GridHelper($grid, $this);
  59. $grid->column('id', 'ID')->sortable();
  60. $grid->column('buff_type', '神像类型')->display(function ($value) {
  61. return BUFF_TYPE::getName($value);
  62. })->sortable();
  63. $grid->column('name', '神像名称');
  64. $grid->column('description', '神像描述');
  65. $grid->column('duration_hours', '默认持续时间(小时)')->sortable();
  66. $grid->column('item_id', '对应物品ID');
  67. $helper->columnModelCatsJson('display_attributes', '显示属性');
  68. $helper->columnModelCatsJson('numeric_attributes', '数值属性');
  69. $grid->column('created_at', '创建时间')->sortable();
  70. $grid->column('updated_at', '更新时间')->sortable();
  71. // 添加刷新按钮
  72. $grid->tools([
  73. RefreshFarmShrineJsonTool::make()
  74. ]);
  75. // 设置过滤器
  76. $grid->filter(function (Grid\Filter $filter) {
  77. $filter->equal('id', 'ID');
  78. $filter->equal('buff_type', '神像类型')->select(BUFF_TYPE::getAll());
  79. $filter->like('name', '神像名称');
  80. $filter->equal('item_id', '对应物品ID');
  81. $filter->between('created_at', '创建时间')->datetime();
  82. });
  83. });
  84. }
  85. /**
  86. * 构建详情页
  87. *
  88. * @param mixed $id
  89. * @return Show
  90. */
  91. protected function detail($id)
  92. {
  93. return Show::make($id, new FarmShrineConfigRepository(), function (Show $show) {
  94. $helper = new ShowHelper($show, $this);
  95. $show->field('id', 'ID');
  96. $show->field('buff_type', '神像类型')->as(function ($value) {
  97. return BUFF_TYPE::getName($value);
  98. });
  99. $show->field('name', '神像名称');
  100. $show->field('description', '神像描述');
  101. $show->field('duration_hours', '默认持续时间(小时)');
  102. $show->field('item_id', '对应物品ID');
  103. $helper->fieldModelCatsJson('display_attributes', '显示属性');
  104. $helper->fieldModelCatsJson('numeric_attributes', '数值属性');
  105. $show->field('created_at', '创建时间');
  106. $show->field('updated_at', '更新时间');
  107. });
  108. }
  109. /**
  110. * 构建表单
  111. *
  112. * @return Form
  113. */
  114. protected function form()
  115. {
  116. return Form::make(new FarmShrineConfigRepository(), function (Form $form) {
  117. $helper = new FormHelper($form, $this);
  118. $form->display('id', 'ID');
  119. $form->select('buff_type', '神像类型')
  120. ->options(BUFF_TYPE::getAll())
  121. ->required();
  122. $form->text('name', '神像名称')->required();
  123. $form->text('description', '神像描述')->required();
  124. $form->number('duration_hours', '默认持续时间(小时)')
  125. ->default(24)
  126. ->min(1)
  127. ->required();
  128. $form->number('item_id', '对应物品ID')
  129. ->min(1)
  130. ->required();
  131. $helper->formKeyValueJson('display_attributes', '显示属性');
  132. $helper->formKeyValueJson('numeric_attributes', '数值属性');
  133. $form->display('created_at', '创建时间');
  134. $form->display('updated_at', '更新时间');
  135. });
  136. }
  137. }