GameConditionItemController.php 7.1 KB

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