GameConsumeGroupController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Module\Game\AdminControllers;
  3. use App\Module\Game\Models\GameConsumeItem;
  4. use App\Module\Game\Repositorys\GameConsumeGroupRepository;
  5. use Dcat\Admin\Form;
  6. use Dcat\Admin\Grid;
  7. use Dcat\Admin\Show;
  8. use Dcat\Admin\Http\Controllers\AdminController;
  9. use Spatie\RouteAttributes\Attributes\Resource;
  10. /**
  11. * 消耗组管理控制器
  12. */
  13. #[Resource('game-consume-groups', names: 'dcat.admin.game-consume-groups')]
  14. class GameConsumeGroupController extends AdminController
  15. {
  16. /**
  17. * 标题
  18. *
  19. * @return string
  20. */
  21. protected function title()
  22. {
  23. return '消耗组管理';
  24. }
  25. /**
  26. * 创建表格
  27. *
  28. * @return Grid
  29. */
  30. protected function grid()
  31. {
  32. return Grid::make(new GameConsumeGroupRepository(), function (Grid $grid) {
  33. $grid->column('id', 'ID')->sortable();
  34. $grid->column('name', '名称');
  35. $grid->column('code', '编码');
  36. $grid->column('description', '描述')->limit(30);
  37. $grid->column('created_at', '创建时间');
  38. $grid->column('updated_at', '更新时间');
  39. // 添加消耗项数量统计
  40. $grid->column('items_count', '消耗项数量')->display(function () {
  41. return GameConsumeItem::where('group_id', $this->id)->count();
  42. });
  43. $grid->filter(function (Grid\Filter $filter) {
  44. $filter->equal('id', 'ID');
  45. $filter->like('name', '名称');
  46. $filter->like('code', '编码');
  47. });
  48. });
  49. }
  50. /**
  51. * 创建详情页
  52. *
  53. * @param mixed $id
  54. * @return Show
  55. */
  56. protected function detail($id)
  57. {
  58. return Show::make($id, new GameConsumeGroupRepository(), function (Show $show) {
  59. $show->field('id', 'ID');
  60. $show->field('name', '名称');
  61. $show->field('code', '编码');
  62. $show->field('description', '描述');
  63. $show->field('created_at', '创建时间');
  64. $show->field('updated_at', '更新时间');
  65. // 显示消耗项列表
  66. $show->relation('consumeItems', '消耗项列表', function ($model) {
  67. $grid = new Grid(new \App\Module\Game\Repositorys\GameConsumeItemRepository());
  68. $grid->model()->where('group_id', $model->id);
  69. $grid->column('id', 'ID');
  70. $grid->column('consume_type', '消耗类型')->display(function ($type) {
  71. return \App\Module\Game\Enums\CONSUME_TYPE::getName($type);
  72. });
  73. $grid->column('target_id', '目标ID');
  74. $grid->column('quantity', '数量');
  75. $grid->disableCreateButton();
  76. $grid->disableActions();
  77. $grid->disableBatchDelete();
  78. $grid->disableRowSelector();
  79. return $grid;
  80. });
  81. });
  82. }
  83. /**
  84. * 创建表单
  85. *
  86. * @return Form
  87. */
  88. protected function form()
  89. {
  90. return Form::make(new GameConsumeGroupRepository(), function (Form $form) {
  91. $form->display('id', 'ID');
  92. $form->text('name', '名称')->required();
  93. $form->text('code', '编码')
  94. ->required()
  95. ->creationRules(['required', 'unique:game_consume_groups,code'])
  96. ->updateRules(['required', 'unique:game_consume_groups,code,{{id}}']);
  97. $form->textarea('description', '描述');
  98. $form->display('created_at', '创建时间');
  99. $form->display('updated_at', '更新时间');
  100. });
  101. }
  102. }