OutputLimitController.php 7.7 KB

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