This commit is contained in:
2026-04-06 18:44:02 +05:00
commit d775fbb9ba
431 changed files with 31234 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
<div id="{{ $carousel_id }}" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner p-3">
@foreach ($items as $key => $productVariation)
<div class="carousel-item {{ $key == 0 ? 'active' : '' }}">
<div class="row w-100 h-100 mx-auto g-2 g-lg-5">
<div class="carousel-discount-img col-12 col-lg-6">
<a href="{{ route('product.show', $productVariation->product->slug) }}">
@if (isset($productVariation->main_image_url))
<img src="{{ asset($productVariation->main_image_url) }}" alt="{{ $productVariation->name }}">
@else
<div class="bg-light rounded d-flex align-items-center justify-content-center">
<i class="bi bi-image text-secondary"></i>
</div>
@endif
</a>
</div>
<div class="col-12 col-lg-6 d-flex flex-column gap-3">
<div class="row align-items-start g-3 carousel-discount-header">
<h1 class="col-10 fs-3">{{ $productVariation->name }}</h1>
<div class="col-2">
<div class="discount-badge">
-{{ $productVariation->discount_percent }}%
</div>
</div>
</div>
<p class="d-none d-lg-block">{{ Str::words($productVariation->product->description, 30, '...') }}</p>
<div class="carousel-price">
<div class="w-25 d-flex flex-column mx-auto">
<span class="original-price fs-4">{{ number_format($productVariation->old_price, 0, ',', ' ') }} </span>
<span class="discounted-price fs-2">{{ number_format($productVariation->price, 0, ',', ' ') }} </span>
</div>
</div>
<button class="btn btn-dark-green w-100 p-3 mt-auto">Подробнее... </button>
</div>
</div>
</div>
@endforeach
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>

View File

@@ -0,0 +1,58 @@
@php
$title = $title ?? 'Товары';
$carousel_id = $carousel_id ?? 'productCarousel';
$interval = $interval ?? 5000;
@endphp
@if($items->count())
<div class="container">
<h1 class="text-center mb-4 fw-medium fs-3">
<a class="text-decoration-none tw-text-dark-blue hover:tw-text-opacity-90" href="#">
{{ $title }}
</a>
</h1>
<div id="{{ $carousel_id }}" class="carousel carousel-dark slide" data-bs-ride="carousel">
<div class="carousel-inner">
@foreach($items as $key => $chunk)
<div class="carousel-item {{ $key === 0 ? 'active' : '' }}" data-bs-interval="{{ $interval }}">
<div class="row g-2 justify-content-center">
@foreach($chunk as $product)
@include('products.partials.product-card', compact('product'))
@endforeach
</div>
</div>
@endforeach
</div>
<!-- Индикаторы -->
@if($items->count() > 1)
<div class="carousel-indicators">
@foreach($items as $key => $chunk)
<button type="button"
data-bs-target="#{{ $carousel_id }}"
data-bs-slide-to="{{ $key }}"
class="{{ $key === 0 ? 'active' : '' }}"
aria-current="{{ $key === 0 ? 'true' : 'false' }}"
aria-label="Slide {{ $key + 1 }}">
</button>
@endforeach
</div>
@endif
<!-- Кнопки навигации -->
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
</div>
@else
<div class="container text-center">
<p class="text-muted">Товары не найдены</p>
</div>
@endif

View File

@@ -0,0 +1,58 @@
<div class="megamenu">
<div class="megamenu-grid">
@foreach($menuCategories as $category)
<div class="category-column">
<h5 class="tw-text-orange border-bottom pb-2 d-flex gap-2">
<img src="{{ $category->iconUrl }}" alt="{{ $category->name }}" class="object-fit-scale" height="20" width="20">
<a href="{{ $category->url }}" class="text-decoration-none tw-text-orange">
{{ $category->name }}
</a>
</h5>
<ul>
{{-- Подкатегории 1 уровня --}}
@foreach($category->children as $child)
@if($child->children->count() > 0)
{{-- Категория с подкатегориями --}}
<li class="fw-bold mt-2">
<a href="{{ $child->url }}" class="tw-text-orange text-decoration-none">
{{ $child->name }}
</a>
</li>
@foreach($child->children as $subChild)
<li>
<a href="{{ $subChild->url }}" class="text-decoration-none">
{{ $subChild->name }}
</a>
</li>
@endforeach
@else
{{-- Обычная категория --}}
<li>
<a href="{{ $child->url }}" class="text-decoration-none">
{{ $child->name }}
</a>
</li>
@endif
@endforeach
</ul>
</div>
@endforeach
</div>
{{-- Популярные бренды --}}
@if(isset($menuBrands) && $menuBrands->count() > 0)
<div class="row mt-4 pt-3 border-top">
<div class="col-12">
<p class="mb-2 fw-bold tw-text-light-gray">Популярные бренды:</p>
<div class="d-flex flex-wrap gap-3">
@foreach($menuBrands as $brand)
<a href=""
class="tw-text-light-gray text-decoration-none hover:text-orange">
{{ $brand->name }}
</a>
@endforeach
</div>
</div>
</div>
@endif
</div>

View File

