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 () { 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 () { 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(); // 简化表单,不使用when方法 $form->select('condition_type', '条件类型') ->options(CONDITION_TYPE::getAll()) ->required()->default(request()->input('condition_type')); // 根据条件类型显示不同的提示信息 $form->select('target_id', '目标ID') ->options(function () { $conditionType = request()->input('condition_type',$this->condition_type); // 根据条件类型返回不同的选项 if ($conditionType == CONDITION_TYPE::LAND_LEVEL->value) { return FarmLandType::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONDITION_TYPE::PET_LEVEL->value) { return PetConfig::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONDITION_TYPE::ITEM_COUNT->value) { return Item::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONDITION_TYPE::CURRENCY_COUNT->value) { return FundCurrencyModel::pluck('name', 'id')->toArray(); } elseif ($conditionType == CONDITION_TYPE::FUND_COUNT->value) { return FundConfigModel::pluck('name', 'id')->toArray(); } return []; }) ->help('根据条件类型不同,表示土地类型ID、宠物ID、物品ID、代币ID等。房屋等级条件可填0。'); $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', '更新时间'); // 添加简单的JavaScript代码,处理条件类型变化 $form->html(<< $(function() { // 监听条件类型变化 $('select[name="condition_type"]').on('change', function() { // 刷新页面,传递条件类型参数 var url = new URL(window.location.href); url.searchParams.set('condition_type', $(this).val()); window.location.href = url.toString(); }); }); HTML); }); } }