From af69b482473fb80b9d53b18ecb99b3f1cbda0498 Mon Sep 17 00:00:00 2001 From: f4ilji Date: Sun, 17 Nov 2024 01:33:09 +0500 Subject: [PATCH] Changes --- _docker/app/Dockerfile | 2 +- app/Filament/Components/Forms/PageForm.php | 6 +- .../Components/Forms/UserDetailForm.php | 4 +- .../Resources/AcademicJournalResource.php | 6 +- .../Resources/AcceptedInvitationResource.php | 5 + .../AdditionalEducationCategoryResource.php | 32 +-- .../Resources/AdditionalEducationResource.php | 23 +- app/Filament/Resources/CategoryResource.php | 23 +- app/Filament/Resources/CustomFormResource.php | 6 +- .../ResponsesRelationManager.php | 1 + .../Resources/CustomFormResponseResource.php | 2 +- app/Filament/Resources/DepartmentResource.php | 24 ++- .../DirectionAdditionalEducationResource.php | 26 ++- app/Filament/Resources/DivisionResource.php | 8 +- .../Resources/EducationalGroupResource.php | 18 +- .../Resources/EventCategoryResource.php | 18 +- app/Filament/Resources/EventResource.php | 7 +- .../DepartmentsRelationManager.php | 11 +- app/Filament/Resources/FacultyResource.php | 11 +- .../DepartmentsRelationManager.php | 50 +++++ .../Resources/MainSectionResource.php | 17 +- .../Resources/PageReferenceListResource.php | 19 +- app/Filament/Resources/PostResource.php | 8 +- app/Filament/Resources/SubSectionResource.php | 19 +- app/Filament/Resources/UserResource.php | 15 +- .../UserDetailRelationManager.php | 1 - .../Resources/VirtualExhibitionResource.php | 203 +++++++++--------- .../Controllers/ClientDivisionController.php | 2 +- .../ClientDepartmentTeacherCard.vue | 2 +- .../ClientDepartmentWorkerCard.vue | 2 +- .../PersonCards/ClientDivisionWorkerCard.vue | 2 +- .../PersonCards/ClientFacultyWorkerCard.vue | 2 +- resources/js/Pages/Client/Persons/Show.vue | 2 +- 33 files changed, 367 insertions(+), 210 deletions(-) create mode 100644 app/Filament/Resources/FacultyResource/RelationManagers/DepartmentsRelationManager.php diff --git a/_docker/app/Dockerfile b/_docker/app/Dockerfile index c05abbc..455441a 100644 --- a/_docker/app/Dockerfile +++ b/_docker/app/Dockerfile @@ -15,7 +15,7 @@ RUN apt-get update && apt-get install -y \ zip \ unzip \ git && \ - docker-php-ext-configure gd --with-webp --with-jpeg && \ + docker-php-ext-configure gd --with-webp --with-jpeg --with-png && \ docker-php-ext-install gd && \ docker-php-ext-install pdo_mysql && \ docker-php-ext-install bcmath && \ diff --git a/app/Filament/Components/Forms/PageForm.php b/app/Filament/Components/Forms/PageForm.php index 9532caa..c1dbdcb 100644 --- a/app/Filament/Components/Forms/PageForm.php +++ b/app/Filament/Components/Forms/PageForm.php @@ -66,11 +66,11 @@ class PageForm Forms\Components\Grid::make(2)->schema([ TextInput::make('title')->label('Заголовок')->required() ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set) { + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { $set('slug', Str::slug($state)); $set('path', Str::slug($state)); }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->required() + TextInput::make('slug')->label('Текстовый идентификатор страницы')->unique(ignoreRecord: true)->required() ->live(onBlur: true) ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) { $set('path', Str::slug($state)); @@ -98,7 +98,7 @@ class PageForm ContentBuilderItem::getItem('content') ]), Forms\Components\Tabs\Tab::make('Настройки')->schema([ - Select::make('template')->options(self::getPageTemplates())->required(), + Select::make('template')->label('Шаблон')->options(self::getPageTemplates())->required(), ]), ]), diff --git a/app/Filament/Components/Forms/UserDetailForm.php b/app/Filament/Components/Forms/UserDetailForm.php index 9fbb10f..5c17f6e 100644 --- a/app/Filament/Components/Forms/UserDetailForm.php +++ b/app/Filament/Components/Forms/UserDetailForm.php @@ -50,8 +50,8 @@ class UserDetailForm Forms\Components\FileUpload::make('photo') ->label('Фотография') ->image() - ->optimize('jpg') - ->resize(30) +// ->optimize('jpg') +// ->resize(30) ->disk('public') ->imageEditor() ->directory('images') diff --git a/app/Filament/Resources/AcademicJournalResource.php b/app/Filament/Resources/AcademicJournalResource.php index c18fd2b..48e5370 100644 --- a/app/Filament/Resources/AcademicJournalResource.php +++ b/app/Filament/Resources/AcademicJournalResource.php @@ -423,15 +423,15 @@ class AcademicJournalResource extends Resource Tabs\Tab::make('Редакция') ->schema([ Forms\Components\Section::make('Главный редактор')->schema([ - Forms\Components\Repeater::make('chief_editor')->schema([ + Forms\Components\Repeater::make('chief_editor')->label('')->schema([ TextInput::make('name')->label('Имя'), TextInput::make('academicTitle')->label('Ученная степень'), TextInput::make('position')->label('Должность'), TextInput::make('institution')->label('Учереждение'), - ])->maxItems(1), + ])->maxItems(1)->reorderable(false), ]), Forms\Components\Section::make('Редакторы')->schema([ - Forms\Components\Repeater::make('editors')->schema([ + Forms\Components\Repeater::make('editors')->label('')->schema([ TextInput::make('name')->label('Имя'), TextInput::make('academicTitle')->label('Ученная степень'), TextInput::make('position')->label('Должность'), diff --git a/app/Filament/Resources/AcceptedInvitationResource.php b/app/Filament/Resources/AcceptedInvitationResource.php index 5a5f8e0..76ebdc1 100644 --- a/app/Filament/Resources/AcceptedInvitationResource.php +++ b/app/Filament/Resources/AcceptedInvitationResource.php @@ -20,6 +20,11 @@ class AcceptedInvitationResource extends Resource implements HasShieldPermission protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + + public static ?string $label = 'Принятое приглашение'; + + protected static ?string $pluralLabel = 'Принятные приглашения'; + public static function form(Form $form): Form { return $form diff --git a/app/Filament/Resources/AdditionalEducationCategoryResource.php b/app/Filament/Resources/AdditionalEducationCategoryResource.php index 9064ec1..a26be30 100644 --- a/app/Filament/Resources/AdditionalEducationCategoryResource.php +++ b/app/Filament/Resources/AdditionalEducationCategoryResource.php @@ -11,6 +11,7 @@ use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; @@ -32,18 +33,21 @@ class AdditionalEducationCategoryResource extends Resource { return $form ->schema([ - Forms\Components\Grid::make('2')->schema([ - TextInput::make('title')->label('Заголовок')->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { - $set('slug', Str::slug($state)); - $set('seo.title', $state); - }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), - Forms\Components\Select::make('dir_addit_educat_id')->required() - ->options(DirectionAdditionalEducation::where('is_active', true)->pluck('title', 'id')) + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make('2')->schema([ + TextInput::make('title')->label('Заголовок')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + $set('seo.title', $state); + }), + TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + Forms\Components\Select::make('dir_addit_educat_id')->required()->label('Направление доп. образования') + ->preload() + ->options(DirectionAdditionalEducation::where('is_active', true)->pluck('title', 'id')) + ]), + Forms\Components\Toggle::make('is_active')->label('Активно')->columnSpanFull()->inline(false)->default(true), ]), - Forms\Components\Toggle::make('is_active')->columnSpanFull()->inline(false)->default(true), ]); } @@ -51,7 +55,11 @@ class AdditionalEducationCategoryResource extends Resource { return $table ->columns([ - // + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\BadgeColumn::make('direction.title')->label('Направление')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/AdditionalEducationResource.php b/app/Filament/Resources/AdditionalEducationResource.php index 8de4a40..5fea195 100644 --- a/app/Filament/Resources/AdditionalEducationResource.php +++ b/app/Filament/Resources/AdditionalEducationResource.php @@ -30,6 +30,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Carbon; @@ -65,17 +66,17 @@ class AdditionalEducationResource extends Resource }), TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), - Forms\Components\Select::make('category_id')->required() + Forms\Components\Select::make('category_id')->required()->label('Категория') ->options(AdditionalEducationCategory::where('is_active', true)->pluck('title', 'id')) ]), - Forms\Components\TextInput::make('target_group')->required()->columnSpanFull(), - Forms\Components\TextInput::make('qualification')->required()->columnSpanFull(), + Forms\Components\TextInput::make('target_group')->required()->columnSpanFull()->label('Целевая аудитория'), + Forms\Components\TextInput::make('qualification')->required()->columnSpanFull()->label('Присваиваемая квалификация'), Forms\Components\Grid::make('2')->schema([ - Forms\Components\TextInput::make('price')->required()->integer(), - Forms\Components\TextInput::make('learning_time')->required()->integer(), + Forms\Components\TextInput::make('price')->required()->integer()->label('Стоимость'), + Forms\Components\TextInput::make('learning_time')->required()->integer()->label('Объем обучения'), ]), - Forms\Components\Select::make('form_education')->required()->options(FormEducation::class), - Forms\Components\Toggle::make('is_active')->columnSpanFull()->inline(false)->default(true), + Forms\Components\Select::make('form_education')->label('Форма обучения')->required()->options(FormEducation::class), + Forms\Components\Toggle::make('is_active')->label('Активно')->columnSpanFull()->inline(false)->default(true), ]), Tabs\Tab::make('Контент') ->schema([ @@ -446,9 +447,11 @@ class AdditionalEducationResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('title')->searchable()->sortable(), - Tables\Columns\ToggleColumn::make('is_active'), + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\BadgeColumn::make('category.title')->label('Категория')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/CategoryResource.php b/app/Filament/Resources/CategoryResource.php index fe35777..6a414c4 100644 --- a/app/Filament/Resources/CategoryResource.php +++ b/app/Filament/Resources/CategoryResource.php @@ -6,12 +6,16 @@ use App\Filament\Resources\CategoryResource\Pages; use App\Filament\Resources\CategoryResource\RelationManagers; use App\Models\Category; use Filament\Forms; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; +use Illuminate\Support\Str; class CategoryResource extends Resource { @@ -33,15 +37,28 @@ class CategoryResource extends Resource { return $form ->schema([ - Forms\Components\TextInput::make('title')->required()->label('Название'), - ]); + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make(2)->schema([ + TextInput::make('title')->label('Заголовок')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + }), + TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + ]), + Toggle::make('is_active')->default(true)->label('Активно')->inline(false), + ]), + ]); } public static function table(Table $table): Table { return $table ->columns([ - // + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/CustomFormResource.php b/app/Filament/Resources/CustomFormResource.php index 41b2b30..0e2d687 100644 --- a/app/Filament/Resources/CustomFormResource.php +++ b/app/Filament/Resources/CustomFormResource.php @@ -54,9 +54,9 @@ class CustomFormResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('title'), - Tables\Columns\TextColumn::make('form_id'), - Tables\Columns\TextColumn::make('status'), + Tables\Columns\TextColumn::make('title')->label('Название')->searchable()->sortable(), + Tables\Columns\TextColumn::make('form_id')->label('Индефикатор формы'), + Tables\Columns\TextColumn::make('status')->label('Статус')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php b/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php index 24a34d8..363c166 100644 --- a/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php +++ b/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php @@ -190,6 +190,7 @@ class ResponsesRelationManager extends RelationManager return [ Tables\Columns\TextColumn::make('id')->sortable(), Tables\Columns\ToggleColumn::make('checked')->label('Просмотрено'), + Tables\Columns\TextColumn::make('created_at')->label('Врямя создания')->sortable(), ]; } diff --git a/app/Filament/Resources/CustomFormResponseResource.php b/app/Filament/Resources/CustomFormResponseResource.php index 94c9aa2..20f3e4e 100644 --- a/app/Filament/Resources/CustomFormResponseResource.php +++ b/app/Filament/Resources/CustomFormResponseResource.php @@ -17,7 +17,7 @@ class CustomFormResponseResource extends Resource { public static ?string $label = 'Форма'; protected static ?string $pluralLabel = 'Ответы на формы'; - protected static ?string $navigationParentItem = 'Пользовательские Формы'; + protected static ?string $navigationParentItem = 'nobody'; protected static ?string $model = CustomFormResponse::class; diff --git a/app/Filament/Resources/DepartmentResource.php b/app/Filament/Resources/DepartmentResource.php index 5fc20c9..1605319 100644 --- a/app/Filament/Resources/DepartmentResource.php +++ b/app/Filament/Resources/DepartmentResource.php @@ -27,6 +27,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Carbon; @@ -58,13 +59,15 @@ class DepartmentResource extends Resource ->tabs([ Tabs\Tab::make('Основная информация') ->schema([ - TextInput::make('title')->label('Название факультета')->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { - $set('slug', Str::slug($state)); - $set('seo.title', $state); - }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + Forms\Components\Grid::make()->schema([ + TextInput::make('title')->label('Название факультета')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + $set('seo.title', $state); + }), + TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + ]), Toggle::make('is_active')->default(true)->label('Активный факультет')->inline(false), Forms\Components\Select::make('faculty_id') ->options(Faculty::all()->pluck('title', 'id')) @@ -452,8 +455,11 @@ class DepartmentResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('title')->label('Название'), - Tables\Columns\TextColumn::make('faculty.title')->label('Факультет')->words(2) + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + Tables\Columns\TextColumn::make('faculty.title')->label('Факультет')->words(2), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/DirectionAdditionalEducationResource.php b/app/Filament/Resources/DirectionAdditionalEducationResource.php index 9d35f7a..54f3015 100644 --- a/app/Filament/Resources/DirectionAdditionalEducationResource.php +++ b/app/Filament/Resources/DirectionAdditionalEducationResource.php @@ -10,6 +10,7 @@ use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; @@ -31,14 +32,18 @@ class DirectionAdditionalEducationResource extends Resource { return $form ->schema([ - TextInput::make('title')->label('Заголовок')->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { - $set('slug', Str::slug($state)); - $set('seo.title', $state); - }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), - Forms\Components\Toggle::make('is_active')->columnSpanFull()->inline(false)->default(true), + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make()->schema([ + TextInput::make('title')->label('Заголовок')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + $set('seo.title', $state); + }), + TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + ]), + Forms\Components\Toggle::make('is_active')->label('Активно')->columnSpanFull()->inline(false)->default(true), + ]), ]); } @@ -46,7 +51,10 @@ class DirectionAdditionalEducationResource extends Resource { return $table ->columns([ - // + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/DivisionResource.php b/app/Filament/Resources/DivisionResource.php index a090fdc..76edec6 100644 --- a/app/Filament/Resources/DivisionResource.php +++ b/app/Filament/Resources/DivisionResource.php @@ -22,6 +22,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; @@ -420,8 +421,11 @@ class DivisionResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('title'), - ]) + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), + ]) ->filters([ // ]) diff --git a/app/Filament/Resources/EducationalGroupResource.php b/app/Filament/Resources/EducationalGroupResource.php index 124c870..718b83b 100644 --- a/app/Filament/Resources/EducationalGroupResource.php +++ b/app/Filament/Resources/EducationalGroupResource.php @@ -10,6 +10,7 @@ use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; @@ -28,10 +29,12 @@ class EducationalGroupResource extends Resource { return $form ->schema([ - Forms\Components\Grid::make(2)->schema([ - Forms\Components\TextInput::make('title')->label('Название группы')->required(), - Forms\Components\Select::make('faculty_id')->label('Факультет')->required() - ->options(Faculty::all()->pluck('title', 'id')) + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make(2)->schema([ + Forms\Components\TextInput::make('title')->label('Название группы')->required(), + Forms\Components\Select::make('faculty_id')->label('Факультет')->required() + ->options(Faculty::all()->pluck('title', 'id')) + ]), ]), ]); } @@ -40,9 +43,10 @@ class EducationalGroupResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->label('ID'), - Tables\Columns\TextColumn::make('title')->label('Название'), - Tables\Columns\TextColumn::make('faculty.title')->label('Факультет'), + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\BadgeColumn::make('faculty.title')->label('Категория')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/EventCategoryResource.php b/app/Filament/Resources/EventCategoryResource.php index 482ca90..82ee2ed 100644 --- a/app/Filament/Resources/EventCategoryResource.php +++ b/app/Filament/Resources/EventCategoryResource.php @@ -6,12 +6,15 @@ use App\Filament\Resources\EventCategoryResource\Pages; use App\Filament\Resources\EventCategoryResource\RelationManagers; use App\Models\EventCategory; use Filament\Forms; +use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; +use Illuminate\Support\Str; class EventCategoryResource extends Resource { @@ -29,7 +32,16 @@ class EventCategoryResource extends Resource { return $form ->schema([ - Forms\Components\TextInput::make('title')->required()->label('Название'), + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make()->schema([ + Forms\Components\TextInput::make('title')->label('Название категории')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + }), + TextInput::make('slug')->label('Текстовый идентификатор категории')->unique(ignoreRecord: true)->readOnly()->required(), + ]), + ]), ]); } @@ -37,7 +49,9 @@ class EventCategoryResource extends Resource { return $table ->columns([ - // + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/EventResource.php b/app/Filament/Resources/EventResource.php index 652449e..a90688e 100644 --- a/app/Filament/Resources/EventResource.php +++ b/app/Filament/Resources/EventResource.php @@ -23,6 +23,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; @@ -182,8 +183,10 @@ class EventResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('title') - ->searchable(), + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('event_date_start')->label('Начало мероприятия')->sortable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/FacultyRecourceResource/RelationManagers/DepartmentsRelationManager.php b/app/Filament/Resources/FacultyRecourceResource/RelationManagers/DepartmentsRelationManager.php index 5205dce..be608a6 100644 --- a/app/Filament/Resources/FacultyRecourceResource/RelationManagers/DepartmentsRelationManager.php +++ b/app/Filament/Resources/FacultyRecourceResource/RelationManagers/DepartmentsRelationManager.php @@ -24,6 +24,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Carbon; @@ -55,6 +56,10 @@ class DepartmentsRelationManager extends RelationManager }), TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), Toggle::make('is_active')->default(true)->label('Активный факультет')->inline(false), + Forms\Components\Select::make('faculty_id') + ->options(Faculty::all()->pluck('title', 'id')) + ->label('Факультет') + ->required(), ]), Tabs\Tab::make('Описание факультета') ->schema([ @@ -434,8 +439,10 @@ class DepartmentsRelationManager extends RelationManager return $table ->recordTitleAttribute('title') ->columns([ - Tables\Columns\TextColumn::make('title')->label('Заголовок'), - ]) + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // ]) diff --git a/app/Filament/Resources/FacultyResource.php b/app/Filament/Resources/FacultyResource.php index ea86bc8..c716569 100644 --- a/app/Filament/Resources/FacultyResource.php +++ b/app/Filament/Resources/FacultyResource.php @@ -28,6 +28,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Carbon; @@ -445,8 +446,11 @@ class FacultyResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('title')->label('Название') - ]) + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), + ]) ->filters([ // ]) @@ -463,7 +467,8 @@ class FacultyResource extends Resource public static function getRelations(): array { return [ - WorkersRelationManager::class + WorkersRelationManager::class, + DepartmentsRelationManager::class, ]; } diff --git a/app/Filament/Resources/FacultyResource/RelationManagers/DepartmentsRelationManager.php b/app/Filament/Resources/FacultyResource/RelationManagers/DepartmentsRelationManager.php new file mode 100644 index 0000000..4edd5f9 --- /dev/null +++ b/app/Filament/Resources/FacultyResource/RelationManagers/DepartmentsRelationManager.php @@ -0,0 +1,50 @@ +schema([ + Forms\Components\TextInput::make('title') + ->required() + ->maxLength(255), + ]); + } + + public function table(Table $table): Table + { + return $table + ->recordTitleAttribute('title') + ->columns([ + Tables\Columns\TextColumn::make('title'), + ]) + ->filters([ + // + ]) + ->headerActions([ + Tables\Actions\CreateAction::make(), + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/MainSectionResource.php b/app/Filament/Resources/MainSectionResource.php index c4de59a..2578566 100644 --- a/app/Filament/Resources/MainSectionResource.php +++ b/app/Filament/Resources/MainSectionResource.php @@ -25,6 +25,7 @@ class MainSectionResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-folder'; public static ?string $label = 'Главный раздел'; + public static ?string $pluralLabel = 'Главные разделы'; @@ -40,12 +41,16 @@ class MainSectionResource extends Resource { return $form ->schema([ - Forms\Components\TextInput::make('title')->label('Название раздела')->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set) { - $set('slug', Str::slug($state)); - }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make()->schema([ + Forms\Components\TextInput::make('title')->label('Название раздела')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + }), + TextInput::make('slug')->label('Текстовый идентификатор раздела')->unique(ignoreRecord: true)->readOnly()->required(), + ]), + ]), ]); } diff --git a/app/Filament/Resources/PageReferenceListResource.php b/app/Filament/Resources/PageReferenceListResource.php index 2c7dea5..23b0c03 100644 --- a/app/Filament/Resources/PageReferenceListResource.php +++ b/app/Filament/Resources/PageReferenceListResource.php @@ -18,6 +18,7 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; @@ -27,6 +28,11 @@ class PageReferenceListResource extends Resource { protected static ?string $model = PageReferenceList::class; + public static ?string $label = 'Список ресурсов'; + + protected static ?string $pluralLabel = 'Списки ресурсов'; + + protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; public static function form(Form $form): Form @@ -49,9 +55,9 @@ class PageReferenceListResource extends Resource Toggle::make('is_active')->default(true)->label('Активный ресурс')->inline(false), ]) ]), - Tabs\Tab::make('Содержание новости') + Tabs\Tab::make('Содержание ресурса') ->schema([ - Repeater::make('content')->schema([ + Repeater::make('content')->label('Ресурсы')->schema([ Forms\Components\Section::make('Быстрая настройка ресурса')->schema([ Forms\Components\Grid::make()->schema([ Forms\Components\Select::make('model_select') @@ -114,9 +120,9 @@ class PageReferenceListResource extends Resource }), ]), ]), - TextInput::make('title')->label('Title')->required(), + TextInput::make('title')->label('Заголовок ресурса')->required(), FileUpload::make('image') - ->label('Изображение') + ->label('Изображение предпросмотра') ->image() ->optimize('webp') ->resize(50) @@ -144,7 +150,10 @@ class PageReferenceListResource extends Resource { return $table ->columns([ - // + TextColumn::make('id')->label('ID')->sortable(), + TextColumn::make('title')->label('Название')->sortable()->searchable(), + TextColumn::make('created_at')->label('Дата создания')->sortable(), + Tables\Columns\ToggleColumn::make('is_active')->label('Активно')->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/PostResource.php b/app/Filament/Resources/PostResource.php index d6f5393..8181a30 100644 --- a/app/Filament/Resources/PostResource.php +++ b/app/Filament/Resources/PostResource.php @@ -59,10 +59,10 @@ class PostResource extends Resource implements HasShieldPermissions { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('title')->label('Заголовок')->searchable(), - Tables\Columns\TextColumn::make('status')->label('Статус')->badge(), - Tables\Columns\TextColumn::make('publish_at')->sortable(), + Tables\Columns\TextColumn::make('id')->sortable(), + Tables\Columns\TextColumn::make('title')->label('Заголовок')->sortable()->searchable(), + Tables\Columns\TextColumn::make('status')->label('Статус')->sortable()->badge(), + Tables\Columns\TextColumn::make('publish_at')->label('Дата публикации')->sortable(), ])->defaultSort('publish_at', 'desc') ->filters([ diff --git a/app/Filament/Resources/SubSectionResource.php b/app/Filament/Resources/SubSectionResource.php index 3c4a122..6d16b25 100644 --- a/app/Filament/Resources/SubSectionResource.php +++ b/app/Filament/Resources/SubSectionResource.php @@ -24,6 +24,8 @@ class SubSectionResource extends Resource protected static ?string $pluralLabel = 'Подразделы'; + public static ?string $label = 'Подраздел'; + protected static ?string $navigationGroup = 'Структура приложения'; @@ -31,12 +33,17 @@ class SubSectionResource extends Resource { return $form ->schema([ - Forms\Components\TextInput::make('title')->label('Название подраздела')->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set) { - $set('slug', Str::slug($state)); - }), - TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(), + + Forms\Components\Section::make()->schema([ + Forms\Components\Grid::make()->schema([ + Forms\Components\TextInput::make('title')->label('Название подраздела')->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set) { + $set('slug', Str::slug($state)); + }), + TextInput::make('slug')->label('Текстовый идентификатор подраздела')->unique(ignoreRecord: true)->readOnly()->required(), + ]), + ]), // Forms\Components\Select::make('page_ids')->options( // Page::query()->when(function ($query) { diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php index 87e9924..e0d4eed 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/UserResource.php @@ -65,21 +65,14 @@ class UserResource extends Resource implements HasShieldPermissions { return $table ->columns([ - Tables\Columns\TextColumn::make('name') - ->searchable(), - Tables\Columns\TextColumn::make('email') - ->searchable(), - Tables\Columns\TextColumn::make('email_verified_at') - ->dateTime() - ->sortable(), + Tables\Columns\TextColumn::make('name')->label('ФИО') + ->searchable()->sortable(), + Tables\Columns\TextColumn::make('email')->label('Email') + ->searchable()->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), - Tables\Columns\TextColumn::make('updated_at') - ->dateTime() - ->sortable() - ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // diff --git a/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php b/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php index f17baad..58f7aec 100644 --- a/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php +++ b/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php @@ -30,7 +30,6 @@ class UserDetailRelationManager extends RelationManager return $table ->recordTitleAttribute('user_id') ->columns([ - Tables\Columns\TextColumn::make('user_id'), ]) ->filters([ // diff --git a/app/Filament/Resources/VirtualExhibitionResource.php b/app/Filament/Resources/VirtualExhibitionResource.php index 8aa97fa..469f296 100644 --- a/app/Filament/Resources/VirtualExhibitionResource.php +++ b/app/Filament/Resources/VirtualExhibitionResource.php @@ -10,6 +10,7 @@ use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Hidden; use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\Section; +use Filament\Forms\Components\Tabs; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; @@ -35,107 +36,115 @@ class VirtualExhibitionResource extends Resource { return $form ->schema([ - Forms\Components\Grid::make()->schema([ - Forms\Components\TextInput::make('title')->required()->label('Заголовок'), - Forms\Components\TextInput::make('category')->required()->label('Категория (Необязательно)'), - ]), + Section::make() + ->schema([ + Tabs::make('Tabs') + ->tabs([ + Tabs\Tab::make('Основная информация') + ->schema([ + Forms\Components\Grid::make()->schema([ + Forms\Components\TextInput::make('title')->required()->label('Заголовок'), + Forms\Components\TextInput::make('category')->required()->label('Категория (Необязательно)'), + ]), + Forms\Components\Textarea::make('preview_text')->required()->label('Текст анонса') + ->required() + ->columnSpanFull(), + Forms\Components\Toggle::make('is_active')->required()->label('Активно')->default(true), + ]), + Tabs\Tab::make('Содержание выставки') + ->schema([ + \Filament\Forms\Components\Builder::make('content')->label('')->blocks([ + Builder\Block::make('heading')->label('Заголовок') + ->schema([ + TextInput::make('id')->hidden()->integer()->default(rand(2335235,324634264263426)), + TextInput::make('content') + ->label('') + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) { + }), + ]), + Builder\Block::make('paragraph') + ->schema([ + RichEditor::make('content') + ->toolbarButtons([ + 'blockquote', + 'bold', + 'bulletList', + 'italic', + 'link', + 'orderedList', + 'redo', + 'strike', + 'underline', + 'undo', + ]) + ->label('') + ->required() - Forms\Components\Textarea::make('preview_text')->required()->label('Текст анонса') - ->required() - ->columnSpanFull(), + ]), + Builder\Block::make('image') + ->schema([ + FileUpload::make('url') + ->label('Изображение(-я)') + ->image() + ->multiple() + ->reorderable() + ->maxFiles(5) + ->disk('public') + ->directory('images') + ->imageEditor() + ->required(), + TextInput::make('alt') + ->label('Описание') + ->placeholder('Необязяательно') + ])->label('Изображение(-я)'), + Builder\Block::make('video') + ->schema([ + Hidden::make('mime'), - Section::make('Контент')->schema([ - \Filament\Forms\Components\Builder::make('content')->label('')->blocks([ - Builder\Block::make('heading')->label('Заголовок') - ->schema([ - TextInput::make('id')->hidden()->integer()->default(rand(2335235,324634264263426)), - TextInput::make('content') - ->label('') - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) { - }), + TextInput::make('title') + ->required() + ->maxLength(255) + ->autofocus(), + + FileUpload::make('path') + ->required() + ->acceptedFileTypes(['video/mp4','video/ogg','video/webm']) + ->maxSize(512000) + ->disk('videos') + ->visibility('public') + ->afterStateUpdated(fn (callable $set, $state) => $set('mime', $state?->getMimeType())), + ]), + Builder\Block::make('files') + ->schema([ + TextInput::make('title') + ->required() + ->maxLength(255) + ->autofocus(), + FileUpload::make('path') + ->required() + ->acceptedFileTypes([ + 'application/pdf', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/zip' + ]) + ->maxSize(512000) + ->disk('public') + ->directory('files') + ->downloadable() + ->visibility('public') + ]) + ]) + ->collapsed() + ->blockNumbers(false) + ->collapsible() + ->addActionLabel('Добавить новый блок'), + ]), ]), - Builder\Block::make('paragraph') - ->schema([ - RichEditor::make('content') - ->toolbarButtons([ - 'blockquote', - 'bold', - 'bulletList', - 'italic', - 'link', - 'orderedList', - 'redo', - 'strike', - 'underline', - 'undo', - ]) - ->label('') - ->required() + ]), - ]), - Builder\Block::make('image') - ->schema([ - FileUpload::make('url') - ->label('Изображение(-я)') - ->image() - ->multiple() - ->reorderable() - ->maxFiles(5) - ->disk('public') - ->directory('images') - ->imageEditor() - ->required(), - TextInput::make('alt') - ->label('Описание') - ->placeholder('Необязяательно') - ])->label('Изображение(-я)'), - Builder\Block::make('video') - ->schema([ - Hidden::make('mime'), - - TextInput::make('title') - ->required() - ->maxLength(255) - ->autofocus(), - - FileUpload::make('path') - ->required() - ->acceptedFileTypes(['video/mp4','video/ogg','video/webm']) - ->maxSize(512000) - ->disk('videos') - ->visibility('public') - ->afterStateUpdated(fn (callable $set, $state) => $set('mime', $state?->getMimeType())), - ]), - Builder\Block::make('files') - ->schema([ - TextInput::make('title') - ->required() - ->maxLength(255) - ->autofocus(), - FileUpload::make('path') - ->required() - ->acceptedFileTypes([ - 'application/pdf', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'application/zip' - ]) - ->maxSize(512000) - ->disk('public') - ->directory('files') - ->downloadable() - ->visibility('public') - ]) - ]) - ->collapsed() - ->blockNumbers(false) - ->collapsible() - ->addActionLabel('Добавить новый блок'), - - ]), - Forms\Components\Toggle::make('is_active')->required()->label('Активная заметка')->default(true), ]); } diff --git a/app/Http/Controllers/ClientDivisionController.php b/app/Http/Controllers/ClientDivisionController.php index 4ecaa73..24e7c1d 100644 --- a/app/Http/Controllers/ClientDivisionController.php +++ b/app/Http/Controllers/ClientDivisionController.php @@ -18,7 +18,7 @@ class ClientDivisionController extends Controller public function show(string $slug) { $divisions = DivisionResource::collection(Division::query()->where('is_active', true)->get()); - $division = new DivisionResource(Division::with('workers.userDetail')->where('is_active', true)->where('slug', $slug)->first()); + $division = new DivisionResource(Division::with('workers.userDetail')->where('is_active', true)->where('slug', $slug)->firstOrFail()); $seo = $division->seo; return Inertia::render('Client/Divisions/Show', compact('divisions', 'division', 'seo')); } diff --git a/resources/js/Components/PersonCards/ClientDepartmentTeacherCard.vue b/resources/js/Components/PersonCards/ClientDepartmentTeacherCard.vue index 2451304..586461d 100644 --- a/resources/js/Components/PersonCards/ClientDepartmentTeacherCard.vue +++ b/resources/js/Components/PersonCards/ClientDepartmentTeacherCard.vue @@ -2,7 +2,7 @@
- Image Description + Image Description
{{ teacher.position }}: {{ teacher.name }} diff --git a/resources/js/Components/PersonCards/ClientDepartmentWorkerCard.vue b/resources/js/Components/PersonCards/ClientDepartmentWorkerCard.vue index b55de5b..a5ec820 100644 --- a/resources/js/Components/PersonCards/ClientDepartmentWorkerCard.vue +++ b/resources/js/Components/PersonCards/ClientDepartmentWorkerCard.vue @@ -2,7 +2,7 @@
- Image Description + Image Description
{{ worker.position }}: {{ worker.name }} diff --git a/resources/js/Components/PersonCards/ClientDivisionWorkerCard.vue b/resources/js/Components/PersonCards/ClientDivisionWorkerCard.vue index 80349ed..ed0085b 100644 --- a/resources/js/Components/PersonCards/ClientDivisionWorkerCard.vue +++ b/resources/js/Components/PersonCards/ClientDivisionWorkerCard.vue @@ -2,7 +2,7 @@
- Image Description + Image Description
{{ worker.administrativePosition }}: {{ worker.name }} diff --git a/resources/js/Components/PersonCards/ClientFacultyWorkerCard.vue b/resources/js/Components/PersonCards/ClientFacultyWorkerCard.vue index 979e6ba..d4f135f 100644 --- a/resources/js/Components/PersonCards/ClientFacultyWorkerCard.vue +++ b/resources/js/Components/PersonCards/ClientFacultyWorkerCard.vue @@ -2,7 +2,7 @@
- Image Description + Image Description
{{ worker.position }}: {{ worker.name }} diff --git a/resources/js/Pages/Client/Persons/Show.vue b/resources/js/Pages/Client/Persons/Show.vue index 9113ce6..7eca170 100644 --- a/resources/js/Pages/Client/Persons/Show.vue +++ b/resources/js/Pages/Client/Persons/Show.vue @@ -16,7 +16,7 @@
- +

{{ person.data.name }}