소스 검색

Upload photos for products

Alexander Musikhin 2 일 전
부모
커밋
c9c4e94142
3개의 변경된 파일40개의 추가작업 그리고 4개의 파일을 삭제
  1. 23 0
      app/Http/Controllers/ProductController.php
  2. 16 4
      resources/views/catalog/edit.blade.php
  3. 1 0
      routes/web.php

+ 23 - 0
app/Http/Controllers/ProductController.php

@@ -172,5 +172,28 @@ class ProductController extends Controller
         return redirect()->route('catalog.show', ['product' => $product, 'previous_url' => $request->get('previous_url')]);
     }
 
+    public function uploadThumbnail(Request $request, Product $product): RedirectResponse
+    {
+        $request->validate([
+            'thumbnail' => 'required|file|mimes:jpg,jpeg|max:5120',
+        ]);
+
+        $file = $request->file('thumbnail');
+        $filename = $product->article . '.0000.0000.jpg';
+        $destinationPath = public_path('images/main');
+
+        // Удаляем старый файл если существует
+        $oldFilePath = $destinationPath . '/' . $filename;
+        if (file_exists($oldFilePath)) {
+            unlink($oldFilePath);
+        }
+
+        // Сохраняем новый файл
+        $file->move($destinationPath, $filename);
+
+        return redirect()->route('catalog.show', ['product' => $product, 'previous_url' => $request->get('previous_url')])
+            ->with('success', 'Миниатюра успешно загружена');
+    }
+
 
 }

+ 16 - 4
resources/views/catalog/edit.blade.php

@@ -3,12 +3,24 @@
 @section('content')
     <div class="px-3">
         <div class="row mb-2">
-            <div class="col-6">
-                <h3>МАФ {{ $product->common_name ?? 'Новый МАФ' }}</h3>
+            <div class="col-6 d-flex align-items-center">
+                <h3 class="mb-0">МАФ {{ $product->common_name ?? 'Новый МАФ' }}</h3>
             </div>
-            <div class="col-6 text-end">
+            <div class="col-6 text-end d-flex align-items-center justify-content-end gap-2">
                 @if(isset($product) && hasRole('admin'))
-                     <button class="btn btn-sm text-success" onclick="$('#upl-cert').trigger('click');"><i class="bi bi-plus-circle-fill"></i> Загрузить сертификат</button>
+                    @if($product->image)
+                        <a href="{{ $product->image }}" data-toggle="lightbox" data-gallery="photos" data-size="fullscreen">
+                            <img src="{{ $product->image }}" alt="Миниатюра" class="img-thumbnail" style="max-height: 40px;">
+                        </a>
+                    @endif
+                    <button class="btn btn-sm text-success" onclick="$('#upl-thumb').trigger('click');" title="Загрузить изображение"><i class="bi bi-image"></i> Изображение</button>
+
+                    <form action="{{ route('catalog.upload-thumbnail', ['product' => $product, 'previous_url' => $previous_url ?? '']) }}" class="visually-hidden" method="POST" enctype="multipart/form-data">
+                        @csrf
+                        <input type="file" name="thumbnail" accept=".jpg,.jpeg" onchange="$(this).parent().submit()" required id="upl-thumb" />
+                    </form>
+
+                    <button class="btn btn-sm text-success" onclick="$('#upl-cert').trigger('click');"><i class="bi bi-plus-circle-fill"></i> Загрузить сертификат</button>
 
                     <form action="{{ route('catalog.upload-certificate', ['product' => $product, 'previous_url' => $previous_url ?? '']) }}" class="visually-hidden" method="POST" enctype="multipart/form-data">
                         @csrf

+ 1 - 0
routes/web.php

@@ -146,6 +146,7 @@ Route::middleware('auth:web')->group(function () {
         Route::post('order/{order}/upload-statement', [OrderController::class, 'uploadStatement'])->name('order.upload-statement');
 
         Route::post('catalog/{product}/upload-certificate', [ProductController::class, 'uploadCertificate'])->name('catalog.upload-certificate');
+        Route::post('catalog/{product}/upload-thumbnail', [ProductController::class, 'uploadThumbnail'])->name('catalog.upload-thumbnail');
         Route::post('product_sku/{product_sku}/upload-passport', [ProductSKUController::class, 'uploadPassport'])->name('product-sku.upload-passport');
 
         Route::get('order/generate-installation-pack/{order}', [OrderController::class, 'generateInstallationPack'])->name('order.generate-installation-pack');