columnId();
$grid->column('category.name', '任务分类');
$grid->column('name', '任务名称');
$grid->column('description', '任务描述')->limit(30);
$helper->columnTaskType();
$grid->column('level_required', '所需等级')->sortable();
$helper->columnResetType();
$grid->column('sort_order', '排序权重')->sortable();
$helper->columnAutoConfig(); // 显示自动化配置汇总
$grid->column('is_active', '是否激活')->switch();
$grid->column('start_time', '开始时间');
$grid->column('end_time', '结束时间');
$grid->column('reward_group_id', '奖励组')->display(function ($rewardGroupId) {
if (!$rewardGroupId) {
return '使用旧版奖励';
}
$rewardGroup = GameRewardGroup::find($rewardGroupId);
return $rewardGroup ? "{$rewardGroup->name} ({$rewardGroup->code})" : "未知 ({$rewardGroupId})";
});
$grid->column('consume_group_id', '消耗组')->display(function ($consumeGroupId) {
if (!$consumeGroupId) {
return '使用旧版消耗';
}
$consumeGroup = GameConsumeGroup::find($consumeGroupId);
return $consumeGroup ? "{$consumeGroup->name} ({$consumeGroup->code})" : "未知 ({$consumeGroupId})";
});
$grid->column('prerequisite_condition_group_id', '前置条件组')->display(function ($conditionGroupId) {
if (!$conditionGroupId) {
return '无前置条件';
}
$conditionGroup = GameConditionGroup::find($conditionGroupId);
return $conditionGroup ? "{$conditionGroup->name} ({$conditionGroup->code})" : "未知 ({$conditionGroupId})";
});
$grid->column('achievement_condition_group_id', '达成条件组')->display(function ($conditionGroupId) {
if (!$conditionGroupId) {
return '使用旧版条件';
}
$conditionGroup = GameConditionGroup::find($conditionGroupId);
return $conditionGroup ? "{$conditionGroup->name} ({$conditionGroup->code})" : "未知 ({$conditionGroupId})";
});
$grid->column('created_at', '创建时间')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filterHelper = new FilterHelper($filter, $this);
$filterHelper->equalId();
$filterHelper->likeName();
$filterHelper->equalTaskCategory();
$filterHelper->equalTaskType();
$filterHelper->equalResetType();
$filterHelper->equalAutoAccept();
$filterHelper->equalAutoComplete();
$filterHelper->equalAutoReward();
$filterHelper->equalAutoReset();
$filterHelper->equalIsActive();
$filterHelper->betweenDatetime('created_at', '创建时间');
});
});
}
/**
* 详情页构建
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
return Show::make(Task::findOrFail($id), function (Show $show) {
$helper = new ShowHelper($show, $this);
$helper->fieldId();
$show->field('category.name', '任务分类');
$helper->fieldName();
$helper->fieldDescription();
$helper->fieldTaskType();
$helper->fieldPrerequisiteTasks();
$show->field('level_required', '所需等级');
$helper->fieldTimeLimit();
$helper->fieldMaxCompletions();
$helper->fieldResetType();
$helper->fieldAutoConfig(); // 显示自动化配置汇总
$helper->fieldJson('display_params', '显示参数');
$helper->fieldSortOrder();
$helper->fieldIsActive();
$show->field('start_time', '开始时间');
$show->field('end_time', '结束时间');
$show->field('reward_group_id', '奖励组')->as(function ($rewardGroupId) {
if (!$rewardGroupId) {
return '使用旧版奖励';
}
$rewardGroup = GameRewardGroup::find($rewardGroupId);
return $rewardGroup ? "{$rewardGroup->name} ({$rewardGroup->code})" : "未知 ({$rewardGroupId})";
});
$show->field('consume_group_id', '消耗组')->as(function ($consumeGroupId) {
if (!$consumeGroupId) {
return '使用旧版消耗';
}
$consumeGroup = GameConsumeGroup::find($consumeGroupId);
return $consumeGroup ? "{$consumeGroup->name} ({$consumeGroup->code})" : "未知 ({$consumeGroupId})";
});
$show->field('prerequisite_condition_group_id', '前置条件组')->as(function ($conditionGroupId) {
if (!$conditionGroupId) {
return '无前置条件';
}
$conditionGroup = GameConditionGroup::find($conditionGroupId);
return $conditionGroup ? "{$conditionGroup->name} ({$conditionGroup->code})" : "未知 ({$conditionGroupId})";
});
$show->field('achievement_condition_group_id', '达成条件组')->as(function ($conditionGroupId) {
if (!$conditionGroupId) {
return '使用旧版条件';
}
$conditionGroup = GameConditionGroup::find($conditionGroupId);
return $conditionGroup ? "{$conditionGroup->name} ({$conditionGroup->code})" : "未知 ({$conditionGroupId})";
});
$helper->fieldCreatedAt();
$helper->fieldUpdatedAt();
$helper->showRewards();
$helper->showCosts();
$helper->showAchievementConditions();
});
}
/**
* 表单构建
*
* @return Form
*/
protected function form()
{
return Form::make(new TaskRepository(), function (Form $form) {
$helper = new FormHelper($form, $this);
$form->display('id', 'ID');
$helper->selectTaskCategory();
$form->text('name', '任务名称')->required()->rules('required|max:50');
$form->textarea('description', '任务描述')->rows(3);
$helper->selectTaskType();
$helper->multipleSelectPrerequisiteTasks();
$helper->numberLevelRequired();
$helper->numberTimeLimit();
$helper->numberMaxCompletions();
$helper->selectResetType();
// 自动化配置分组
$form->divider('自动化配置');
$helper->switchAutoAccept();
$helper->switchAutoComplete();
$helper->switchAutoReward();
$helper->switchAutoReset();
$helper->json('display_params', '显示参数');
$helper->numberSortOrder();
$helper->switchIsActive();
$form->datetime('start_time', '开始时间')->help('任务可接取的开始时间,为空表示无限制');
$form->datetime('end_time', '结束时间')->help('任务可接取的结束时间,为空表示无限制');
// 组系统配置分组
$form->divider('组系统配置');
// 添加奖励组选择(使用表格选择器)
$rewardGroupTable = GameRewardGroupLazyRenderable::make();
$form->selectTable('reward_group_id', '奖励组')
->from($rewardGroupTable)
->title('选择奖励组')
->model($rewardGroupTable->getModel(), $rewardGroupTable->getModelSelectId(), $rewardGroupTable->getModelViewName())
->help('选择奖励组后,将使用奖励组中的奖励项作为任务奖励,而不使用旧版奖励');
// 添加消耗组选择
$consumeGroupTable = GameConsumeGroupLazyRenderable::make();
$form->selectTable('consume_group_id', '消耗组')
->from($consumeGroupTable)
->title('选择消耗组')
->model($consumeGroupTable->getModel(), $consumeGroupTable->getModelSelectId(), $consumeGroupTable->getModelViewName())
->help('选择消耗组后,将使用消耗组中的消耗项作为任务接取消耗,而不使用旧版消耗');
// 添加前置条件组选择
$prerequisiteConditionGroupTable = GameConditionGroupLazyRenderable::make();
$form->selectTable('prerequisite_condition_group_id', '前置条件组')
->from($prerequisiteConditionGroupTable)
->title('选择前置条件组')
->model($prerequisiteConditionGroupTable->getModel(), $prerequisiteConditionGroupTable->getModelSelectId(), $prerequisiteConditionGroupTable->getModelViewName())
->help('选择前置条件组后,用户需要满足条件组中的所有条件才能接取任务');
// 添加达成条件组选择
$achievementConditionGroupTable = GameConditionGroupLazyRenderable::make();
$form->selectTable('achievement_condition_group_id', '达成条件组')
->from($achievementConditionGroupTable)
->title('选择达成条件组')
->model($achievementConditionGroupTable->getModel(), $achievementConditionGroupTable->getModelSelectId(), $achievementConditionGroupTable->getModelViewName())
->help('选择达成条件组后,将使用条件组中的条件作为任务达成条件,而不使用旧版条件');
$form->display('created_at', '创建时间');
$form->display('updated_at', '更新时间');
$helper->hasRewards();
$helper->hasCosts();
$helper->hasAchievementConditions();
});
}
}