From ac5f733edbc1765b24cb81ed81fde7fc37fcdce8 Mon Sep 17 00:00:00 2001 From: xiaomlove <1939737565@qq.com> Date: Tue, 25 Feb 2025 02:05:49 +0800 Subject: [PATCH] exam user detail --- app/Auth/Permission.php | 5 ++ app/Enums/PermissionEnum.php | 1 + .../Resources/User/ExamUserResource.php | 23 ++-------- app/Models/SearchBox.php | 13 ++++-- app/Repositories/ExamRepository.php | 1 + app/Repositories/TagRepository.php | 2 +- app/Repositories/UploadRepository.php | 8 +++- .../pages/detail-v3.blade.php | 46 +++++++++++++++++++ 8 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 resources/views/filament/resources/user/exam-user-resource/pages/detail-v3.blade.php diff --git a/app/Auth/Permission.php b/app/Auth/Permission.php index f3e45291..f778c3de 100644 --- a/app/Auth/Permission.php +++ b/app/Auth/Permission.php @@ -10,4 +10,9 @@ class Permission { return user_can(PermissionEnum::UPLOAD_TO_SPECIAL_SECTION->value); } + + public static function canBeAnonymous(): bool + { + return user_can(PermissionEnum::BE_ANONYMOUS->value); + } } diff --git a/app/Enums/PermissionEnum.php b/app/Enums/PermissionEnum.php index 09f75ea9..d7af22b4 100644 --- a/app/Enums/PermissionEnum.php +++ b/app/Enums/PermissionEnum.php @@ -4,4 +4,5 @@ namespace App\Enums; enum PermissionEnum: string { case UPLOAD_TO_SPECIAL_SECTION = 'uploadspecial'; + case BE_ANONYMOUS = 'beanonymous'; } diff --git a/app/Filament/Resources/User/ExamUserResource.php b/app/Filament/Resources/User/ExamUserResource.php index 2487653b..fd0d95df 100644 --- a/app/Filament/Resources/User/ExamUserResource.php +++ b/app/Filament/Resources/User/ExamUserResource.php @@ -11,6 +11,7 @@ use App\Repositories\HitAndRunRepository; use Carbon\Carbon; use Filament\Forms; use Filament\Forms\Form; +use Filament\Infolists\Components\ViewEntry; use Filament\Infolists\Infolist; use Filament\Resources\Resource; use Filament\Tables\Table; @@ -179,25 +180,9 @@ class ExamUserResource extends Resource ->columns(2) , Components\Group::make([ - Components\Grid::make(3) // 3 列的网格 - ->schema([ - Infolists\Components\TextEntry::make('header1')->label('Header 1'), - Infolists\Components\TextEntry::make('header2')->label('Header 2'), - Infolists\Components\TextEntry::make('header3')->label('Header 3'), - ]), - Components\Grid::make(3) // 数据行 - ->schema([ - Infolists\Components\TextEntry::make('data1')->getStateUsing(fn ($record) => $record->data1), - Infolists\Components\TextEntry::make('data2')->getStateUsing(fn ($record) => $record->data2), - Infolists\Components\TextEntry::make('data3')->getStateUsing(fn ($record) => $record->data3), - ]), - // 更多数据行... - Components\Grid::make(3) // 数据行 - ->schema([ - Infolists\Components\TextEntry::make('data1')->getStateUsing(fn ($record) => $record->data4), - Infolists\Components\TextEntry::make('data2')->getStateUsing(fn ($record) => $record->data5), - Infolists\Components\TextEntry::make('data3')->getStateUsing(fn ($record) => $record->data6), - ]), + ViewEntry::make('progressFormatted') + ->label('进度') + ->view('filament.resources.user.exam-user-resource.pages.detail-v3') ])->columnSpan(1), ]), ]); diff --git a/app/Models/SearchBox.php b/app/Models/SearchBox.php index 9c536455..ab617113 100644 --- a/app/Models/SearchBox.php +++ b/app/Models/SearchBox.php @@ -283,8 +283,15 @@ class SearchBox extends NexusModel foreach (self::$taxonomies as $name => $info) { $relationName = "taxonomy_" . $name; $show = "show" . $name; - if ($this->{$show}) { - $this->setRelation($relationName, $this->{$relationName}()->orWhere('mode', 0)->get()); + if ($this->{$show} && isset(self::$taxonomies[$name])) { + $modelName = self::$taxonomies[$name]['model']; + $this->setRelation( + $relationName, + $modelName::query()->whereIn('mode', [$this->getKey(), 0]) + ->orderBy('sort_index') + ->orderBy('id') + ->get() + ); } } } @@ -296,7 +303,7 @@ class SearchBox extends NexusModel public function loadTags(): void { - $this->setRelation("tags", TagRepository::listAll($this->id)); + $this->setRelation("tags", TagRepository::listAll($this->getKey())); } public static function getDefaultSearchMode() diff --git a/app/Repositories/ExamRepository.php b/app/Repositories/ExamRepository.php index 45e993fc..efb0c5dc 100644 --- a/app/Repositories/ExamRepository.php +++ b/app/Repositories/ExamRepository.php @@ -867,6 +867,7 @@ class ExamRepository extends BaseRepository $index['current_value'] = $currentValue; $index['current_value_formatted'] = $currentValueFormatted; $index['passed'] = $currentValue >= $requireValueAtomic; + $index['index_result'] = $index['passed'] ? nexus_trans($exam->getPassResultTransKey('pass')) : nexus_trans($exam->getPassResultTransKey('not_pass')); $result[] = $index; } return $result; diff --git a/app/Repositories/TagRepository.php b/app/Repositories/TagRepository.php index 218536c4..1c3a55a0 100644 --- a/app/Repositories/TagRepository.php +++ b/app/Repositories/TagRepository.php @@ -47,7 +47,7 @@ class TagRepository extends BaseRepository public static function createBasicQuery() { - return Tag::query()->orderBy('priority', 'desc')->orderBy('id', 'desc'); + return Tag::query()->orderBy('priority', 'asc')->orderBy('id', 'asc'); } public function renderCheckbox(int $searchBoxId, array $checked = [], $ignorePermission = false): string diff --git a/app/Repositories/UploadRepository.php b/app/Repositories/UploadRepository.php index 776d464c..82b11efb 100644 --- a/app/Repositories/UploadRepository.php +++ b/app/Repositories/UploadRepository.php @@ -21,11 +21,15 @@ class UploadRepository extends BaseRepository 'name' => 'required', ]; $request->validate($rules); - $category = Category::query()->firstOrFail($request->type); + $category = Category::query()->findOrFail($request->type); $mode = $category->mode; + $searchBox = SearchBox::query()->findOrFail($mode); + $searchBox->loadSubCategories(); + $searchBox->loadTags(); + $anonymous = "no"; $uploaderUsername = $user->username; - if ($request->uplver == 'yes' && user_can('beanonymous')) { + if ($request->uplver == 'yes' && Permission::canBeAnonymous()) { $anonymous = "yes"; $uploaderUsername = "Anonymous"; } diff --git a/resources/views/filament/resources/user/exam-user-resource/pages/detail-v3.blade.php b/resources/views/filament/resources/user/exam-user-resource/pages/detail-v3.blade.php new file mode 100644 index 00000000..f637563c --- /dev/null +++ b/resources/views/filament/resources/user/exam-user-resource/pages/detail-v3.blade.php @@ -0,0 +1,46 @@ +
+ + + + + + + + + + + @foreach ($getState() as $index) + + + + + + + @endforeach + +
+ + + {{ __('label.exam.index_required_label') }} + + + + + + {{ __('label.exam.index_required_value') }} + + + + + + {{ __('label.exam.index_current_value') }} + + + + + + {{ __('label.exam.index_result') }} + + +
{{ $index['index_formatted'] }}{{ $index['require_value_formatted'] }}{{ $index['current_value_formatted'] }}{!! $index['index_result'] !!}
+