columnId(); $grid->column('seed.name', '种子名称')->label('primary'); $grid->column('landType.name', '土地类型')->label('info'); $grid->column('output_item_id', '产出物品')->display(function ($value) { $item = $this->outputItem; if ($item) { return "
{$item->name}
ID: {$value}
"; } else { return "物品不存在 (ID: {$value})"; } }); $grid->column('probability_modifier', '概率修正值')->display(function ($value) { $color = $value > 0 ? 'success' : ($value < 0 ? 'danger' : 'secondary'); $sign = $value > 0 ? '+' : ''; return "{$sign}{$value}%"; }); $grid->column('probability_override', '概率覆盖值')->display(function ($value) { if ($value !== null) { return "{$value}% (覆盖)"; } else { return '使用修正值'; } }); $grid->column('is_active', '状态')->bool(); $helper->columnCreatedAt(); $grid->filter(function (Grid\Filter $filter) { $filterHelper = new FilterHelper($filter, $this); $filterHelper->equalId(); $filter->equal('seed_id', '种子')->select(function () { return FarmSeed::pluck('name', 'id')->toArray(); }); $filter->equal('land_type_id', '土地类型')->select(function () { return FarmLandType::pluck('name', 'id')->toArray(); }); // 添加物品筛选 $itemTable = \App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable::make(); $filter->equal('output_item_id', '产出物品') ->selectTable($itemTable) ->title('选择物品') ->dialogWidth('70%') ->model($itemTable->getModel(), $itemTable->getModelSelectId(), $itemTable->getModelViewName()); $filter->equal('is_active', '状态')->select([ 1 => '启用', 0 => '禁用' ]); $filterHelper->betweenDatetime('created_at', '创建时间'); }); }); } /** * 构建详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new FarmMysterySeeLandEffectRepository(['seed', 'landType', 'outputItem']), function (Show $show) { $show->field('id', 'ID'); $show->field('seed.name', '种子名称'); $show->field('landType.name', '土地类型'); $show->field('output_item_id', '产出物品')->as(function ($value) { $item = $this->outputItem; if ($item) { return "{$item->name} (ID: {$value})"; } else { return "物品不存在 (ID: {$value})"; } }); $show->field('probability_modifier', '概率修正值')->as(function ($value) { $sign = $value > 0 ? '+' : ''; return "{$sign}{$value}%"; }); $show->field('probability_override', '概率覆盖值')->as(function ($value) { return $value !== null ? "{$value}% (覆盖模式)" : '未设置 (修正模式)'; }); $show->field('is_active', '状态')->using([1 => '启用', 0 => '禁用']); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 构建表单 * * @return Form */ protected function form() { return Form::make(new FarmMysterySeeLandEffectRepository(), function (Form $form) { $helper = new FormHelper($form, $this); $form->display('id', 'ID'); $helper->selectSeed('seed_id', '种子'); $form->select('land_type_id', '土地类型') ->options(function () { return FarmLandType::pluck('name', 'id')->toArray(); }) ->required() ->help('选择土地类型'); // 使用物品选择器 $itemTable = \App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable::make(); $form->selectTable('output_item_id', '产出物品')->from($itemTable) ->title('选择产出物品') ->dialogWidth('70%') ->model($itemTable->getModel(), $itemTable->getModelSelectId(), $itemTable->getModelViewName()) ->required() ->help('选择神秘种子在该土地类型上的产出物品'); $form->decimal('probability_modifier', '概率修正值') ->default(0.0000) ->help('百分比值,可为负数。如:5.0000 表示 +5%,-3.0000 表示 -3%'); $form->decimal('probability_override', '概率覆盖值') ->help('百分比值,直接覆盖原概率。如:25.0000 表示覆盖为25%。优先级高于修正值,留空则使用修正值'); $helper->switch('is_active', '是否启用'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); $form->divider(); $form->html('
配置说明:
'); $form->saving(function (Form $form) { // 保存前的数据验证和处理 if ($form->probability_override !== null && $form->probability_override < 0) { return $form->response()->error('概率覆盖值不能为负数'); } if ($form->probability_modifier < -100 || $form->probability_modifier > 100) { return $form->response()->error('概率修正值应在-100到100之间'); } }); $form->saved(function (Form $form) { // 保存后清除相关缓存 $mysteryLogic = new \App\Module\Farm\Logics\MysterySeeLLogic(); $mysteryLogic->clearCache($form->model()->seed_id, $form->model()->land_type_id); }); }); } }