OutputLimitController.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. namespace App\Module\GameItems\AdminControllers;
  3. use App\Module\GameItems\Repositorys\ItemOutputLimitRepository;
  4. use App\Module\GameItems\Repositorys\ItemRepository;
  5. use Dcat\Admin\Form;
  6. use Dcat\Admin\Grid;
  7. use Dcat\Admin\Show;
  8. use UCore\DcatAdmin\AdminController;
  9. use Dcat\Admin\Layout\Content;
  10. use Spatie\RouteAttributes\Attributes\Resource;
  11. use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
  12. use App\Module\GameItems\AdminControllers\Helper\FormHelper;
  13. use App\Module\GameItems\AdminControllers\Helper\GridHelper;
  14. use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
  15. /**
  16. * 物品产出限制管理控制器
  17. *
  18. * @package App\Module\GameItems\AdminControllers
  19. */
  20. #[Resource('game-items-output-limits', names: 'dcat.admin.game-items-output-limits')]
  21. class OutputLimitController extends AdminController
  22. {
  23. /**
  24. * 标题
  25. *
  26. * @var string
  27. */
  28. protected $title = '物品产出限制管理';
  29. /**
  30. * 列表页
  31. *
  32. * @return Grid
  33. */
  34. protected function grid()
  35. {
  36. return Grid::make(new ItemOutputLimitRepository(), function (Grid $grid) {
  37. $helper = new GridHelper($grid, $this);
  38. $helper->columnId();
  39. $grid->column('item.name', '物品名称');
  40. $grid->column('limit_type', '限制类型')->display(function ($value) {
  41. $types = [
  42. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  43. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  44. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  45. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  46. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  47. ];
  48. return $types[$value] ?? '未知';
  49. });
  50. $grid->column('max_quantity', '最大数量');
  51. $grid->column('period_type', '周期类型')->display(function ($value) {
  52. $types = [
  53. 1 => '永久',
  54. 2 => '每日',
  55. 3 => '每周',
  56. 4 => '每月',
  57. 5 => '自定义',
  58. ];
  59. return $types[$value] ?? '未知';
  60. });
  61. $grid->column('period_value', '周期值')->display(function ($value) {
  62. if ($this->period_type == 5) {
  63. return $value . ' 小时';
  64. }
  65. return '-';
  66. });
  67. $grid->column('reset_time', '重置时间');
  68. $grid->column('is_active', '是否启用')->switch();
  69. $grid->column('created_at', '创建时间');
  70. $grid->column('updated_at', '更新时间');
  71. // 筛选
  72. $grid->filter(function ($filter) {
  73. $helper = new FilterHelper($filter, $this);
  74. $helper->equal('id', 'ID');
  75. $filter->equal('item_id', '物品')->select(
  76. (new ItemRepository())->pluck('name', 'id')
  77. );
  78. $filter->equal('limit_type', '限制类型')->select([
  79. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  80. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  81. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  82. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  83. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  84. ]);
  85. $filter->equal('is_active', '是否启用')->radio([
  86. 1 => '是',
  87. 0 => '否',
  88. ]);
  89. });
  90. });
  91. }
  92. /**
  93. * 详情页
  94. *
  95. * @param mixed $id
  96. * @param Content $content
  97. * @return Content
  98. */
  99. public function show($id, Content $content)
  100. {
  101. return $content
  102. ->header($this->title)
  103. ->description('详情')
  104. ->body($this->detail($id));
  105. }
  106. /**
  107. * 详情页
  108. *
  109. * @param mixed $id
  110. * @return Show
  111. */
  112. protected function detail($id)
  113. {
  114. return Show::make($id, new ItemOutputLimitRepository(), function (Show $show) {
  115. $helper = new ShowHelper($show, $this);
  116. $helper->field('id', 'ID');
  117. $show->field('item.name', '物品名称');
  118. $show->field('limit_type', '限制类型')->as(function ($value) {
  119. $types = [
  120. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  121. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  122. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  123. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  124. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  125. ];
  126. return $types[$value] ?? '未知';
  127. });
  128. $helper->field('max_quantity', '最大数量');
  129. $show->field('period_type', '周期类型')->as(function ($value) {
  130. $types = [
  131. 1 => '永久',
  132. 2 => '每日',
  133. 3 => '每周',
  134. 4 => '每月',
  135. 5 => '自定义',
  136. ];
  137. return $types[$value] ?? '未知';
  138. });
  139. $show->field('period_value', '周期值')->as(function ($value) {
  140. if ($this->period_type == 5) {
  141. return $value . ' 小时';
  142. }
  143. return '-';
  144. });
  145. $helper->field('reset_time', '重置时间');
  146. $show->field('is_active', '是否启用')->as(function ($value) {
  147. return $value ? '是' : '否';
  148. });
  149. $helper->field('created_at', '创建时间');
  150. $helper->field('updated_at', '更新时间');
  151. });
  152. }
  153. /**
  154. * 创建页
  155. *
  156. * @param Content $content
  157. * @return Content
  158. */
  159. public function create(Content $content)
  160. {
  161. return $content
  162. ->header($this->title)
  163. ->description('创建')
  164. ->body($this->form());
  165. }
  166. /**
  167. * 编辑页
  168. *
  169. * @param mixed $id
  170. * @param Content $content
  171. * @return Content
  172. */
  173. public function edit($id, Content $content)
  174. {
  175. return $content
  176. ->header($this->title)
  177. ->description('编辑')
  178. ->body($this->form()->edit($id));
  179. }
  180. /**
  181. * 表单
  182. *
  183. * @return Form
  184. */
  185. protected function form()
  186. {
  187. return Form::make(new ItemOutputLimitRepository(), function (Form $form) {
  188. $form->select('item_id', '物品')
  189. ->options((new ItemRepository())->pluck('name', 'id'))
  190. ->required();
  191. $form->select('limit_type', '限制类型')
  192. ->options([
  193. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  194. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  195. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  196. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  197. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  198. ])
  199. ->required()
  200. ->help('全局限制:所有用户共享限制;用户限制:每个用户单独限制;每日/周/月限制:每个用户在周期内的限制');
  201. $form->number('max_quantity', '最大数量')
  202. ->min(1)
  203. ->required()
  204. ->help('最大产出数量');
  205. $form->select('period_type', '周期类型')
  206. ->options([
  207. 1 => '永久',
  208. 2 => '每日',
  209. 3 => '每周',
  210. 4 => '每月',
  211. 5 => '自定义',
  212. ])
  213. ->default(1)
  214. ->required()
  215. ->when(5, function (Form $form) {
  216. $form->number('period_value', '周期值(小时)')
  217. ->min(1)
  218. ->required()
  219. ->help('自定义周期的小时数');
  220. });
  221. $form->datetime('reset_time', '重置时间')
  222. ->help('下一次重置时间,为空表示不重置');
  223. $form->switch('is_active', '是否启用')
  224. ->default(true);
  225. });
  226. }
  227. }