GridHelper.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <?php
  2. namespace App\Module\Task\AdminControllers\Helper;
  3. use App\Module\Task\Enums\RESET_TYPE;
  4. use App\Module\Task\Enums\REWARD_TYPE;
  5. use App\Module\Task\Enums\TASK_STATUS;
  6. use App\Module\Task\Enums\TASK_TYPE;
  7. use Dcat\Admin\Grid;
  8. use UCore\DcatAdmin\GridHelper as BaseGridHelper;
  9. /**
  10. * 表格辅助类
  11. *
  12. * 提供任务模块后台控制器的表格构建功能
  13. */
  14. class GridHelper extends BaseGridHelper
  15. {
  16. use GridHelperTrait;
  17. /**
  18. * 任务分类表格
  19. *
  20. * @param Grid $grid
  21. * @return void
  22. */
  23. public static function taskCategoryGrid(Grid $grid): void
  24. {
  25. $grid->column('id', 'ID')->sortable();
  26. $grid->column('name', '分类名称');
  27. $grid->column('parent_id', '父级分类')->display(function ($parentId) {
  28. if ($parentId == 0) {
  29. return '无';
  30. }
  31. $parent = \App\Module\Task\Models\TaskCategory::find($parentId);
  32. return $parent ? $parent->name : '未知';
  33. });
  34. $grid->column('description', '分类描述')->limit(30);
  35. $grid->column('sort_order', '排序权重')->sortable();
  36. $grid->column('is_active', '是否激活')->switch();
  37. $grid->column('created_at', '创建时间')->sortable();
  38. $grid->column('updated_at', '更新时间')->sortable();
  39. $grid->filter(function (Grid\Filter $filter) {
  40. FilterHelper::taskCategoryFilter($filter);
  41. });
  42. }
  43. /**
  44. * 任务表格
  45. *
  46. * @param Grid $grid
  47. * @return void
  48. */
  49. public static function taskGrid(Grid $grid): void
  50. {
  51. $grid->column('id', 'ID')->sortable();
  52. $grid->column('category.name', '任务分类');
  53. $grid->column('name', '任务名称');
  54. $grid->column('description', '任务描述')->limit(30);
  55. $grid->column('type', '任务类型')->display(function ($type) {
  56. return TASK_TYPE::getDescription(TASK_TYPE::tryFrom($type) ?? TASK_TYPE::DAILY);
  57. });
  58. $grid->column('level_required', '所需等级')->sortable();
  59. $grid->column('reset_type', '重置类型')->display(function ($resetType) {
  60. return RESET_TYPE::getDescription(RESET_TYPE::tryFrom($resetType) ?? RESET_TYPE::NONE);
  61. });
  62. $grid->column('sort_order', '排序权重')->sortable();
  63. $grid->column('is_active', '是否激活')->switch();
  64. $grid->column('start_time', '开始时间');
  65. $grid->column('end_time', '结束时间');
  66. $grid->column('created_at', '创建时间')->sortable();
  67. $grid->filter(function (Grid\Filter $filter) {
  68. FilterHelper::taskFilter($filter);
  69. });
  70. }
  71. /**
  72. * 任务奖励表格
  73. *
  74. * @param Grid $grid
  75. * @return void
  76. */
  77. public static function taskRewardGrid(Grid $grid): void
  78. {
  79. $grid->column('id', 'ID')->sortable();
  80. $grid->column('task.name', '任务名称');
  81. $grid->column('reward_type', '奖励类型')->display(function ($rewardType) {
  82. return REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($rewardType) ?? REWARD_TYPE::ITEM);
  83. });
  84. $grid->column('reward_param1', '奖励参数1');
  85. $grid->column('reward_param2', '奖励参数2');
  86. $grid->column('quantity', '奖励数量');
  87. $grid->column('extra_data', '额外数据')->json();
  88. $grid->column('sort_order', '排序权重')->sortable();
  89. $grid->column('created_at', '创建时间')->sortable();
  90. $grid->filter(function (Grid\Filter $filter) {
  91. FilterHelper::taskRewardFilter($filter);
  92. });
  93. }
  94. /**
  95. * 任务接取消耗表格
  96. *
  97. * @param Grid $grid
  98. * @return void
  99. */
  100. public static function taskCostGrid(Grid $grid): void
  101. {
  102. $grid->column('id', 'ID')->sortable();
  103. $grid->column('task.name', '任务名称');
  104. $grid->column('cost_type', '消耗类型');
  105. $grid->column('cost_param1', '消耗参数1');
  106. $grid->column('cost_param2', '消耗参数2');
  107. $grid->column('quantity', '消耗数量');
  108. $grid->column('extra_data', '额外数据')->json();
  109. $grid->column('created_at', '创建时间')->sortable();
  110. $grid->filter(function (Grid\Filter $filter) {
  111. FilterHelper::taskCostFilter($filter);
  112. });
  113. }
  114. /**
  115. * 任务条件表格
  116. *
  117. * @param Grid $grid
  118. * @return void
  119. */
  120. public static function taskConditionGrid(Grid $grid): void
  121. {
  122. $grid->column('id', 'ID')->sortable();
  123. $grid->column('code', '条件代码');
  124. $grid->column('name', '条件名称');
  125. $grid->column('description', '条件描述')->limit(30);
  126. $grid->column('param_schema', '参数模式')->json();
  127. $grid->column('handler_class', '处理器类名');
  128. $grid->column('is_active', '是否激活')->switch();
  129. $grid->column('created_at', '创建时间')->sortable();
  130. $grid->filter(function (Grid\Filter $filter) {
  131. FilterHelper::taskConditionFilter($filter);
  132. });
  133. }
  134. /**
  135. * 任务达成条件表格
  136. *
  137. * @param Grid $grid
  138. * @return void
  139. */
  140. public static function taskAchievementConditionGrid(Grid $grid): void
  141. {
  142. $grid->column('id', 'ID')->sortable();
  143. $grid->column('task.name', '任务名称');
  144. $grid->column('condition.name', '条件名称');
  145. $grid->column('condition_type', '条件类型')->display(function ($type) {
  146. return $type == 'prerequisite' ? '前置条件' : '进度条件';
  147. });
  148. $grid->column('condition_params', '条件参数')->json();
  149. $grid->column('target_value', '目标值');
  150. $grid->column('is_required', '是否必要条件')->switch();
  151. $grid->column('sort_order', '排序权重')->sortable();
  152. $grid->column('created_at', '创建时间')->sortable();
  153. $grid->filter(function (Grid\Filter $filter) {
  154. FilterHelper::taskAchievementConditionFilter($filter);
  155. });
  156. }
  157. /**
  158. * 用户任务表格
  159. *
  160. * @param Grid $grid
  161. * @return void
  162. */
  163. public static function taskUserTaskGrid(Grid $grid): void
  164. {
  165. $grid->column('id', 'ID')->sortable();
  166. $grid->column('user_id', '用户ID');
  167. $grid->column('task.name', '任务名称');
  168. $grid->column('status', '任务状态')->display(function ($status) {
  169. return TASK_STATUS::getDescription(TASK_STATUS::from($status));
  170. });
  171. $grid->column('progress', '进度')->display(function ($progress) {
  172. return $progress;
  173. })->progressBar();
  174. $grid->column('accepted_at', '接取时间');
  175. $grid->column('completed_at', '完成时间');
  176. $grid->column('rewarded_at', '奖励领取时间');
  177. $grid->column('last_reset_time', '上次重置时间');
  178. $grid->column('next_reset_time', '下次重置时间');
  179. $grid->column('reset_count', '重置次数');
  180. $grid->column('created_at', '创建时间')->sortable();
  181. $grid->filter(function (Grid\Filter $filter) {
  182. FilterHelper::taskUserTaskFilter($filter);
  183. });
  184. }
  185. /**
  186. * 用户任务进度表格
  187. *
  188. * @param Grid $grid
  189. * @return void
  190. */
  191. public static function taskUserProgressGrid(Grid $grid): void
  192. {
  193. $grid->column('id', 'ID')->sortable();
  194. $grid->column('user_id', '用户ID');
  195. $grid->column('task.name', '任务名称');
  196. $grid->column('achievementCondition.condition.name', '条件名称');
  197. $grid->column('current_value', '当前值');
  198. $grid->column('target_value', '目标值');
  199. $grid->column('progress', '进度')->display(function () {
  200. $progress = $this->target_value > 0 ? min(100, round(($this->current_value / $this->target_value) * 100)) : 0;
  201. return $progress;
  202. })->progressBar();
  203. $grid->column('created_at', '创建时间')->sortable();
  204. $grid->filter(function (Grid\Filter $filter) {
  205. FilterHelper::taskUserProgressFilter($filter);
  206. });
  207. }
  208. /**
  209. * 任务完成日志表格
  210. *
  211. * @param Grid $grid
  212. * @return void
  213. */
  214. public static function taskCompletionLogGrid(Grid $grid): void
  215. {
  216. $grid->column('id', 'ID')->sortable();
  217. $grid->column('user_id', '用户ID');
  218. $grid->column('task_id', '任务ID');
  219. $grid->column('user_task_id', '用户任务ID');
  220. $grid->column('task_name', '任务名称');
  221. $grid->column('completed_at', '完成时间')->sortable();
  222. $grid->column('ip_address', 'IP地址');
  223. $grid->column('device_info', '设备信息')->limit(30);
  224. $grid->filter(function (Grid\Filter $filter) {
  225. FilterHelper::taskCompletionLogFilter($filter);
  226. });
  227. }
  228. /**
  229. * 任务奖励发放日志表格
  230. *
  231. * @param Grid $grid
  232. * @return void
  233. */
  234. public static function taskRewardLogGrid(Grid $grid): void
  235. {
  236. $grid->column('id', 'ID')->sortable();
  237. $grid->column('user_id', '用户ID');
  238. $grid->column('task_id', '任务ID');
  239. $grid->column('user_task_id', '用户任务ID');
  240. $grid->column('task_name', '任务名称');
  241. $grid->column('rewards', '奖励内容')->display(function ($rewards) {
  242. $result = [];
  243. foreach ($rewards as $reward) {
  244. $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($reward['reward_type']) ?? REWARD_TYPE::ITEM);
  245. $result[] = "{$type}: {$reward['quantity']}";
  246. }
  247. return implode('<br>', $result);
  248. });
  249. $grid->column('rewarded_at', '奖励发放时间')->sortable();
  250. $grid->column('ip_address', 'IP地址');
  251. $grid->column('device_info', '设备信息')->limit(30);
  252. $grid->filter(function (Grid\Filter $filter) {
  253. FilterHelper::taskRewardLogFilter($filter);
  254. });
  255. }
  256. /**
  257. * 任务消耗日志表格
  258. *
  259. * @param Grid $grid
  260. * @return void
  261. */
  262. public static function taskCostLogGrid(Grid $grid): void
  263. {
  264. $grid->column('id', 'ID')->sortable();
  265. $grid->column('user_id', '用户ID');
  266. $grid->column('task_id', '任务ID');
  267. $grid->column('user_task_id', '用户任务ID');
  268. $grid->column('task_name', '任务名称');
  269. $grid->column('costs', '消耗内容')->display(function ($costs) {
  270. $result = [];
  271. foreach ($costs as $cost) {
  272. $result[] = "{$cost['cost_type']}: {$cost['quantity']}";
  273. }
  274. return implode('<br>', $result);
  275. });
  276. $grid->column('cost_at', '消耗时间')->sortable();
  277. $grid->column('ip_address', 'IP地址');
  278. $grid->column('device_info', '设备信息')->limit(30);
  279. $grid->filter(function (Grid\Filter $filter) {
  280. FilterHelper::taskCostLogFilter($filter);
  281. });
  282. }
  283. /**
  284. * 任务重置日志表格
  285. *
  286. * @param Grid $grid
  287. * @return void
  288. */
  289. public static function taskResetLogGrid(Grid $grid): void
  290. {
  291. $grid->column('id', 'ID')->sortable();
  292. $grid->column('user_id', '用户ID');
  293. $grid->column('task_id', '任务ID');
  294. $grid->column('user_task_id', '用户任务ID');
  295. $grid->column('reset_type', '重置类型')->display(function ($resetType) {
  296. return RESET_TYPE::getDescription(RESET_TYPE::tryFrom($resetType) ?? RESET_TYPE::NONE);
  297. });
  298. $grid->column('old_status', '旧状态')->display(function ($status) {
  299. return TASK_STATUS::getDescription(TASK_STATUS::from($status));
  300. });
  301. $grid->column('old_progress', '旧进度')->display(function ($progress) {
  302. return $progress . '%';
  303. });
  304. $grid->column('reset_time', '重置时间')->sortable();
  305. $grid->column('next_reset_time', '下次重置时间');
  306. $grid->column('reset_count', '重置次数');
  307. $grid->filter(function (Grid\Filter $filter) {
  308. FilterHelper::taskResetLogFilter($filter);
  309. });
  310. }
  311. }