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('
', $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('
', $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); }); } }