50% OFF - Ocean Patchwork DIY Kit – Premium, Everyday Comfort, Was $59, Save 49%

$29.99
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ 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 = "41879951-dedf-41cd-b3e4-c2a85734ac0a"; // 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 == 'b3ec1563-2957-49fb-ae95-5662b0f94560' && 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: "b3ec1563-2957-49fb-ae95-5662b0f94560", 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);
Style🎁Buy 2 Free Shipping:  🐢 Sea Turtle
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description

❤️TIPS: Our goods are authentic, 100% Made in USA, counterfeit must be investigated! Customers, please identify our products!

SHIPPING WORLDWIDE. 
💯Payments Via PayPal® and CreditCard.
⭐Fast refund Guarantee>> Partial or full refund depends on the situation.

🎁Don't forget to buy some for your family or friends as it's a unique gift idea.❤️❤️❤️


🌊 Bring a Little Piece of the Ocean Home

Slow down, choose each fabric piece, and watch soft coastal colors come together beneath your hands. 🧵🐚

With every detail, the Ocean Patchwork DIY Kit becomes more than a craft—it becomes a quiet escape, a handmade memory, and a little piece of the sea that is completely yours. 💙

Display it in your favorite coastal corner, gift it to someone who misses the ocean, or keep it as a reminder of peaceful days by the water. ✨

Your own little piece of the ocean is waiting to be made. 🐚💙

Create Your Own Handmade Sea-Inspired Fabric Art

Bring the calm beauty of the ocean into your home with the Ocean Patchwork DIY Kit — a relaxing handmade craft kit designed to turn layered fabric pieces into a stunning sea life decoration.

Inspired by ocean waves, coral reefs, seashells, pearls, and shimmering blue waters, each design is created with rich fabric textures, detailed stitching effects, and elegant coastal colors. From graceful sea turtles to dreamy jellyfish, playful dolphins, majestic whales, and charming octopus designs, every finished piece feels like a little piece of the sea made by your own hands.

Whether displayed by a window, on a porch, in a craft room, or as part of coastal home décor, this kit creates a beautiful handmade accent full of texture, color, and personality.

🌊 Handmade Ocean Beauty, One Fabric Piece at a Time

This is not an ordinary flat decoration.

Each design features layered fabric pieces arranged into a dimensional patchwork artwork. The ocean-inspired blue, teal, ivory, gold, and sandy tones create a soft coastal feeling, while the stitched outlines and raised fabric layers make the finished piece look detailed, premium, and handmade.

The result is a decoration that feels artistic, calming, and full of life — perfect for anyone who loves the ocean, crafting, or meaningful home décor.

🐢 Choose Your Favorite Sea Creature

The Ocean Patchwork series includes beautifully detailed sea-inspired designs such as:

Sea Turtle
Whale
Dolphin
Shark
Crab
Octopus
Jellyfish
Seahorse
Otter
Lionfish

Each design has its own personality, making it easy to collect more than one or gift different styles to different people.

✨ A Relaxing DIY Project with a Beautiful Result

Enjoy a calm, satisfying crafting experience as you build your sea creature layer by layer. The kit is designed to be enjoyable for beginners while still feeling rewarding for experienced crafters.

As you work, the fabric textures, ocean colors, and small decorative details slowly come together into a finished piece you will actually want to display — not hide away after crafting.

It is a creative escape, a screen-free activity, and a beautiful finished decoration all in one.

🪡 Designed for Texture, Detail & Handmade Charm

Every piece is designed to feel rich and dimensional:

Layered ocean-tone fabric pieces
Raised patchwork-style surface
Gold thread-inspired detailing
Soft ivory coral and shell accents
Pearl-like decorative touches
Beautiful stitched-edge effect
Premium coastal blue color palette
Finished look suitable for home display

The finished artwork has the charm of handmade quilting, the elegance of coastal décor, and the emotional value of something made by hand.

🏡 Perfect for Windows, Porches & Coastal Home Décor

Display your finished piece anywhere that needs a soft ocean touch:

By a sunny window
On a porch or covered entryway
In a beach house or coastal bedroom
In a craft room or studio
On a gallery wall
Above a desk, shelf, or reading corner
As seasonal summer décor
As a handmade gift display

The blue ocean palette makes it easy to style with white, wood, rattan, linen, shells, plants, and coastal home accents.

🎁 A Thoughtful Gift for Ocean Lovers & Crafters

This kit makes a beautiful gift for people who love handmade projects, beach vacations, sea animals, coastal décor, or relaxing creative hobbies.

Perfect for:

Ocean lovers
DIY craft lovers
Moms, grandmothers, daughters, and friends
Beach house owners
Quilters and sewing lovers
Summer birthday gifts
Mother’s Day gifts
Housewarming gifts
Relaxing weekend craft projects

It is more than a craft kit — it is a meaningful handmade keepsake they can proudly display.

🌊 Make the Ocean Part of Your Home

With every fabric piece you place, every stitch-like detail you add, and every ocean color that comes together, the Ocean Patchwork DIY Kit becomes more than a decoration.

It becomes a quiet creative moment.
A handmade piece of coastal beauty.
A little reminder of the sea — made by you.

🎁Package Includes

  • 1 x   🌊Ocean Patchwork DIY Kit

❤️Thank you very much for visiting our store. Have a nice shopping day❤️

⚡️Stock Sells Fast!⚡️ - get yours today!

It will sell out fast, Enjoy a discount now!!⚡Please make sure to buy enough quantity before we increase the price!!!🔥

Click On "ADD TO CART" To Get Yours Now!

Certification

✈WORLDWIDE SHIPPING✈

💖 No Extra Tax, Shipping Calculated at Checkout.
🚢 Shipping>>Worldwide Express Shipping Available.

WHY US?

  • We have Quality Control department which help us to keep our promise!

  • Price is Always Competitive.

  • Awesome Customer Service.

  • Amazing products along with High Quality.

  • Read reviews from our lovely customers.

OUR GUARANTEE

📦Insured Worldwide Shipping: Each order includes real-time tracking details and insurance coverage in the unlikely event that a package gets lost or stolen in transit.

💰Money-Back Guarantee: If your items arrive damaged within 90 days of normal usage, we will gladly issue out a replacement or refund.

✉️24/7 Customer Support: We have a team of live reps ready to help and answer any questions you have within a 24-hour time frame, 7 days a week.

🔒Safe & Secure Checkouts: We use state-of-the-art SSL Secure encryption to keep your personal and financial information 100% protected.

🔒100% Risk-Free Purchase: If you bought it and felt that it is not for you, don't worry. Just hit the Contact us button and send us a message, and we will make it right by offering you a replacement or refund. 100% Simple & Risk-Free process.