GameConditionItemController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace App\Module\Game\AdminControllers;
  3. use App\Module\Farm\Models\FarmLandType;
  4. use App\Module\Fund\Models\FundConfigModel;
  5. use App\Module\Fund\Models\FundCurrencyModel;
  6. use App\Module\Game\Enums\CONDITION_OPERATOR;
  7. use App\Module\Game\Enums\CONDITION_TYPE;
  8. use App\Module\Game\Models\GameConditionGroup;
  9. use App\Module\Game\Repositorys\GameConditionItemRepository;
  10. use App\Module\GameItems\Models\Item;
  11. use App\Module\Pet\Models\PetConfig;
  12. use Dcat\Admin\Form;
  13. use Dcat\Admin\Grid;
  14. use Dcat\Admin\Show;
  15. use Dcat\Admin\Http\Controllers\AdminController;
  16. use Spatie\RouteAttributes\Attributes\Resource;
  17. /**
  18. * 条件项管理控制器
  19. */
  20. #[Resource('game-condition-items', names: 'dcat.admin.game-condition-items')]
  21. class GameConditionItemController extends AdminController
  22. {
  23. /**
  24. * 标题
  25. *
  26. * @return string
  27. */
  28. protected function title()
  29. {
  30. return '条件项管理';
  31. }
  32. /**
  33. * 创建表格
  34. *
  35. * @return Grid
  36. */
  37. protected function grid()
  38. {
  39. return Grid::make(new GameConditionItemRepository(), function (Grid $grid) {
  40. $grid->column('id', 'ID')->sortable();
  41. $grid->column('group_id', '条件组')->display(function ($groupId) {
  42. $group = GameConditionGroup::find($groupId);
  43. return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})";
  44. });
  45. $grid->column('condition_type', '条件类型')->display(function ($type) {
  46. return CONDITION_TYPE::getName($type);
  47. });
  48. $grid->column('target_id', '目标ID')->display(function () {
  49. return $this->getTargetName();
  50. });
  51. $grid->column('operator', '比较运算符')->display(function ($operator) {
  52. return CONDITION_OPERATOR::getSymbol($operator);
  53. });
  54. $grid->column('value', '比较值');
  55. $grid->column('created_at', '创建时间');
  56. $grid->column('updated_at', '更新时间');
  57. $grid->filter(function (Grid\Filter $filter) {
  58. $filter->equal('id', 'ID');
  59. $filter->equal('group_id', '条件组')->select(
  60. GameConditionGroup::pluck('name', 'id')
  61. );
  62. $filter->equal('condition_type', '条件类型')->select(CONDITION_TYPE::getAll());
  63. $filter->equal('target_id', '目标ID');
  64. });
  65. });
  66. }
  67. /**
  68. * 创建详情页
  69. *
  70. * @param mixed $id
  71. * @return Show
  72. */
  73. protected function detail($id)
  74. {
  75. return Show::make($id, new GameConditionItemRepository(), function (Show $show) {
  76. $show->field('id', 'ID');
  77. $show->field('group_id', '条件组')->as(function ($groupId) {
  78. $group = GameConditionGroup::find($groupId);
  79. return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})";
  80. });
  81. $show->field('condition_type', '条件类型')->as(function ($type) {
  82. return CONDITION_TYPE::getName($type);
  83. });
  84. $show->field('target_id', '目标ID')->as(function () {
  85. return $this->getTargetName();
  86. });
  87. $show->field('operator', '比较运算符')->as(function ($operator) {
  88. return CONDITION_OPERATOR::getName($operator) . ' (' . CONDITION_OPERATOR::getSymbol($operator) . ')';
  89. });
  90. $show->field('value', '比较值');
  91. $show->field('param1', '参数1');
  92. $show->field('param2', '参数2');
  93. $show->field('extra_data', '额外数据')->json();
  94. $show->field('created_at', '创建时间');
  95. $show->field('updated_at', '更新时间');
  96. });
  97. }
  98. /**
  99. * 创建表单
  100. *
  101. * @return Form
  102. */
  103. protected function form()
  104. {
  105. return Form::make(new GameConditionItemRepository(), function (Form $form) {
  106. $form->display('id', 'ID');
  107. $form->select('group_id', '条件组')
  108. ->options(GameConditionGroup::pluck('name', 'id'))
  109. ->required();
  110. // 简化表单,不使用when方法
  111. $form->select('condition_type', '条件类型')
  112. ->options(CONDITION_TYPE::getAll())
  113. ->required()->default(request()->input('condition_type'));
  114. // 根据条件类型显示不同的提示信息
  115. $form->select('target_id', '目标ID')
  116. ->options(function () {
  117. $conditionType = request()->input('condition_type',$this->condition_type);
  118. // 根据条件类型返回不同的选项
  119. if ($conditionType == CONDITION_TYPE::LAND_LEVEL->value) {
  120. return FarmLandType::pluck('name', 'id')->toArray();
  121. } elseif ($conditionType == CONDITION_TYPE::PET_LEVEL->value) {
  122. return PetConfig::pluck('name', 'id')->toArray();
  123. } elseif ($conditionType == CONDITION_TYPE::ITEM_COUNT->value) {
  124. return Item::pluck('name', 'id')->toArray();
  125. } elseif ($conditionType == CONDITION_TYPE::CURRENCY_COUNT->value) {
  126. return FundCurrencyModel::pluck('name', 'id')->toArray();
  127. } elseif ($conditionType == CONDITION_TYPE::FUND_COUNT->value) {
  128. return FundConfigModel::pluck('name', 'id')->toArray();
  129. }
  130. return [];
  131. })
  132. ->help('根据条件类型不同,表示土地类型ID、宠物ID、物品ID、代币ID等。房屋等级条件可填0。');
  133. $form->select('operator', '比较运算符')
  134. ->options(CONDITION_OPERATOR::getAll())
  135. ->default(CONDITION_OPERATOR::GREATER_THAN_OR_EQUAL->value)
  136. ->required()
  137. ->help('选择比较运算符,如等于、大于等于等');
  138. $form->number('value', '比较值')
  139. ->default(0)
  140. ->required()
  141. ->help('设置比较的目标值');
  142. $form->number('param1', '参数1')
  143. ->default(0)
  144. ->help('根据条件类型不同含义,可选');
  145. $form->number('param2', '参数2')
  146. ->default(0)
  147. ->help('根据条件类型不同含义,可选');
  148. $form->textarea('extra_data', '额外数据')
  149. ->help('JSON格式,可存储特定条件类型的额外参数,可选');
  150. $form->display('created_at', '创建时间');
  151. $form->display('updated_at', '更新时间');
  152. // 添加简单的JavaScript代码,处理条件类型变化
  153. $form->html(<<<HTML
  154. <script>
  155. $(function() {
  156. // 监听条件类型变化
  157. $('select[name="condition_type"]').on('change', function() {
  158. // 刷新页面,传递条件类型参数
  159. var url = new URL(window.location.href);
  160. url.searchParams.set('condition_type', $(this).val());
  161. window.location.href = url.toString();
  162. });
  163. });
  164. </script>
  165. HTML);
  166. });
  167. }
  168. }