refactor educational components and API routes; update form handling in various actions and Vue components, enhance user interface for form display, and improve data retrieval logic in CreateAdmissionPlan job

This commit is contained in:
F4ilji
2025-07-27 12:52:04 +05:00
parent 9a1fcbbf9d
commit a4bdde6382
20 changed files with 961 additions and 72 deletions
+12 -3
View File
@@ -142,12 +142,21 @@ class PageForm
->label('Скрыть хлебные крошки')
->helperText('Скрывает навигационную цепочку вверху страницы')
->columnSpan(1),
Select::make('settings.custom_form')->label('Прикрепить форму для страницы')
])
->columns(2),
Section::make('Отображение плавающей формы на странице')
->description('Управление плавающей формой на странице')
->collapsible()
->schema([
Select::make('settings.form.id')->label('Прикрепить форму для страницы')
->searchable()
->preload()
->options(CustomForm::query()
->where('status', CustomFormStatus::PUBLISHED)->pluck('title', 'form_id'))
->columnSpanFull()
->columnSpanFull(),
Textinput::make('settings.form.title')->label('Заголовок плавающего окна'),
Textinput::make('settings.form.description')->label('Описание плавающего окна'),
Textinput::make('settings.form.button')->label('Текст кнопки'),
])
->columns(2),
]),
@@ -155,4 +164,4 @@ class PageForm
])
]);
}
}
}
@@ -4,6 +4,7 @@ namespace App\Filament\Resources\AdmissionCampaignResource\Pages;
use App\Filament\Resources\AdmissionCampaignResource;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
class EditAdmissionCampaign extends EditRecord
@@ -13,6 +14,50 @@ class EditAdmissionCampaign extends EditRecord
protected function getHeaderActions(): array
{
return [
Actions\Action::make('fetchData') // Кастомная кнопка
->label('Обновить данные о местах набора')
->color('primary') // Цвет кнопки
->icon('heroicon-o-arrow-path') // Иконка
->action(function () {
// Отправляем запрос в фоновом режиме
$this->js(<<<JS
fetch('/api/get-admission-plans-data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
}
})
.then(response => response.json())
.then(() => {
// Показываем уведомление об успешном завершении
window.dispatchEvent(new CustomEvent('filament-notify', {
detail: {
type: 'success',
title: 'Данные обновлены',
body: 'Данные успешно обновлены.'
}
}));
})
.catch(() => {
// Показываем уведомление об ошибке
window.dispatchEvent(new CustomEvent('filament-notify', {
detail: {
type: 'danger',
title: 'Ошибка',
body: 'Произошла ошибка при обновлении данных.'
}
}));
});
JS);
// Показываем уведомление
Notification::make()
->title('Данные обновляются')
->body('Данные обновляются в фоновом режиме.')
->success()
->send();
}),
Actions\DeleteAction::make(),
];
}