OutputLimitController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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. $grid = new Grid(new ItemOutputLimit());
  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. * @param mixed $id
  85. * @param Content $content
  86. * @return Content
  87. */
  88. public function show($id, Content $content)
  89. {
  90. return $content
  91. ->header($this->title)
  92. ->description('详情')
  93. ->body($this->detail($id));
  94. }
  95. /**
  96. * 详情页
  97. *
  98. * @param mixed $id
  99. * @return Show
  100. */
  101. protected function detail($id)
  102. {
  103. $show = new Show(ItemOutputLimit::findOrFail($id));
  104. $show->field('id', 'ID');
  105. $show->field('item.name', '物品名称');
  106. $show->field('limit_type', '限制类型')->as(function ($value) {
  107. $types = [
  108. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  109. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  110. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  111. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  112. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  113. ];
  114. return $types[$value] ?? '未知';
  115. });
  116. $show->field('max_quantity', '最大数量');
  117. $show->field('period_type', '周期类型')->as(function ($value) {
  118. $types = [
  119. 1 => '永久',
  120. 2 => '每日',
  121. 3 => '每周',
  122. 4 => '每月',
  123. 5 => '自定义',
  124. ];
  125. return $types[$value] ?? '未知';
  126. });
  127. $show->field('period_value', '周期值')->as(function ($value) {
  128. if ($this->period_type == 5) {
  129. return $value . ' 小时';
  130. }
  131. return '-';
  132. });
  133. $show->field('reset_time', '重置时间');
  134. $show->field('is_active', '是否启用')->as(function ($value) {
  135. return $value ? '是' : '否';
  136. });
  137. $show->field('created_at', '创建时间');
  138. $show->field('updated_at', '更新时间');
  139. return $show;
  140. }
  141. /**
  142. * 创建页
  143. *
  144. * @param Content $content
  145. * @return Content
  146. */
  147. public function create(Content $content)
  148. {
  149. return $content
  150. ->header($this->title)
  151. ->description('创建')
  152. ->body($this->form());
  153. }
  154. /**
  155. * 编辑页
  156. *
  157. * @param mixed $id
  158. * @param Content $content
  159. * @return Content
  160. */
  161. public function edit($id, Content $content)
  162. {
  163. return $content
  164. ->header($this->title)
  165. ->description('编辑')
  166. ->body($this->form()->edit($id));
  167. }
  168. /**
  169. * 表单
  170. *
  171. * @return Form
  172. */
  173. protected function form()
  174. {
  175. $form = new Form(new ItemOutputLimit());
  176. $form->select('item_id', '物品')
  177. ->options(ItemItem::pluck('name', 'id'))
  178. ->required();
  179. $form->select('limit_type', '限制类型')
  180. ->options([
  181. ItemOutputLimit::LIMIT_TYPE_GLOBAL => '全局限制',
  182. ItemOutputLimit::LIMIT_TYPE_USER => '用户限制',
  183. ItemOutputLimit::LIMIT_TYPE_DAILY => '每日限制',
  184. ItemOutputLimit::LIMIT_TYPE_WEEKLY => '每周限制',
  185. ItemOutputLimit::LIMIT_TYPE_MONTHLY => '每月限制',
  186. ])
  187. ->required()
  188. ->help('全局限制:所有用户共享限制;用户限制:每个用户单独限制;每日/周/月限制:每个用户在周期内的限制');
  189. $form->number('max_quantity', '最大数量')
  190. ->min(1)
  191. ->required()
  192. ->help('最大产出数量');
  193. $form->select('period_type', '周期类型')
  194. ->options([
  195. 1 => '永久',
  196. 2 => '每日',
  197. 3 => '每周',
  198. 4 => '每月',
  199. 5 => '自定义',
  200. ])
  201. ->default(1)
  202. ->required()
  203. ->when(5, function (Form $form) {
  204. $form->number('period_value', '周期值(小时)')
  205. ->min(1)
  206. ->required()
  207. ->help('自定义周期的小时数');
  208. });
  209. $form->datetime('reset_time', '重置时间')
  210. ->help('下一次重置时间,为空表示不重置');
  211. $form->switch('is_active', '是否启用')
  212. ->default(true);
  213. return $form;
  214. }
  215. }