grid->column($field, $label)->display(function ($type) { return TASK_TYPE::getDescription(TASK_TYPE::tryFrom($type) ?? TASK_TYPE::DAILY); }); } /** * 显示任务状态 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnTaskStatus(string $field = 'status', string $label = '任务状态') { return $this->grid->column($field, $label)->display(function ($status) { return TASK_STATUS::getDescription(TASK_STATUS::from($status)); }); } /** * 显示重置类型 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnResetType(string $field = 'reset_type', string $label = '重置类型') { return $this->grid->column($field, $label)->display(function ($resetType) { return RESET_TYPE::getDescription(RESET_TYPE::tryFrom($resetType) ?? RESET_TYPE::NONE); }); } /** * 显示奖励类型 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnRewardType(string $field = 'reward_type', string $label = '奖励类型') { return $this->grid->column($field, $label)->display(function ($rewardType) { return REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($rewardType) ?? REWARD_TYPE::ITEM); }); } /** * 显示条件类型 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnConditionType(string $field = 'condition_type', string $label = '条件类型') { return $this->grid->column($field, $label)->display(function ($type) { return $type == 'prerequisite' ? '前置条件' : '进度条件'; }); } /** * 显示进度百分比 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnProgress(string $field = 'progress', string $label = '进度') { return $this->grid->column($field, $label)->display(function ($progress) { return $progress . '%'; })->progress(); } /** * 显示计算的进度百分比 * * @param string $currentField 当前值字段名 * @param string $targetField 目标值字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnCalculatedProgress(string $currentField = 'current_value', string $targetField = 'target_value', string $label = '进度') { return $this->grid->column('progress', $label)->display(function () use ($currentField, $targetField) { $current = $this->{$currentField}; $target = $this->{$targetField}; $progress = $target > 0 ? min(100, round(($current / $target) * 100)) : 0; return $progress . '%'; })->progress(); } /** * 显示父级分类 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnParentCategory(string $field = 'parent_id', string $label = '父级分类') { return $this->grid->column($field, $label)->display(function ($parentId) { if ($parentId == 0) { return '无'; } $parent = TaskCategory::find($parentId); return $parent ? $parent->name : '未知'; }); } /** * 显示任务选择器 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnTaskSelector(string $field = 'task_id', string $label = '任务') { return $this->grid->column($field, $label)->display(function ($taskId) { $task = Task::find($taskId); return $task ? $task->name : "未知任务(#{$taskId})"; }); } /** * 显示条件选择器 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnConditionSelector(string $field = 'condition_id', string $label = '条件') { return $this->grid->column($field, $label)->display(function ($conditionId) { $condition = TaskCondition::find($conditionId); return $condition ? $condition->name : "未知条件(#{$conditionId})"; }); } /** * 显示奖励内容 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnRewards(string $field = 'rewards', string $label = '奖励内容') { return $this->grid->column($field, $label)->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); }); } /** * 显示消耗内容 * * @param string $field 字段名 * @param string $label 标签 * @return \Dcat\Admin\Grid\Column */ public function columnCosts(string $field = 'costs', string $label = '消耗内容') { return $this->grid->column($field, $label)->display(function ($costs) { $result = []; foreach ($costs as $cost) { $result[] = "{$cost['cost_type']}: {$cost['quantity']}"; } return implode('
', $result); }); } }