Sexy Bandeau Slim-Fit Lace Dress

$79.00
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "396122fd-5356-4e05-a49d-8e63da0f98bc"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '886c10a8-7cc1-4d0d-a5ee-05b8fea8259d' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "886c10a8-7cc1-4d0d-a5ee-05b8fea8259d", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
color:  Beige
Size:  S
Quantity

Description

Size Bust (cm) Waist (cm) Dress Length (cm)
S 84-90 66-72 120
M 88-94 70-76 121
L 92-98 74-80 122
XL 96-102 78-84 123
2XL 104-110 86-92 124
Measurement Notes: Flat measurement, error ±2cm. Lace sequin fabric with slight stretch, strapless anti-slip design, mermaid silhouette to highlight your curves, black rose decor adds romantic vibe.

✨ Product Overview

Step into romantic elegance with this delicate nude lace sequin mermaid midi dress, crafted for the modern woman who wants to blend soft femininity with sophisticated allure. Featuring a sleek strapless sweetheart neckline, intricate floral lace with shimmering sequin embellishments, a charming black rose accent at the bust, and a figure-hugging mermaid silhouette, this gown exudes timeless charm and delicate luxury. The soft nude hue complements all skin tones, while the lace and sequin details catch the light with every movement—perfect for making a gentle yet unforgettable entrance at weddings, date nights, and any special occasion where you want to feel ethereal and beautiful.

🌟 Key Features

  • Romantic Strapless Sweetheart Neckline: Classic strapless sweetheart design with a subtle anti-slip band, exposing your shoulders and collarbone for a soft, feminine look that stays securely in place.
  • Intricate Lace & Sequin Embellishments: Premium nude floral lace fabric adorned with tiny shimmering sequins, creating a delicate, luminous texture that adds a touch of glamour without being over-the-top.
  • Charming Black Rose Accent: A small, elegant black rose appliqué at the bust, adding a bold, romantic contrast and elevating the dress to a unique, eye-catching piece.
  • Figure-Hugging Mermaid Silhouette: Slim-fitting through the bodice and hips, flaring gently at the knees to create a classic mermaid shape that elongates your legs and accentuates your hourglass figure.
  • Soft Nude Hue: A warm, versatile nude color that flatters all skin tones, evoking softness, purity, and timeless elegance—ideal for bridal events, date nights, and daytime formal occasions.
  • Midi Length: A chic midi length that falls to the ankle, balancing femininity with practicality and making it versatile for both daytime and evening settings.

🧵 Product Details

  • Material: 95% Polyester, 5% Spandex (lace sequin fabric with soft nude lining)
  • Lining: Full polyester lining for modesty and comfort, preventing sheerness while maintaining the lace’s delicate texture.
  • Closure: Hidden back zipper with hook-and-eye closure for easy wear and a seamless, polished finish.
  • Neckline: Strapless sweetheart neckline with anti-slip band and black rose appliqué.
  • Sleeves: Sleeveless (strapless design).
  • Silhouette: Mermaid / fishtail midi silhouette (slim-fitting bodice + flared skirt).
  • Length: Midi length (approximately 120-124cm, varying by size), falling to the ankle.
  • Care Instructions: Hand wash cold / gentle machine wash, do not bleach, hang dry, low iron if needed (avoid ironing directly on sequins and lace).

🌆 Usage Scenarios

This versatile nude lace mermaid midi dress is made for every moment you want to feel ethereal and romantic:
  • Wedding Events & Bridal Occasions: The perfect choice for a bridal shower, rehearsal dinner, or wedding guest! Pair with delicate pearl jewelry and nude heels for a soft, romantic ensemble that honors the occasion with ethereal charm.
  • Romantic Date Nights & Anniversary Dinners: Wear with dainty gold jewelry and ankle strap heels for an intimate, head-turning dinner date. The soft nude hue and lace details exude romance and allure, making it the perfect “dreamy date dress.”
  • Cocktail Parties & Evening Events: Pair with a small clutch and strappy heels for a sophisticated look at cocktail parties, gallery openings, or evening events—you’ll exude delicate luxury and grace.
  • Prom & Graduation Balls: A stunning option for prom, graduation balls, or milestone celebrations—this dress will make you feel like a fairy-tale princess, with its lace texture and mermaid skirt adding gentle charm.
  • Holiday & Festive Events: The ideal Easter, Mother’s Day, or summer garden party dress! The soft nude hue and delicate lace are perfect for daytime festive celebrations, ensuring you stand out in photos and events.
  • Photo Shoots & Special Occasions: Photogenic design that captures breathtaking photos, making it the ideal dress for engagement shoots, birthday photoshoots, or any moment you want to look ethereal and timeless.

💡 Size & Fit Tips

  • Fit: True to size, with a stretchy bodycon fit. If you prefer a more relaxed fit through the bodice, we recommend sizing up.
  • Model Info: Model is 175cm/5'9" tall, wearing size S (bust 86cm/34", waist 66cm/26").
  • Measurement Note: All measurements are taken flat, please allow ±2cm error due to manual measurement. The lace fabric has a gentle stretch, so it will conform to your body while maintaining its delicate shape.
  • Length Note: The midi length is designed to fall to the ankle; for taller wearers, it may hit slightly above the ankle, while shorter wearers may find it grazes the top of the foot.

🛍️ Why Choose This Dress?

This nude lace sequin strapless mermaid midi dress isn’t just clothing—it’s a feeling. The delicate lace and shimmering sequins create a luminous, ethereal texture, the black rose accent adds a unique romantic touch, and the mermaid silhouette sculpts your figure to perfection. The soft nude hue makes it a timeless addition to your wardrobe—one you’ll reach for again and again for every special occasion where you want to feel soft, beautiful, and utterly unforgettable. Whether you’re walking down a wedding aisle, sharing a quiet dinner date, or celebrating a milestone, this dress will make you feel like the most ethereal version of yourself. It’s the ultimate statement gown for the woman who wants to embrace her soft, romantic side!