@@ -0,0 +1,125 @@
<header class="tw-bg-dark-green pt-3 pb-3">
<div class="container">
<nav class="navbar navbar-expand-xl navbar-dark">
<div class="container-fluid px-0 align-items-center">
<a class="navbar-brand d-flex align-items-center gap-2 me-4 flex-shrink-0" href="/">
<img src="{{ asset('assets/images/logo/' . $menuContacts->logo) }}" alt="{{ $menuContacts->name }}" width="70" height="70">
<h3 class="fs-2 tw-text-light-gray p-0 m-0 text-uppercase">{{ $menuContacts->name }}</h3>
</a>
<button class="navbar-toggler ms-auto" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarTogglerHeader" aria-controls="navbarTogglerHeader" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse w-100" id="navbarTogglerHeader">
<div class="d-xl-flex w-100 align-items-center gap-3">
<ul class="navbar-nav flex-wrap flex-grow-1 mb-2 mb-xl-0 header-main-menu">
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('index') ? 'active' : '' }}" href="{{ route('index') }}">Главная</a>
</li>
<li class="nav-item dropdown-megamenu">
<a class="nav-link d-flex align-items-center justify-content-center {{ request()->routeIs('category.show') ? 'active' : '' }}"
href=""
id="catalogDropdown" role="button">
Каталог
<span class="dropdown-icon ms-1">
<img src="{{ asset('assets/images/icons/dropdown-arrow-svgrepo-com.svg') }}" alt="dropdown">
</span>
</a>
@include('partials.menu.catalog-megamenu')
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('about') ? 'active' : '' }}" href="{{ route('about') }}">О нас</a>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('contacts') ? 'active' : '' }}" href="{{ route('contacts') }}">Контакты</a>
</li>
</ul>
<div class="header-right d-flex align-items-center justify-content-between gap-2">
<form class="header-search d-flex position-relative" role="search" action="{{ route('search') }}" method="GET" onsubmit="return validateSearch()">
<input id="input_search" class="form-control" type="search"
name="q" placeholder="Поиск" value="{{ request('q') }}" required>
<button class="btn btn-orange p-0 action-btn" type="submit">
<img src="{{ asset('assets/images/icons/search-svgrepo-com.svg') }}" alt="Найти" class="header-icon">
</button>
</form>
@guest
<a href="{{ route('login') }}" class="btn btn-orange p-0 action-btn" title="Войти">
<img src="{{ asset('assets/images/icons/enter-svgrepo-com.svg') }}" alt="Войти" class="header-icon">
</a>
@endguest
@auth
@can('manage_cart')
<a href="{{ route('cart.index') }}" class="btn btn-orange p-0 action-btn position-relative" title="Корзина">
<img src="{{ asset('assets/images/icons/cart-svgrepo-com.svg') }}" alt="Корзина" class="header-icon">
<span class="cart-count position-absolute translate-middle badge rounded-pill bg-danger" style="font-size: 10px;">
{{ \App\Models\CartItem::getCount() }}
</span>
</a>
@endcan
<div class="d-none d-xl-block">
<div class="dropdown auth-dropdown">
<button class="btn btn-orange p-0 action-btn" type="button">
<img src="{{ asset('assets/images/icons/menu-svgrepo-com.svg') }}" alt="Меню" class="header-icon">
</button>
<div class="auth-dropdown-menu">
@can('cabinet_access')
<a href="" class="btn btn-orange p-0 action-btn" title="Личный кабинет">
<img src="{{ asset('assets/images/icons/user-svgrepo-com.svg') }}" alt="Кабинет" class="header-icon">
</a>
@endcan
@can('admin_access')
<a href="{{ route('admin.dashboard') }}" class="btn btn-orange p-0 action-btn" title="Панель управления">
<img src="{{ asset('assets/images/icons/settings-svgrepo-com.svg') }}" alt="Админка" class="header-icon">
</a>
@endcan
<form method="POST" action="{{ route('logout') }}" onsubmit="return confirm('Вы действительно хотите выйти?');">
@csrf
<button type="submit" class="btn btn-orange p-0 action-btn" title="Выйти">
<img src="{{ asset('assets/images/icons/logout-svgrepo-com.svg') }}" alt="Выйти" class="header-icon">
</button>
</form>
</div>
</div>
</div>
<div class="d-xl-none user-mobile-menu">
@can('cabinet_access')
<a href="" class="btn btn-orange p-0 action-btn" title="Личный кабинет">
<img src="{{ asset('assets/images/icons/user-svgrepo-com.svg') }}" alt="Кабинет" class="header-icon">
</a>
@endcan
@can('admin_access')
<a href="{{ route('admin.dashboard') }}" class="btn btn-orange p-0 action-btn" title="Панель управления">
<img src="{{ asset('assets/images/icons/settings-svgrepo-com.svg') }}" alt="Админка" class="header-icon">
</a>
@endcan
<form method="POST" action="{{ route('logout') }}" onsubmit="return confirm('Вы действительно хотите выйти?');">
@csrf
<button type="submit" class="btn btn-orange p-0 action-btn" title="Выйти">
<img src="{{ asset('assets/images/icons/logout-svgrepo-com.svg') }}" alt="Выйти" class="header-icon">
</button>
</form>
</div>
@endauth
</div>
</div>
</div>
</div>
</nav>
</div>
</header>