GameConditionItemController.php 6.9 KB

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