Bläddra i källkod

修改赠品中商品sku中逗号问题

llp 1 vecka sedan
förälder
incheckning
87ddf2ad56
1 ändrade filer med 13 tillägg och 1 borttagningar
  1. 13 1
      packages/Longyi/FreeGift/src/Models/FreeGiftRule.php

+ 13 - 1
packages/Longyi/FreeGift/src/Models/FreeGiftRule.php

@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Support\Facades\Storage;
 use Longyi\FreeGift\Config\Gift;
 use Longyi\FreeGift\Contracts\FreeGiftRule as FreeGiftRuleContract;
+use Longyi\FreeGift\Services\GiftProductResolver;
 use Webkul\CartRule\Models\CartRule;
 
 /**
@@ -78,6 +79,11 @@ class FreeGiftRule extends Model implements FreeGiftRuleContract
     /**
      * 赠品 SKU 列表。
      *
+     * `sku` 是「逗号分隔多个 SKU」,但**商品 SKU 自身也可能含逗号**:
+     * 多件套商品就是 `LD--13*4Wig--24,LB--5*7Wig--RTG--20` 这样的 SKU,
+     * 直接 explode 会被拆成两个不存在的 SKU,赠品永远解析不到商品。
+     * 所以先拿整串去匹配商品/变体,命中就当成一个 SKU;否则才按逗号拆。
+     *
      * @return string[]
      */
     public function skuList(): array
@@ -86,7 +92,13 @@ class FreeGiftRule extends Model implements FreeGiftRuleContract
             return [];
         }
 
-        return array_values(array_filter(array_map('trim', explode(',', $this->sku))));
+        $whole = trim((string) $this->sku);
+
+        if (str_contains($whole, ',') && app(GiftProductResolver::class)->resolve($whole)) {
+            return [$whole];
+        }
+
+        return array_values(array_filter(array_map('trim', explode(',', $whole))));
     }
 
     /**