OutputLimitController.php 7.4 KB

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