| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace App\Module\Game\Repositorys;
- use App\Module\Game\Models\GameUserSkin;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use UCore\DcatAdmin\GridHelper;
- use UCore\DcatAdmin\ShowHelper;
- use UCore\DcatAdmin\FormHelper;
- use UCore\DcatAdmin\FilterHelper;
- /**
- * 用户皮肤仓库类
- */
- class GameUserSkinRepository
- {
- /**
- * 列表页面
- *
- * @return Grid
- */
- public function grid(): Grid
- {
- $grid = Grid::make(GameUserSkin::with(['user']), function (Grid $grid) {
- $grid->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('<br>', $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('当前皮肤必须在拥有皮肤列表中');
- }
- }
- });
- });
- }
- }
|