From 49bb8213619f44579d9c141f205971ebfc96f80d Mon Sep 17 00:00:00 2001 From: f4ilji Date: Sat, 9 Nov 2024 00:52:35 +0500 Subject: [PATCH] Changes --- app/Http/Controllers/ClientPostController.php | 1 + .../Controllers/ClientProgramController.php | 1 - app/Http/Controllers/SearchController.php | 46 +++++++++--------- app/Http/Resources/UserSearchResource.php | 19 ++++++++ .../BuilderUi/Events/Badges/CategoryBadge.vue | 2 - .../BuilderUi/Events/EventBadgeBuilder.vue | 1 + .../Events/Filters/CategoryFilter.vue | 24 +++++++++- .../BuilderUi/Events/Filters/TagFilter.vue | 28 +++++++++-- .../js/Components/ClientGlobalSearch.vue | 12 +++-- .../Items/ResultEducationalGroupItem.vue | 2 +- .../Items/ResultEducationalProgramItem.vue | 2 +- .../Search/Items/ResultFacultyItem.vue | 47 +++++++++++++++++++ .../Search/Items/ResultPersonItem.vue | 47 +++++++++++++++++++ resources/js/Components/Search/ResultList.vue | 13 ++++- resources/js/Components/other/ruCategories.js | 13 +++++ resources/js/Pages/Client/Events/Index.vue | 2 +- resources/js/Pages/Client/Posts/Index.vue | 10 ++-- 17 files changed, 223 insertions(+), 47 deletions(-) create mode 100644 app/Http/Resources/UserSearchResource.php create mode 100644 resources/js/Components/Search/Items/ResultFacultyItem.vue create mode 100644 resources/js/Components/Search/Items/ResultPersonItem.vue create mode 100644 resources/js/Components/other/ruCategories.js diff --git a/app/Http/Controllers/ClientPostController.php b/app/Http/Controllers/ClientPostController.php index 63d2ce3..e248ab9 100644 --- a/app/Http/Controllers/ClientPostController.php +++ b/app/Http/Controllers/ClientPostController.php @@ -122,6 +122,7 @@ class ClientPostController extends Controller $breadcrumbs = null; } + return Inertia::render('Client/Posts/Index', compact('filters', 'posts', 'categories', 'tags', 'breadcrumbs')); } diff --git a/app/Http/Controllers/ClientProgramController.php b/app/Http/Controllers/ClientProgramController.php index b249ad0..625001d 100644 --- a/app/Http/Controllers/ClientProgramController.php +++ b/app/Http/Controllers/ClientProgramController.php @@ -120,7 +120,6 @@ class ClientProgramController extends Controller return [$formEducational->value => $formEducational->getLabel()]; }); - dd($program); $seo = $program->seo; return Inertia::render('Client/Programs/Show', compact('program', 'formsEdu', 'seo')); } diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 108a24f..ecd5e22 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -6,10 +6,12 @@ use App\Http\Resources\AdditionalEducationSearchResource; use App\Http\Resources\EducationalProgramSearchResource; use App\Http\Resources\EducationGroupSearchResource; use App\Http\Resources\EventSearchResource; +use App\Http\Resources\FacultySearchResource; use App\Http\Resources\PageResource; use App\Http\Resources\PageSearchResource; use App\Http\Resources\PostResource; use App\Http\Resources\PostSearchResource; +use App\Http\Resources\UserSearchResource; use App\Models\AdditionalEducation; use App\Models\EducationalGroup; use App\Models\EducationalProgram; @@ -28,6 +30,16 @@ use ProtoneMedia\LaravelCrossEloquentSearch\Search; class SearchController extends Controller { + private array $resourceMap = [ + Post::class => PostSearchResource::class, + Page::class => PageSearchResource::class, + EducationalGroup::class => EducationGroupSearchResource::class, + EducationalProgram::class => EducationalProgramSearchResource::class, + Event::class => EventSearchResource::class, + AdditionalEducation::class => AdditionalEducationSearchResource::class, + User::class => UserSearchResource::class, + Faculty::class => FacultySearchResource::class, + ]; public function index(Request $request) { $req = Str::lower($request->query('search')); @@ -42,37 +54,21 @@ class SearchController extends Controller ->add(Post::where('status', '=', 'published'), ['title', 'search_data']) ->add(Page::with('section')->where('searchable', '=', true), ['title', 'search_data']) ->add(Event::where('event_date_start', '>', Date::now()), 'title') -// ->add(AdditionalEducation::where('is_active', '=', true), 'title') -// ->add(EducationalGroup::with('schedules'), 'title') -// ->add(EducationalProgram::where('status', '=', true)->whereHas('admission_plans'), 'name') -// ->add(Faculty::where('is_active', '=', true), 'title') -// ->add(User::whereHas('userDetail'), ['name', 'userDetail.education', 'userDetail.awards', 'userDetail.publications']) + ->add(AdditionalEducation::where('is_active', '=', true), 'title') + ->add(EducationalGroup::with('schedules'), 'title') + ->add(EducationalProgram::where('status', '=', true)->whereHas('admission_plans'), 'name') + ->add(Faculty::where('is_active', '=', true), 'title') + ->add(User::whereHas('userDetail'), 'name') ->beginWithWildcard() ->orderByRelevance() ->includeModelType() ->ignoreCase(true) ->search($req); - // Преобразуем результаты в коллекцию и мапируем их - $resources = collect($results)->map(function ($result) { - if ($result instanceof Post) { - return new PostSearchResource($result); - } - if ($result instanceof Page) { - return new PageSearchResource($result); - } - if ($result instanceof EducationalGroup) { - return new EducationGroupSearchResource($result); - } - if ($result instanceof EducationalProgram) { - return new EducationalProgramSearchResource($result); - } - if ($result instanceof Event) { - return new EventSearchResource($result); - } - if ($result instanceof AdditionalEducation) { - return new AdditionalEducationSearchResource($result); - } + $resourceMap = $this->resourceMap; + $resources = collect($results)->map(function ($result) use ($resourceMap) { + $resourceClass = $resourceMap[get_class($result)] ?? null; + return $resourceClass ? new $resourceClass($result) : null; }); $result_type = $this->getCategoriesSearchResult($resources); diff --git a/app/Http/Resources/UserSearchResource.php b/app/Http/Resources/UserSearchResource.php new file mode 100644 index 0000000..3cd9da9 --- /dev/null +++ b/app/Http/Resources/UserSearchResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray(Request $request): array + { + return parent::toArray($request); + } +} diff --git a/resources/js/Components/BuilderUi/Events/Badges/CategoryBadge.vue b/resources/js/Components/BuilderUi/Events/Badges/CategoryBadge.vue index c9ff4ea..cbf4e67 100644 --- a/resources/js/Components/BuilderUi/Events/Badges/CategoryBadge.vue +++ b/resources/js/Components/BuilderUi/Events/Badges/CategoryBadge.vue @@ -24,7 +24,6 @@ export default { methods: { clearFilter() { let url = new URL(window.location.href); - // Создаем массив для хранения всех ключей, которые нужно удалить const keysToDelete = []; @@ -34,7 +33,6 @@ export default { keysToDelete.push(key); } } - // Удаляем все ключи из массива keysToDelete.forEach(key => url.searchParams.delete(key)); diff --git a/resources/js/Components/BuilderUi/Events/EventBadgeBuilder.vue b/resources/js/Components/BuilderUi/Events/EventBadgeBuilder.vue index 3432987..f5c6f1a 100644 --- a/resources/js/Components/BuilderUi/Events/EventBadgeBuilder.vue +++ b/resources/js/Components/BuilderUi/Events/EventBadgeBuilder.vue @@ -1,4 +1,5 @@
@@ -56,10 +58,10 @@ + + \ No newline at end of file diff --git a/resources/js/Components/Search/Items/ResultPersonItem.vue b/resources/js/Components/Search/Items/ResultPersonItem.vue new file mode 100644 index 0000000..dc64fd3 --- /dev/null +++ b/resources/js/Components/Search/Items/ResultPersonItem.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/resources/js/Components/Search/ResultList.vue b/resources/js/Components/Search/ResultList.vue index b95e4b3..b9f9c89 100644 --- a/resources/js/Components/Search/ResultList.vue +++ b/resources/js/Components/Search/ResultList.vue @@ -24,13 +24,22 @@ import ResultEducationalProgramItem from "@/Components/Search/Items/ResultEducat import ResultEventItem from "@/Components/Search/Items/ResultEventItem.vue"; import ResultAdditionalEducationItem from "@/Components/Search/Items/ResultAdditionalEducationalItem.vue"; import ResultEducationalGroupItem from "@/Components/Search/Items/ResultEducationalGroupItem.vue"; +import ResultPersonItem from "@/Components/Search/Items/ResultPersonItem.vue"; +import ResultFacultyItem from "@/Components/Search/Items/ResultFacultyItem.vue"; export default { name: "ResultList", components: { ResultEducationalGroupItem, ResultAdditionalEducationItem, - ResultEventItem, ResultEducationalProgramItem, ResultPageItem, ResultPostItem, PreSearchLinkList, Link}, + ResultEventItem, + ResultEducationalProgramItem, + ResultPageItem, + ResultPostItem, + PreSearchLinkList, + ResultPersonItem, + ResultFacultyItem, + Link}, data() { return { } @@ -44,6 +53,8 @@ export default { EducationalProgram: 'ResultEducationalProgramItem', AdditionalEducational: 'ResultAdditionalEducationItem', EducationalGroup: 'ResultEducationalGroupItem', + User: 'ResultPersonItem', + Faculty: 'ResultFacultyItem' }; return componentMap[type] || null; }, diff --git a/resources/js/Components/other/ruCategories.js b/resources/js/Components/other/ruCategories.js new file mode 100644 index 0000000..c731877 --- /dev/null +++ b/resources/js/Components/other/ruCategories.js @@ -0,0 +1,13 @@ +// src/locales/translations.js +export const ruCategories = { + Post: "Новости", + Page: "Страницы", + Event: "Мероприятия", + Faculty: "Факультеты", + User: "Сотрудники", + Division: "Подразделения", + AdditionalEducation: "Доп. образование", + EducationalProgram: "Образовательная программа", + EducationalGroup: "Расписание" + +}; \ No newline at end of file diff --git a/resources/js/Pages/Client/Events/Index.vue b/resources/js/Pages/Client/Events/Index.vue index a6b1c13..c70d8aa 100644 --- a/resources/js/Pages/Client/Events/Index.vue +++ b/resources/js/Pages/Client/Events/Index.vue @@ -74,7 +74,7 @@ export default {
-
+
diff --git a/resources/js/Pages/Client/Posts/Index.vue b/resources/js/Pages/Client/Posts/Index.vue index 9960961..1d37709 100644 --- a/resources/js/Pages/Client/Posts/Index.vue +++ b/resources/js/Pages/Client/Posts/Index.vue @@ -11,10 +11,10 @@ import AdminIndexHeaderTitle from "@/Components/AdminIndexHeaderTitle.vue"; import ClientPostFilter from '@/Components/ClientPostFilter.vue'; import ClientPost from '@/Components/ClientPost.vue'; import ClientPostSearch from '@/Components/ClientPostSearch.vue'; -import PostBadge from "@/Components/BuilderUi/Events/EventBadgeBuilder.vue"; import MainPageNavBar from "@/Navbars/MainPageNavbar.vue"; import NewsBreadcrumbs from "@/Components/BuilderUi/Posts/NewsBreadcrumbs.vue"; import AppHead from "@/Components/AppHead.vue"; +import PostBadge from "@/Components/BuilderUi/Posts/PostBadge.vue"; export default { name: "Index", @@ -92,10 +92,12 @@ export default { -
-

Найдено новостей: {{ posts.meta.total }}

+ + +
+

Найдено новостей: {{ posts.meta.total }}

- +