|
|
@@ -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))));
|
|
|
}
|
|
|
|
|
|
/**
|