UserRecipeController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App\Module\GameItems\AdminControllers;
  3. use App\Module\GameItems\Repositorys\ItemUserRecipeRepository;
  4. use Dcat\Admin\Grid;
  5. use Dcat\Admin\Show;
  6. use Dcat\Admin\Layout\Content;
  7. use Spatie\RouteAttributes\Attributes\Resource;
  8. use UCore\DcatAdmin\AdminController;
  9. use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
  10. use App\Module\GameItems\AdminControllers\Helper\GridHelper;
  11. use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
  12. /**
  13. * 用户配方解锁状态管理控制器
  14. *
  15. * @package App\Module\GameItems\AdminControllers
  16. */
  17. #[Resource('game-items-user-recipes', names: 'dcat.admin.game-items-user-recipes')]
  18. class UserRecipeController extends AdminController
  19. {
  20. /**
  21. * 标题
  22. *
  23. * @var string
  24. */
  25. protected $title = '用户配方解锁状态';
  26. /**
  27. * 禁用创建按钮
  28. *
  29. * @var bool
  30. */
  31. protected $showCreateButton = false;
  32. /**
  33. * 列表页
  34. *
  35. * @return Grid
  36. */
  37. protected function grid()
  38. {
  39. return Grid::make(new ItemUserRecipeRepository(), function (Grid $grid) {
  40. $helper = new GridHelper($grid, $this);
  41. // 禁用创建、编辑和删除按钮
  42. $grid->disableCreateButton();
  43. $grid->disableActions();
  44. $grid->disableBatchDelete();
  45. $grid->disableDeleteButton();
  46. $grid->disableEditButton();
  47. // 只保留详情按钮
  48. $grid->actions(function (Grid\Displayers\Actions $actions) {
  49. $actions->disableDelete();
  50. $actions->disableEdit();
  51. $actions->disableQuickEdit();
  52. });
  53. $helper->columnId();
  54. $grid->column('user_id', '用户ID');
  55. $grid->column('recipe.name', '配方名称');
  56. $grid->column('is_unlocked', '是否解锁')->switch();
  57. $grid->column('unlock_time', '解锁时间');
  58. $grid->column('craft_count', '合成次数');
  59. $grid->column('last_craft_time', '上次合成时间');
  60. $grid->column('created_at', '创建时间');
  61. $grid->column('updated_at', '更新时间');
  62. // 筛选
  63. $grid->filter(function ($filter) {
  64. $helper = new FilterHelper($filter, $this);
  65. $helper->equal('id', 'ID');
  66. $helper->equal('user_id', '用户ID');
  67. $filter->equal('recipe_id', '配方')->select(
  68. \App\Module\GameItems\Models\ItemRecipe::pluck('name', 'id')
  69. );
  70. $filter->equal('is_unlocked', '是否解锁')->radio([
  71. 1 => '是',
  72. 0 => '否',
  73. ]);
  74. $filter->between('unlock_time', '解锁时间')->datetime();
  75. $filter->between('craft_count', '合成次数');
  76. $filter->between('last_craft_time', '上次合成时间')->datetime();
  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($id, new ItemUserRecipeRepository(), function (Show $show) {
  103. $helper = new ShowHelper($show, $this);
  104. // 禁用编辑和删除按钮
  105. $show->panel()->tools(function ($tools) {
  106. $tools->disableEdit();
  107. $tools->disableDelete();
  108. });
  109. $helper->field('id', 'ID');
  110. $helper->field('user_id', '用户ID');
  111. // 显示配方信息
  112. $show->field('recipe.name', '配方名称');
  113. $show->field('recipe.resultItem.name', '产出物品');
  114. $helper->field('recipe.result_quantity', '产出数量');
  115. $show->field('recipe.success_rate', '成功率')->as(function ($value) {
  116. return ($value * 100) . '%';
  117. });
  118. $show->field('recipe.cooldown_seconds', '冷却时间(秒)');
  119. $show->field('is_unlocked', '是否解锁')->as(function ($value) {
  120. return $value ? '是' : '否';
  121. });
  122. $helper->field('unlock_time', '解锁时间');
  123. $helper->field('craft_count', '合成次数');
  124. $helper->field('last_craft_time', '上次合成时间');
  125. // 计算冷却状态
  126. $show->field('cooldown_status', '冷却状态')->as(function () {
  127. if (!$this->recipe || $this->recipe->cooldown_seconds <= 0) {
  128. return '无冷却';
  129. }
  130. if (!$this->last_craft_time) {
  131. return '未合成过';
  132. }
  133. $cooldownEnd = $this->last_craft_time->addSeconds($this->recipe->cooldown_seconds);
  134. if ($cooldownEnd->isPast()) {
  135. return '已冷却完成';
  136. } else {
  137. $remainingSeconds = now()->diffInSeconds($cooldownEnd, false);
  138. return '冷却中,剩余 ' . $remainingSeconds . ' 秒';
  139. }
  140. });
  141. $helper->field('created_at', '创建时间');
  142. $helper->field('updated_at', '更新时间');
  143. });
  144. }
  145. }