| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- <?php
- namespace App\Module\Task\AdminControllers\Helper;
- use App\Module\Task\Enums\RESET_TYPE;
- use App\Module\Task\Enums\REWARD_TYPE;
- use App\Module\Task\Enums\TASK_STATUS;
- use App\Module\Task\Enums\TASK_TYPE;
- use Dcat\Admin\Grid;
- use UCore\DcatAdmin\GridHelper as BaseGridHelper;
- /**
- * 表格辅助类
- *
- * 提供任务模块后台控制器的表格构建功能
- */
- class GridHelper extends BaseGridHelper
- {
- use GridHelperTrait;
- /**
- * 任务分类表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskCategoryGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('name', '分类名称');
- $grid->column('parent_id', '父级分类')->display(function ($parentId) {
- if ($parentId == 0) {
- return '无';
- }
- $parent = \App\Module\Task\Models\TaskCategory::find($parentId);
- return $parent ? $parent->name : '未知';
- });
- $grid->column('description', '分类描述')->limit(30);
- $grid->column('sort_order', '排序权重')->sortable();
- $grid->column('is_active', '是否激活')->switch();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->column('updated_at', '更新时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskCategoryFilter($filter);
- });
- }
- /**
- * 任务表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('category.name', '任务分类');
- $grid->column('name', '任务名称');
- $grid->column('description', '任务描述')->limit(30);
- $grid->column('type', '任务类型')->display(function ($type) {
- return TASK_TYPE::getDescription(TASK_TYPE::tryFrom($type) ?? TASK_TYPE::DAILY);
- });
- $grid->column('level_required', '所需等级')->sortable();
- $grid->column('reset_type', '重置类型')->display(function ($resetType) {
- return RESET_TYPE::getDescription(RESET_TYPE::tryFrom($resetType) ?? RESET_TYPE::NONE);
- });
- $grid->column('sort_order', '排序权重')->sortable();
- $grid->column('is_active', '是否激活')->switch();
- $grid->column('start_time', '开始时间');
- $grid->column('end_time', '结束时间');
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskFilter($filter);
- });
- }
- /**
- * 任务奖励表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskRewardGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('task.name', '任务名称');
- $grid->column('reward_type', '奖励类型')->display(function ($rewardType) {
- return REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($rewardType) ?? REWARD_TYPE::ITEM);
- });
- $grid->column('reward_param1', '奖励参数1');
- $grid->column('reward_param2', '奖励参数2');
- $grid->column('quantity', '奖励数量');
- $grid->column('extra_data', '额外数据')->json();
- $grid->column('sort_order', '排序权重')->sortable();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskRewardFilter($filter);
- });
- }
- /**
- * 任务接取消耗表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskCostGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('task.name', '任务名称');
- $grid->column('cost_type', '消耗类型');
- $grid->column('cost_param1', '消耗参数1');
- $grid->column('cost_param2', '消耗参数2');
- $grid->column('quantity', '消耗数量');
- $grid->column('extra_data', '额外数据')->json();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskCostFilter($filter);
- });
- }
- /**
- * 任务条件表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskConditionGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('code', '条件代码');
- $grid->column('name', '条件名称');
- $grid->column('description', '条件描述')->limit(30);
- $grid->column('param_schema', '参数模式')->json();
- $grid->column('handler_class', '处理器类名');
- $grid->column('is_active', '是否激活')->switch();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskConditionFilter($filter);
- });
- }
- /**
- * 任务达成条件表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskAchievementConditionGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('task.name', '任务名称');
- $grid->column('condition.name', '条件名称');
- $grid->column('condition_type', '条件类型')->display(function ($type) {
- return $type == 'prerequisite' ? '前置条件' : '进度条件';
- });
- $grid->column('condition_params', '条件参数')->json();
- $grid->column('target_value', '目标值');
- $grid->column('is_required', '是否必要条件')->switch();
- $grid->column('sort_order', '排序权重')->sortable();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskAchievementConditionFilter($filter);
- });
- }
- /**
- * 用户任务表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskUserTaskGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task.name', '任务名称');
- $grid->column('status', '任务状态')->display(function ($status) {
- return TASK_STATUS::getDescription(TASK_STATUS::from($status));
- });
- $grid->column('progress', '进度')->display(function ($progress) {
- return $progress . '%';
- })->progress();
- $grid->column('accepted_at', '接取时间');
- $grid->column('completed_at', '完成时间');
- $grid->column('rewarded_at', '奖励领取时间');
- $grid->column('last_reset_time', '上次重置时间');
- $grid->column('next_reset_time', '下次重置时间');
- $grid->column('reset_count', '重置次数');
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskUserTaskFilter($filter);
- });
- }
- /**
- * 用户任务进度表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskUserProgressGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task.name', '任务名称');
- $grid->column('achievementCondition.condition.name', '条件名称');
- $grid->column('current_value', '当前值');
- $grid->column('target_value', '目标值');
- $grid->column('progress', '进度')->display(function () {
- $progress = $this->target_value > 0 ? min(100, round(($this->current_value / $this->target_value) * 100)) : 0;
- return $progress . '%';
- })->progress();
- $grid->column('created_at', '创建时间')->sortable();
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskUserProgressFilter($filter);
- });
- }
- /**
- * 任务完成日志表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskCompletionLogGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task_id', '任务ID');
- $grid->column('user_task_id', '用户任务ID');
- $grid->column('task_name', '任务名称');
- $grid->column('completed_at', '完成时间')->sortable();
- $grid->column('ip_address', 'IP地址');
- $grid->column('device_info', '设备信息')->limit(30);
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskCompletionLogFilter($filter);
- });
- }
- /**
- * 任务奖励发放日志表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskRewardLogGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task_id', '任务ID');
- $grid->column('user_task_id', '用户任务ID');
- $grid->column('task_name', '任务名称');
- $grid->column('rewards', '奖励内容')->display(function ($rewards) {
- $result = [];
- foreach ($rewards as $reward) {
- $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($reward['reward_type']) ?? REWARD_TYPE::ITEM);
- $result[] = "{$type}: {$reward['quantity']}";
- }
- return implode('<br>', $result);
- });
- $grid->column('rewarded_at', '奖励发放时间')->sortable();
- $grid->column('ip_address', 'IP地址');
- $grid->column('device_info', '设备信息')->limit(30);
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskRewardLogFilter($filter);
- });
- }
- /**
- * 任务消耗日志表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskCostLogGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task_id', '任务ID');
- $grid->column('user_task_id', '用户任务ID');
- $grid->column('task_name', '任务名称');
- $grid->column('costs', '消耗内容')->display(function ($costs) {
- $result = [];
- foreach ($costs as $cost) {
- $result[] = "{$cost['cost_type']}: {$cost['quantity']}";
- }
- return implode('<br>', $result);
- });
- $grid->column('cost_at', '消耗时间')->sortable();
- $grid->column('ip_address', 'IP地址');
- $grid->column('device_info', '设备信息')->limit(30);
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskCostLogFilter($filter);
- });
- }
- /**
- * 任务重置日志表格
- *
- * @param Grid $grid
- * @return void
- */
- public static function taskResetLogGrid(Grid $grid): void
- {
- $grid->column('id', 'ID')->sortable();
- $grid->column('user_id', '用户ID');
- $grid->column('task_id', '任务ID');
- $grid->column('user_task_id', '用户任务ID');
- $grid->column('reset_type', '重置类型')->display(function ($resetType) {
- return RESET_TYPE::getDescription(RESET_TYPE::tryFrom($resetType) ?? RESET_TYPE::NONE);
- });
- $grid->column('old_status', '旧状态')->display(function ($status) {
- return TASK_STATUS::getDescription(TASK_STATUS::from($status));
- });
- $grid->column('old_progress', '旧进度')->display(function ($progress) {
- return $progress . '%';
- });
- $grid->column('reset_time', '重置时间')->sortable();
- $grid->column('next_reset_time', '下次重置时间');
- $grid->column('reset_count', '重置次数');
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::taskResetLogFilter($filter);
- });
- }
- }
|