columnId(); $grid->column('name', '配方名称'); $grid->column('resultItem.name', '产出物品'); $grid->column('result_quantity', '产出数量'); $grid->column('success_rate', '成功率')->display(function ($value) { return $value * 100 . '%'; }); $grid->column('materials', '材料数量')->display(function ($materials) { return count($materials); }); $grid->column('coin_cost', '金币消耗')->display(function ($value) { if (empty($value)) { return '0'; } if (is_string($value)) { $value = json_decode($value, true); } if (is_array($value)) { $result = []; foreach ($value as $currency => $amount) { $result[] = $currency . ': ' . $amount; } return implode(', ', $result); } return $value; }); $grid->column('cooldown_seconds', '冷却时间(秒)'); $grid->column('is_visible', '是否可见')->switch(); $grid->column('created_at', '创建时间'); $grid->column('updated_at', '更新时间'); // 筛选 $grid->filter(function ($filter) { $helper = new FilterHelper($filter, $this); $helper->equal('id', 'ID'); $helper->like('name', '配方名称'); $filter->equal('result_item_id', '产出物品')->select( (new ItemRepository())->pluck('name', 'id') ); $filter->equal('is_visible', '是否可见')->radio([ 1 => '是', 0 => '否', ]); }); }); } /** * 详情页 * * @param mixed $id * @param Content $content * @return Content */ public function show($id, Content $content) { return $content ->header($this->title) ->description('详情') ->body($this->detail($id)); } /** * 详情页 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new ItemRecipeRepository(), function (Show $show) { $helper = new ShowHelper($show, $this); $helper->field('id', 'ID'); $helper->field('name', '配方名称'); $show->field('resultItem.name', '产出物品'); $helper->field('result_quantity', '产出数量'); $show->field('success_rate', '成功率')->as(function ($value) { return $value * 100 . '%'; }); // 显示金币消耗 $show->field('coin_cost', '金币消耗')->as(function ($value) { if (empty($value)) { return '0'; } if (is_string($value)) { $value = json_decode($value, true); } if (is_array($value)) { $result = []; foreach ($value as $currency => $amount) { $result[] = $currency . ': ' . $amount; } return implode('
', $result); } return $value; })->unescape(); $helper->field('cooldown_seconds', '冷却时间(秒)'); $show->field('is_visible', '是否可见')->as(function ($value) { return $value ? '是' : '否'; }); // 显示解锁条件 $show->field('unlock_condition', '解锁条件')->as(function ($value) { if (empty($value)) { return '无'; } if (is_string($value)) { $value = json_decode($value, true); } if (is_array($value)) { $result = []; foreach ($value as $condition => $requirement) { $result[] = $condition . ': ' . $requirement; } return implode('
', $result); } return $value; })->unescape(); $helper->field('created_at', '创建时间'); $helper->field('updated_at', '更新时间'); // 显示配方材料 $show->divider('配方材料'); $show->field('materials', '材料列表')->as(function ($materials) { $html = ''; $html .= ''; $html .= ''; foreach ($materials as $material) { $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; } $html .= '
物品名称数量是否消耗
' . $material->item->name . '' . $material->quantity . '' . ($material->is_consumed ? '是' : '否') . '
'; return $html; })->unescape(); }); } /** * 创建页 * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header($this->title) ->description('创建') ->body($this->form()); } /** * 编辑页 * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header($this->title) ->description('编辑') ->body($this->form()->edit($id)); } /** * 表单 * * @return Form */ protected function form() { return Form::make(new ItemRecipeRepository(), function (Form $form) { $helper = new FormHelper($form, $this); $helper->text('name', '配方名称')->required(); $form->select('result_item_id', '产出物品') ->options((new ItemRepository())->pluck('name', 'id')) ->required(); $form->number('result_quantity', '产出数量') ->default(1) ->min(1) ->required(); $form->rate('success_rate', '成功率') ->default(1) ->help('合成成功的概率,1表示100%'); // 金币消耗 $form->keyValue('coin_cost', '金币消耗') ->help('可以设置多种货币类型的消耗,如:gold:100表示消耗100金币'); $form->number('cooldown_seconds', '冷却时间(秒)') ->default(0) ->min(0) ->help('两次合成之间的冷却时间,0表示无冷却'); $form->switch('is_visible', '是否可见') ->default(true) ->help('是否在游戏中对玩家可见'); // 解锁条件 $form->keyValue('unlock_condition', '解锁条件') ->help('设置解锁该配方的条件,如:level:10表示玩家等级达到10级'); // 配方材料 $form->hasMany('materials', '配方材料', function (Form\NestedForm $form) { $form->select('item_id', '物品') ->options((new ItemRepository())->pluck('name', 'id')) ->required(); $form->number('quantity', '数量') ->default(1) ->min(1) ->required(); $form->switch('is_consumed', '是否消耗') ->default(true) ->help('合成时是否消耗该材料,否则只需要拥有但不会减少'); }); }); } }