column('id', 'ID')->sortable(); $grid->column('group_id', '条件组')->display(function ($groupId) { $group = GameConditionGroup::find($groupId); return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})"; }); $grid->column('condition_type', '条件类型')->display(function ($type) { return CONDITION_TYPE::getName($type); }); $grid->column('target_id', '目标ID')->display(function ($targetId) { return $this->getTargetName(); }); $grid->column('operator', '比较运算符')->display(function ($operator) { return CONDITION_OPERATOR::getSymbol($operator); }); $grid->column('value', '比较值'); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->equal('group_id', '条件组')->select( GameConditionGroup::pluck('name', 'id') ); $filter->equal('condition_type', '条件类型')->select(CONDITION_TYPE::getAll()); $filter->equal('target_id', '目标ID'); }); }); } /** * 创建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new GameConditionItemRepository(), function (Show $show) { $show->field('id', 'ID'); $show->field('group_id', '条件组')->as(function ($groupId) { $group = GameConditionGroup::find($groupId); return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})"; }); $show->field('condition_type', '条件类型')->as(function ($type) { return CONDITION_TYPE::getName($type); }); $show->field('target_id', '目标ID')->as(function ($targetId) { return $this->getTargetName(); }); $show->field('operator', '比较运算符')->as(function ($operator) { return CONDITION_OPERATOR::getName($operator) . ' (' . CONDITION_OPERATOR::getSymbol($operator) . ')'; }); $show->field('value', '比较值'); $show->field('param1', '参数1'); $show->field('param2', '参数2'); $show->field('extra_data', '额外数据')->json(); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 创建表单 * * @return Form */ protected function form() { return Form::make(new GameConditionItemRepository(), function (Form $form) { $form->display('id', 'ID'); $form->select('group_id', '条件组') ->options(GameConditionGroup::pluck('name', 'id')) ->required(); $form->select('condition_type', '条件类型') ->options(CONDITION_TYPE::getAll()) ->required() ->when(CONDITION_TYPE::LAND_LEVEL->value, function (Form $form) { // 土地等级条件 $form->select('target_id', '土地类型') ->options(FarmLandType::pluck('name', 'id')) ->required() ->help('选择要检查的土地类型'); }) ->when(CONDITION_TYPE::HOUSE_LEVEL->value, function (Form $form) { // 房屋等级条件 $form->hidden('target_id')->default(0); }) ->when(CONDITION_TYPE::PET_LEVEL->value, function (Form $form) { // 宠物等级条件 $form->select('target_id', '宠物') ->options(Pet::pluck('name', 'id')) ->required() ->help('选择要检查的宠物'); }) ->when(CONDITION_TYPE::ITEM_COUNT->value, function (Form $form) { // 物品持有数条件 $form->select('target_id', '物品') ->options(Item::pluck('name', 'id')) ->required() ->help('选择要检查的物品'); }) ->when(CONDITION_TYPE::CURRENCY_COUNT->value, function (Form $form) { // 代币持有数条件 $form->select('target_id', '代币') ->options(Currency::pluck('name', 'id')) ->required() ->help('选择要检查的代币'); }); $form->select('operator', '比较运算符') ->options(CONDITION_OPERATOR::getAll()) ->default(CONDITION_OPERATOR::GREATER_THAN_OR_EQUAL->value) ->required() ->help('选择比较运算符,如等于、大于等于等'); $form->number('value', '比较值') ->default(0) ->required() ->help('设置比较的目标值'); $form->number('param1', '参数1') ->default(0) ->help('根据条件类型不同含义,可选'); $form->number('param2', '参数2') ->default(0) ->help('根据条件类型不同含义,可选'); $form->textarea('extra_data', '额外数据') ->help('JSON格式,可存储特定条件类型的额外参数,可选'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); }); } }