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);
});
}
}