diff --git a/app/Filament/Components/Forms/ItemForm/Pages/ContentBuilderItem.php b/app/Filament/Components/Forms/ItemForm/Pages/ContentBuilderItem.php index ccdad15..b5cea3a 100644 --- a/app/Filament/Components/Forms/ItemForm/Pages/ContentBuilderItem.php +++ b/app/Filament/Components/Forms/ItemForm/Pages/ContentBuilderItem.php @@ -6,6 +6,7 @@ use App\Enums\CustomFormStatus; use App\Enums\PostStatus; use App\Helpers\ByteConverter; use App\Models\Category; +use App\Models\ContactWidget; use App\Models\CustomForm; use App\Models\Page; use App\Models\PageReferenceList; @@ -407,6 +408,13 @@ class ContentBuilderItem ->searchable() ->required(), ])->label('Ресурсы'), + Builder\Block::make('contact') + ->schema([ + Select::make('contact') + ->options(ContactWidget::query()->where('is_active', true)->pluck('title', 'slug')) + ->searchable() + ->required(), + ])->label('Контакты'), ]) ->collapsed() ->blockNumbers(false) diff --git a/app/Http/Controllers/ClientWidgetContactController.php b/app/Http/Controllers/ClientWidgetContactController.php new file mode 100644 index 0000000..7727195 --- /dev/null +++ b/app/Http/Controllers/ClientWidgetContactController.php @@ -0,0 +1,16 @@ +where('slug', $slug)->first()); + } +} diff --git a/app/Http/Resources/ClientContactWidgetResource.php b/app/Http/Resources/ClientContactWidgetResource.php new file mode 100644 index 0000000..1477d59 --- /dev/null +++ b/app/Http/Resources/ClientContactWidgetResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray(Request $request): array + { + return parent::toArray($request); + } +} diff --git a/resources/js/Components/BaseComponents/BaseBuilderUi/BaseBuilder.vue b/resources/js/Components/BaseComponents/BaseBuilderUi/BaseBuilder.vue index 41b1390..17256e1 100644 --- a/resources/js/Components/BaseComponents/BaseBuilderUi/BaseBuilder.vue +++ b/resources/js/Components/BaseComponents/BaseBuilderUi/BaseBuilder.vue @@ -41,6 +41,7 @@ export default { pageItem: () => import('@/Components/BuilderUi/Pages/Blocks/PageItemBlock.vue'), customForm: () => import('@/Components/BuilderUi/Pages/Blocks/FormBlock.vue'), pageResourceList: () => import('@/Components/BuilderUi/Pages/Blocks/PageResourceList.vue'), + contact: () => import('@/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactSectionBlock.vue'), }; // Создайте массив промисов для загрузки всех компонентов @@ -66,6 +67,7 @@ export default { pageItem: () => import('@/Components/BuilderUi/Pages/Blocks/PageItemBlock.vue'), customForm: () => import('@/Components/BuilderUi/Pages/Blocks/FormBlock.vue'), pageResourceList: () => import('@/Components/BuilderUi/Pages/Blocks/PageResourceList.vue'), + contact: () => import('@/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactSectionBlock.vue'), }; return defineAsyncComponent(componentMap[type] || null); }, diff --git a/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactGroup.vue b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactGroup.vue new file mode 100644 index 0000000..ed0d882 --- /dev/null +++ b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactGroup.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactSectionBlock.vue b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactSectionBlock.vue new file mode 100644 index 0000000..960267e --- /dev/null +++ b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/Contacts/ContactSectionBlock.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/PageResourceList.vue b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/PageResourceList.vue index 15207d2..7bdee6f 100644 --- a/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/PageResourceList.vue +++ b/resources/js/Components/BaseComponents/BaseBuilderUi/Blocks/PageResourceList.vue @@ -8,6 +8,7 @@ +
@@ -66,7 +67,7 @@ export default { }, methods: { getResource(id) { - axios.get(route('client.widget.page.resource.index', id)) + axios.get(route('client.widget.page.resource.show', id)) .then(response => { this.resource = response.data; this.loading = false; // Установить состояние загрузки в false diff --git a/resources/js/Components/BuilderUi/Pages/Blocks/PageResourceList.vue b/resources/js/Components/BuilderUi/Pages/Blocks/PageResourceList.vue index 15207d2..355f4dc 100644 --- a/resources/js/Components/BuilderUi/Pages/Blocks/PageResourceList.vue +++ b/resources/js/Components/BuilderUi/Pages/Blocks/PageResourceList.vue @@ -1,21 +1,38 @@