chengwl пре 5 дана
родитељ
комит
c58ba3961f

+ 9 - 16
packages/Longyi/Core/src/Http/Controllers/Admin/FlexibleVariantController.php

@@ -667,34 +667,27 @@ class FlexibleVariantController extends Controller
      *   2. All resulting Media IDs (new + existing) are synced into
      *      the product_variant_images pivot table with position order.
      */
-    public function syncVariantImages(int $id, Request $request): JsonResponse
+    public function syncVariantImages( Request $request): JsonResponse
     {
         $this->validate($request, [
-            'media_ids'   => 'array',
-            'media_ids.*' => 'integer|exists:media,id',
-            'uploads'     => 'array',
-            'uploads.*'   => 'image|max:5120',
+            'variant_ids'   => 'array',
+            'variant_ids.*' => 'required|exists:product_variants,id',
+            'media_id' => 'integer|exists:media,id',
+            'file' => 'image|max:5120',
         ]);
 
-        $variant = ProductVariant::findOrFail($id);
+        $variant = ProductVariant::findOrFail($request->variant_ids);
 
         $mediaIds = collect($request->input('media_ids', []));
 
         if ($request->hasFile('uploads')) {
             foreach ($request->file('uploads') as $file) {
-                $media = $variant
-                    ->addMedia($file)
-                    ->toMediaCollection(ProductVariant::IMAGES_COLLECTION);
-
-                $mediaIds->push($media->id);
+                $media = $variant->addMedia($file)->toMediaCollection(ProductVariant::IMAGES_COLLECTION);
+                $variant->variantImages()->attach($media->id, ['position' => 0]);
             }
         }
 
-        $syncData = $mediaIds->values()->mapWithKeys(
-            fn ($mediaId, $i) => [$mediaId => ['position' => $i]]
-        );
-
-        $variant->variantImages()->sync($syncData);
+        $variant->variantImages()->sync($mediaIds->toArray());
 
         return response()->json([
             'success' => true,

+ 3 - 3
packages/Longyi/Core/src/Routes/admin-routes.php

@@ -32,9 +32,9 @@ Route::group(['middleware' => ['admin']], function () {
             Route::post('{id}/save-variants', [FlexibleVariantController::class, 'saveVariants'])->name('admin.flexible_variant.variants.save-variants');
             Route::put('/{id}', [FlexibleVariantController::class, 'updateVariant'])->name('admin.flexible_variant.variants.update');
             Route::delete('/{id}', [FlexibleVariantController::class, 'deleteVariant'])->name('admin.flexible_variant.variants.destroy');
-            Route::post('/{id}/images', [FlexibleVariantController::class, 'syncVariantImages'])->name('admin.flexible_variant.variants.images.sync');
-            Route::post('/{id}/images/upload', [FlexibleVariantController::class, 'uploadVariantImage'])->name('admin.flexible_variant.variants.images.upload');
-            Route::delete('/{id}/images/{mediaId}', [FlexibleVariantController::class, 'removeVariantImage'])->name('admin.flexible_variant.variants.images.remove');
+            Route::post('/images', [FlexibleVariantController::class, 'syncVariantImages'])->name('admin.flexible_variant.variants.images.sync');
+            Route::post('/images/upload', [FlexibleVariantController::class, 'uploadVariantImage'])->name('admin.flexible_variant.variants.images.upload');
+            Route::delete('/images/{mediaId}', [FlexibleVariantController::class, 'removeVariantImage'])->name('admin.flexible_variant.variants.images.remove');
 
             // Bulk operations
             Route::post('/bulk/quantities', [FlexibleVariantController::class, 'bulkUpdateQuantities'])->name('admin.flexible_variant.variants.bulk.quantities');