column('id', 'ID')->sortable(); $grid->column('user_id', '用户ID')->sortable(); $grid->column('user.username', '用户名')->display(function ($username) { return $username ?: '未知用户'; }); $grid->column('current_skin_id', '当前皮肤')->display(function ($skinId) { return $skinId . ' - ' . GameUserSkin::getSkinName($skinId); }); $grid->column('owned_skins', '拥有皮肤')->display(function ($ownedSkins) { if (empty($ownedSkins)) { return '无'; } $skinIds = explode(',', $ownedSkins); $skinNames = []; foreach ($skinIds as $skinId) { $skinNames[] = $skinId . '-' . GameUserSkin::getSkinName((int)$skinId); } return implode(', ', $skinNames); }); GridHelper::defaultSort($grid, 'id', 'desc'); GridHelper::defaultPerPage($grid); GridHelper::defaultActions($grid); GridHelper::defaultTools($grid); }); // 筛选器 $grid->filter(function (Grid\Filter $filter) { FilterHelper::defaultId($filter); $filter->equal('user_id', '用户ID'); $filter->equal('current_skin_id', '当前皮肤')->select([ 1 => '1 - 默认皮肤', 2 => '2 - 春日皮肤', 3 => '3 - 夏日皮肤', 4 => '4 - 秋日皮肤', ]); FilterHelper::defaultDateRange($filter); }); return $grid; } /** * 详情页面 * * @param mixed $id * @return Show */ public function detail($id): Show { return Show::make($id, GameUserSkin::with(['user']), function (Show $show) { ShowHelper::defaultId($show); $show->field('user_id', '用户ID'); $show->field('user.username', '用户名'); $show->field('current_skin_id', '当前皮肤')->as(function ($skinId) { return $skinId . ' - ' . GameUserSkin::getSkinName($skinId); }); $show->field('owned_skins', '拥有皮肤')->as(function ($ownedSkins) { if (empty($ownedSkins)) { return '无'; } $skinIds = explode(',', $ownedSkins); $skinDetails = []; foreach ($skinIds as $skinId) { $skinDetails[] = $skinId . ' - ' . GameUserSkin::getSkinName((int)$skinId); } return implode('
', $skinDetails); })->unescape(); ShowHelper::defaultTimestamps($show); }); } /** * 表单页面 * * @return Form */ public function form(): Form { return Form::make(GameUserSkin::class, function (Form $form) { FormHelper::defaultId($form); $form->number('user_id', '用户ID')->required()->help('请输入用户ID'); $form->select('current_skin_id', '当前皮肤')->options([ 1 => '1 - 默认皮肤', 2 => '2 - 春日皮肤', 3 => '3 - 夏日皮肤', 4 => '4 - 秋日皮肤', ])->required()->default(1); $form->text('owned_skins', '拥有皮肤') ->required() ->default('1') ->help('请输入拥有的皮肤ID,多个用逗号分隔,如:1,2,3'); FormHelper::defaultTimestamps($form); // 保存前验证 $form->saving(function (Form $form) { // 验证拥有皮肤格式 $ownedSkins = $form->owned_skins; if (!empty($ownedSkins)) { $skinIds = explode(',', $ownedSkins); foreach ($skinIds as $skinId) { $skinId = (int)trim($skinId); if (!GameUserSkin::isValidSkinId($skinId)) { return $form->response()->error("无效的皮肤ID: {$skinId}"); } } // 确保当前皮肤在拥有皮肤列表中 if (!in_array($form->current_skin_id, $skinIds)) { return $form->response()->error('当前皮肤必须在拥有皮肤列表中'); } } }); }); } }