Women's Satin Zipper Printed Casual Suit

$39.99
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'c520cddf-34cd-469b-be29-b768ef45aab4'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = 'e6d00c30-9f86-4cc5-8b3b-2b657159f0df'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == 'e6d00c30-9f86-4cc5-8b3b-2b657159f0df' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = 'e6d00c30-9f86-4cc5-8b3b-2b657159f0df'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() {} unmountCallback() {} setupAction_() { this.registerAction('showAddToCartToast', () => { const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy') if(themeAddToCartToastEl) return const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
Color:  apricot
Size:  XS(US 4/UK 8/EU 36)
Quantity

Description

🌟 [New Arrival] Chic & Comfy! Women's Luxury Satin Zipper Print Casual Suit Set – The Ultimate "Effortless Cool" Look! 🌟
🔥 Hot Sell Alert! Elevate your street style game instantly with this stunning 2-piece set. Perfect for lazy weekends, coffee dates, or traveling in style! ✈️☕
Why You'll Love It:
  • 💎 Premium Silky Satin Fabric: Experience cloud-like comfort! Made from high-quality, breathable satin that feels incredibly smooth against your skin. It has a subtle, luxurious sheen that catches the light beautifully without being too flashy. No itching, no sticking – just pure comfort all day long!
  • 🎨 Unique Artistic Print: Stand out from the crowd! Features an exclusive, vibrant printed pattern that adds a touch of artistic flair to your wardrobe. The colors are rich and won't fade after washing.
  • 🤐 Stylish Zipper Detail: The jacket features a sleek, functional front zipper design. Wear it fully zipped for a sporty chic look, or leave it open over a cute crop top for a layered vibe. The collar stands up perfectly to frame your face!
  • 👖 Relaxed Fit Trousers: Comes with matching elastic-waist pants that offer a flattering, loose fit. They glide over your legs comfortably, making them perfect for lounging or running errands in style.
  • 👗 Versatile 2-Piece Set: Buy one, get endless outfits! Wear them together for a coordinated head-to-toe look, or mix and match the pieces with your existing jeans and tees.
📏 Size Guide: Available in XS, S, M, L, XL, XXL! (Model is wearing size S. Fits true to size. If you prefer a super oversized look, consider sizing up!) 👉 US 4-14 covered. Check our size chart in the images for the perfect fit!
🌈 Color: Beautiful Apricot (as shown) – A warm, soft tone that brightens your complexion!
🧼 Care Instructions: Machine wash cold on gentle cycle. Hang dry to maintain that silky shine. Do not bleach.
🎁 Perfect For: ✅ Daily Casual Wear ✅ Vacation & Resort Outfits ✅ Street Photography ✅ Loungewear that looks put-together ✅ Gift for yourself or bestie!
🚀 Limited Stock! Don't miss out on this trending set. Thousands sold already! Grab yours before it's gone!
🛒 Add to Cart Now & Get Ready to Turn Heads! 👇👇👇
(Promotion: Buy 2 get 10% OFF, Buy 3 get 15% OFF! Share with friends and save more!)

Tops Size:

 Size Length Bust Sleeve Length
CM inch CM inch CM inch
XS 62 24.4 95 37.4 58 22.8
S 63 24.8 99 39.0 61 24.0
M 64 25.2 104 40.9 62 24.4
L 65 25.6 109 42.9 63 24.8
XL 66 26.0 114 44.9 64 25.2
2XL 67 26.4 119 46.9 65 25.6
3XL 68 26.8 124 48.8 66 26.0

 Pants Size:

 Size Waist Hips Length
CM inch CM inch CM inch
XS 64 25.6 98 39.2 105 42.0
S 68 26.8 102 40.2 107 42.1
M 73 28.7 107 42.1 108 42.5
L 78 30.7 112 44.1 109 42.9
XL 83 32.7 117 46.1 110 43.3
2XL 88 34.6 122 48.0 111 43.7
3XL 93 36.6 127 50.0 112 44.1

*This data was obtained from manually measuring the product, it may be off by 1-2 CM.