column('id', 'ID')->sortable(); $grid->column('chest.name', '宝箱名称'); $grid->column('item.name', '物品名称'); $grid->column('group.name', '物品组名称'); $grid->column('min_quantity', '最小数量'); $grid->column('max_quantity', '最大数量'); $grid->column('weight', '权重'); $grid->column('allow_duplicate', '允许重复')->bool(); $grid->column('pity_count', '保底次数'); $grid->column('pity_weight_factor', '保底权重因子'); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); // 筛选 $grid->filter(function ($filter) { $filter->equal('id', 'ID'); $filter->equal('chest_id', '宝箱')->select( ItemItem::where('type', ITEM_TYPE::OPENABLE)->pluck('name', 'id') ); $filter->equal('item_id', '物品')->select( ItemItem::pluck('name', 'id') ); $filter->equal('group_id', '物品组')->select( ItemGroup::pluck('name', 'id') ); }); }); } /** * 详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make(ItemChestContent::findOrFail($id), function (Show $show) { $show->field('id', 'ID'); $show->field('chest.name', '宝箱名称'); $show->field('item.name', '物品名称'); $show->field('group.name', '物品组名称'); $show->field('min_quantity', '最小数量'); $show->field('max_quantity', '最大数量'); $show->field('weight', '权重'); $show->field('allow_duplicate', '允许重复')->as(function ($allowDuplicate) { return $allowDuplicate ? '是' : '否'; }); $show->field('pity_count', '保底次数'); $show->field('pity_weight_factor', '保底权重因子'); $show->field('created_at', '创建时间'); $show->field('updated_at', '更新时间'); }); } /** * 表单 * * @return Form */ protected function form() { return Form::make(new ItemChestContent(), function (Form $form) { $form->select('chest_id', '宝箱') ->options(ItemItem::where('type', ITEM_TYPE::OPENABLE)->pluck('name', 'id')) ->required(); // 物品和物品组二选一 $form->radio('content_type', '内容类型') ->options(['item' => '物品', 'group' => '物品组']) ->default('item') ->when('item', function (Form $form) { $form->select('item_id', '物品') ->options(ItemItem::pluck('name', 'id')) ->required(); }) ->when('group', function (Form $form) { $form->select('group_id', '物品组') ->options(ItemGroup::pluck('name', 'id')) ->required(); }); $form->number('min_quantity', '最小数量') ->default(1) ->min(1) ->required(); $form->number('max_quantity', '最大数量') ->default(1) ->min(1) ->required(); $form->number('weight', '权重') ->default(1.0) ->min(0.001) ->step(0.001) ->required() ->help('权重越高,掉落概率越大,所有内容权重总和为100'); $form->switch('allow_duplicate', '允许重复') ->default(false) ->help('是否允许在一次开箱中重复获得该内容'); $form->number('pity_count', '保底次数') ->default(0) ->min(0) ->help('连续未获得该内容的次数达到此值时,必定获得该内容,0表示不启用保底机制'); $form->number('pity_weight_factor', '保底权重因子') ->default(1.0) ->min(0) ->step(0.1) ->help('每次未获得该内容时,权重增加的倍数,默认为1.0'); // 保存前回调 $form->saving(function (Form $form) { // 根据内容类型设置对应的字段 if ($form->content_type == 'item') { $form->group_id = null; } else { $form->item_id = null; } }); }); } }