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