www.huayoubuy.com
Open in
urlscan Pro
104.17.246.119
Public Scan
Submitted URL: https://huayoubuy.com/
Effective URL: https://www.huayoubuy.com/
Submission: On June 22 via api from US — Scanned from CA
Effective URL: https://www.huayoubuy.com/
Submission: On June 22 via api from US — Scanned from CA
Form analysis
5 forms found in the DOMGET /search
<form action="/search" method="get" class="">
<div tabindex="-1" class="tw-flex tw-relative header__search">
<input autocomplete="off" name="q" type="text"
class="tw-w-full tw-flex-1 tw-h-10 tw-py-0 tw-pl-[14px] tw-pr-13 tw-bg-header-search tw-text-current tw-text-sm tw-leading-none tw-rounded-global tw-border-none tw-placeholder-current header__search-input" placeholder="Search...">
<button type="submit" class="tw-flex tw-items-center tw-px-[14px] tw-m-0 tw-bg-transparent tw-text-current tw-border-none tw-outline-none tw-cursor-pointer tw-h-full tw-absolute tw-right-0 header__search-icon" tabindex="-1"><svg class=""
width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M11.16 1a9.16 9.16 0 1 1 0 18.322A9.16 9.16 0 0 1 11.16 1zm0 1.629a7.532 7.532 0 1 0 0 15.064 7.532 7.532 0 0 0 0-15.064zm5.465 14.148 1.152-1.152L23 20.848 21.848 22l-5.223-5.223z" fill="currentColor"></path>
</svg></button>
<button type="button" class="tw-hidden tw-justify-center tw-items-center tw-pr-2 tw-pl-6 tw-m-0 tw-bg-transparent tw-text-header-color tw-border-none tw-outline-none tw-cursor-pointer header__search-close "><svg class="" width="14" height="14"
xmlns="http://www.w3.org/2000/svg">
<path d="m3 3 8.485 8.485m0-8.485L3 11.485" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"></path>
</svg></button>
</div>
</form>
GET /search
<form action="/search" method="get" class="">
<div tabindex="-1" class="tw-flex tw-relative header__search">
<input autocomplete="off" name="q" type="text"
class="tw-w-full tw-flex-1 tw-h-10 tw-py-0 tw-pl-[14px] tw-pr-13 tw-bg-header-search tw-text-current tw-text-sm tw-leading-none tw-rounded-global tw-border-none tw-placeholder-current header__search-input" placeholder="Search...">
<button type="submit" class="tw-flex tw-items-center tw-px-[14px] tw-m-0 tw-bg-transparent tw-text-current tw-border-none tw-outline-none tw-cursor-pointer tw-h-full tw-absolute tw-right-0 header__search-icon" tabindex="-1"><svg class=""
width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M11.16 1a9.16 9.16 0 1 1 0 18.322A9.16 9.16 0 0 1 11.16 1zm0 1.629a7.532 7.532 0 1 0 0 15.064 7.532 7.532 0 0 0 0-15.064zm5.465 14.148 1.152-1.152L23 20.848 21.848 22l-5.223-5.223z" fill="currentColor"></path>
</svg></button>
<button type="button" class="tw-hidden tw-justify-center tw-items-center tw-pr-2 tw-pl-6 tw-m-0 tw-bg-transparent tw-text-header-color tw-border-none tw-outline-none tw-cursor-pointer header__search-close "><svg class="" width="14" height="14"
xmlns="http://www.w3.org/2000/svg">
<path d="m3 3 8.485 8.485m0-8.485L3 11.485" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"></path>
</svg></button>
</div>
</form>
GET /search
<form action="/search" method="get" class="">
<div tabindex="-1" class="tw-flex tw-relative header__search">
<input autocomplete="off" name="q" type="text"
class="tw-w-full tw-flex-1 tw-h-10 tw-py-0 tw-pl-[14px] tw-pr-13 tw-bg-header-search tw-text-current tw-text-sm tw-leading-none tw-rounded-global tw-border-none tw-placeholder-current header__search-input" placeholder="Search...">
<button type="submit" class="tw-flex tw-items-center tw-px-[14px] tw-m-0 tw-bg-transparent tw-text-current tw-border-none tw-outline-none tw-cursor-pointer tw-h-full tw-absolute tw-right-0 header__search-icon" tabindex="-1"><svg class=""
width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M11.16 1a9.16 9.16 0 1 1 0 18.322A9.16 9.16 0 0 1 11.16 1zm0 1.629a7.532 7.532 0 1 0 0 15.064 7.532 7.532 0 0 0 0-15.064zm5.465 14.148 1.152-1.152L23 20.848 21.848 22l-5.223-5.223z" fill="currentColor"></path>
</svg></button>
<button type="button" class="tw-hidden tw-justify-center tw-items-center tw-pr-2 tw-pl-6 tw-m-0 tw-bg-transparent tw-text-header-color tw-border-none tw-outline-none tw-cursor-pointer header__search-close "><svg class="" width="14" height="14"
xmlns="http://www.w3.org/2000/svg">
<path d="m3 3 8.485 8.485m0-8.485L3 11.485" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"></path>
</svg></button>
</div>
</form>
<form class="">
<div class="zb-flex">
<a href="${product.url}?${toQuery({ aid: 'smart_recommend.2.' + data.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || data.scm || '', ssp: data.ssp || '' })}" impr="1" imprevt="1" class="zb-w-[132px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || data.scm || ''}" data-spm="${productIndex}"> <ljs-render layout="container" id="smart_cart_pop_image_${product.id}" template="smart_cart_pop_image_template" manual=""></ljs-render> </a>
<div class="zb-flex zb-flex-col zb-flex-grow zb-justify-between">
<div>
<div class="zb-line-clamp-2 zb-text-sm zb-mb-2">${product.title}</div> <ljs-render layout="container" id="smart_cart_pop_price_${product.id}" template="smart_cart_pop_price_template" manual=""></ljs-render>
</div>
<div>
<div class="zb-relative zb-w-full zb-cursor-pointer">
<div class="zb-border zb-border-solid zb-border-[#eee] zb-px-3 zb-py-[10px] zb-flex zb-items-center zb-justify-between zb-font-semibold zb-text-sm zb-rounded-sm"
@tap="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);smart_cart_pop_variant_${product.id}_mobile.toggleClass(class=zb-hidden);smart_cart_pop_variant_${product.id}_pc.toggleClass(class=smart_cart_pop_variant_pc_show,force=true);smart_cart_pop_variant_modal_${product.id}.open"
spz-if="${!!(product.options && product.options.length && product.options.length > 0) && data.config.variant_select_visible}"> <ljs-render manual="" layout="container" id="smart_cart_pop_variant_text_${product.id}"
template="smart_cart_pop_variant_text_template"></ljs-render> <svg id="smart_pop_variant-select-${product.id}" width="12" height="8" class="zb-ml-2" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M6.00002 7.06738C6.19244 7.06775 6.38498 6.99453 6.5318 6.84772C6.54504 6.83447 6.55769 6.82086 6.56973 6.8069L11.1251 2.25152C11.418 1.95863 11.418 1.48375 11.1251 1.19086C10.8322 0.897968 10.3573 0.897968 10.0645 1.19086L6.00003 5.25529L1.9356 1.19086C1.64271 0.897968 1.16784 0.897968 0.874943 1.19086C0.58205 1.48375 0.58205 1.95863 0.874943 2.25152L5.43033 6.8069C5.44237 6.82086 5.45502 6.83447 5.46826 6.84772C5.61507 6.99453 5.8076 7.06775 6.00002 7.06738Z"
fill="#0A1533"></path>
</svg> </div> <ljs-lightbox layout="nodisplay" disable-unmount="" class="smart_cart_pop_lightbox_pc" id="smart_cart_pop_variant_modal_${product.id}" @close="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);">
<div id="smart_cart_pop_variant_${product.id}_pc" class="zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template"
onclick="event.stopPropagation()" disabled-dj-event="" interference=""> </ljs-variants></div>
</ljs-lightbox>
</div>
<div class="zb-mt-3"> <button product-id="${product.id}" id="smart_cart_pop_atc_btn_${product.id}"
class="zb-flex zb-items-center zb-justify-center zb-w-full zb-text-white zb-py-[10px] zb-h-9 zb-text-xs zb-font-normal zb-border-none zb-rounded-[4px] smart_cart_pop_atc_btn_bg" type="button" role="addToCart"
@tap="smart_cart_pop_loading_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_btn_${product.id}.toggleClass(class=zb-pointer-events-none);custom-func.addATCHook(activity_id='${data.id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${product.scm || data.scm}',ssp='${data.ssp}',spm='${data.spmBase}.${productIndex}')">
<ljs-render layout="container" id="smart_cart_pop_atc_${product.id}" template="smart_cart_pop_atc_template" mamual="" class="notranslate"> </ljs-render>
<div id="smart_cart_pop_added_${product.id}" class="zb-hidden"><span class="zb-flex zb-justify-center zb-gap-1"><svg width="14" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8 16.5006C3.58171 16.5006 0 12.9183 0 8.5C0 4.08171 3.58171 0.5 8 0.5C12.4183 0.5 16 4.08171 16 8.5C16 12.9183 12.4183 16.5006 8 16.5006ZM8 2.04344C4.21314 2.04344 1.54287 4.71371 1.54287 8.50057C1.54287 12.2874 4.21314 14.9577 8 14.9577C11.7869 14.9577 14.4571 12.2874 14.4571 8.50057C14.4571 4.71371 11.7869 2.04344 8 2.04344ZM7.26057 11.1909L7.12229 11.3286L7.09543 11.3017C7.02286 11.336 6.94286 11.3577 6.85714 11.3577C6.73543 11.3577 6.62857 11.3109 6.536 11.2463L6.52229 11.2594L6.45371 11.1909C6.45314 11.1903 6.45314 11.1903 6.45257 11.1897L4.09771 8.83486L4.90629 8.02686L6.85714 9.97771L11.1629 5.67143L11.9714 6.48L7.26171 11.1897C7.26114 11.1903 7.26114 11.1903 7.26057 11.1909Z"
fill="white"></path>
</svg>Added</span></div>
<div id="smart_cart_pop_loading_${product.id}" class="zb-hidden">
<div class="smart_cart_pop_loading"></div>
</div>
</button> </div>
</div>
</div>
</div>
<div id="smart_cart_pop_variant_${product.id}_mobile" class="zb-hidden md:zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template" onclick="event.stopPropagation()"
disabled-dj-event="" interference=""> </ljs-variants></div>
</form>
POST //translate.googleapis.com/translate_voting?client=te
<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text"
name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form>
Text Content
* 🔥🔥UP TO 50% OFF🎁 Free Shipping Over £60 🎁 * 🔥🔥UP TO 50% OFF🎁 Free Shipping Over £60 🎁 * 🔥🔥UP TO 50% OFF🎁 Free Shipping Over £60 🎁 * 🔥🔥UP TO 50% OFF🎁 Free Shipping Over £60 🎁 Powered by Translate English,Deutsch,Italiano,Français,Español,简体中文 USD * Euro (EUR) * United States Dollars (USD) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Israeli New Shekel (NIS) HUAYOUBUY * Home * TOPS * Shoes * ACCESSORIES * HOT * More links ACCESSORIES HOT English,Deutsch,Italiano,Français,Español,简体中文 USD * Euro (EUR) * United States Dollars (USD) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Israeli New Shekel (NIS) * Log in * Create an account 0 Close * Home * TOPS * Shoes * ACCESSORIES * HOT Log in English,Deutsch,Italiano,Français,Español,简体中文 USD * Euro (EUR) * United States Dollars (USD) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Israeli New Shekel (NIS) * 1 * 2 BEST SELLING BEST SELLING DRESS SHIRTS SHOES ACCESSORIES HOT $1.75 Elegant Double Layer Beaded Imitation Pearl Hoop Earrings $1.75 $4.99 Save $3.24 $1.40 Boho Natural Turquoise Heart Pattern Necklace Sweater Chain Ethnic Vintage Jewelry $1.40 $3.99 Save $2.59 $1.75 Women Breathable Non-padded Strapless Full Cup Bandeau $1.75 $4.99 Save $3.24 $1.40 1pair Women Cute Smiley Warmth Terry Socks $1.40 $3.99 1pair Women Cute Smiley Warmth Terry Socks $1.40 $3.99 Save $2.59 COUNTDOWN SALE 00 Days 17 Hours : 55 Minutes : 25 Seconds In order to give feedback to new and old users, our specially launches limited-time promotional products. View more BEST SELLING View all * SALE CASUAL KNITTED PLEATED BUCKLE LOOSE T-SHIRT $7.36 $19.99 -$12.63 * SALE LOOSE STRIPED ANCHOR CASUAL V NECK LONG SLEEVE T-SHIRT $8.76 $23.99 -$15.23 * SALE +3 ELEGANT COLOR-BLOCK HEART IMITATION PEARL RHINESTONE WINE GLASS HEEL MULES $17.51 $48.99 -$31.48 * SALE +1 KNITTED LOOSE SPAGHETTI CASUAL CAMI $6.29 $17.99 -$11.70 * SALE CASUAL ASYMMETRICAL NECK LOOSEN JERSEY SHORT SLEEVE T-SHIRT $7.35 $20.99 -$13.64 * SALE +3 CASUAL BUCKLE LOOSE LACE T-SHIRT $9.46 $25.99 -$16.53 * SALE +1 SQUARE NECK CASUAL LOOSE SHIRT $10.85 $30.99 -$20.14 * SALE COLORFUL PVC DOUBLE STRAPS RHINESTONE CHUNKY HEELED SANDALS $13.66 $37.99 -$24.33 * SALE CREW NECK JERSEY PINK LEAF CASUAL T-SHIRT $8.75 $24.99 -$16.24 * SALE PLAIN CASUAL THICK BOTTOM SANDAL $12.26 $33.99 -$21.73 * SALE FASHION FLORAL ULTRALIGHT BREATHABLE SPORTS CANVAS SHOES $11.91 $32.99 -$21.08 HOT IN T-SHIRTS $9.46 Lace Crochet Design Daily Plain Casual Crew Neck Loose H-Line Long Sleeve T-Shirt $9.46 $25.99 Save $16.53 $7.35 Casual Asymmetrical Neck Loosen Jersey Short Sleeve T-Shirt $7.35 $20.99 Save $13.64 $7.36 Asymmetrical Neck Buttoned Daily Plain Casual Loose H-Line Long Sleeve Shirt $7.36 $19.99 Save $12.63 $9.46 Casual Buckle Loose Lace T-Shirt $9.46 $25.99 Save $16.53 $8.75 Crew Neck Jersey Pink Leaf Casual T-Shirt $8.75 $24.99 Save $16.24 $8.51 Country Floral Printed Casual Loose Crew Neck Knit Long Sleeve T-Shirt $8.51 $23.25 Save $14.74 $10.15 Loose Square Neck Casual Floral Shirt $10.15 $28.99 Save $18.84 $10.16 Plain Embroidery Hollow Out Casual Loose 3/4 Sleeve Jacket $10.16 $27.99 Save $17.83 $9.11 Plain Crew Neck Casual Shirt $9.11 $24.99 Save $15.88 HOT IN SHOES $17.16 Metal Chain Clear Double Straps Chunky Heel Mule Sandals $17.16 $47.99 Save $30.83 $13.66 Colorful PVC Double Straps Rhinestone Chunky Heeled Sandals $13.66 $37.99 Save $24.33 $9.81 Women Casual Daily Comfy Bowknot Slip On Sandals $9.81 $26.99 Save $17.18 $8.76 Breathable Mesh Fabric Plain Hollow Out Slip On Casual Shallow Shoes $8.76 $23.99 Save $15.23 $8.06 Women Christmas Rhinestone Bow Comfy Flat Heel Shallow Shoes $8.06 $21.99 Save $13.93 $11.56 Pu Wedge Heel Casual Summer Sandal $11.56 $31.99 Save $20.43 $17.51 Elegant Color-block Heart Imitation Pearl Rhinestone Wine Glass Heel Mules $17.51 $48.99 Save $31.48 $14.36 White Romantic Lace Wearable Sole Flat Shoes $14.36 $39.99 Save $25.63 $12.61 Wedge Heel Summer Mesh Fabric Slide Sandals $12.61 $34.99 Save $22.38 RECOMMENDED FOR YOU View all * SALE LOOSE SQUARE NECK CASUAL FLORAL SHIRT $10.15 $28.99 -$18.84 * SALE +1 MESH BREATHABLE LIGHTWEIGHT RUNNING SHOES $3.86 $9.99 -$6.13 * SALE CASUAL LOOSE COTTON AND LINEN BLOUSE $12.26 $33.99 -$21.73 * SALE +2 VINTAGE FLORAL CASUAL WEDGE FLIP-FLOPS $11.21 $30.99 -$19.78 * SALE +1 ASYMMETRICAL NECK BUTTONED DAILY PLAIN CASUAL LOOSE H-LINE LONG SLEEVE SHIRT $7.36 $19.99 -$12.63 * SALE +3 ELEGANT COLOR-BLOCK HEART IMITATION PEARL RHINESTONE WINE GLASS HEEL MULES $17.51 $48.99 -$31.48 Subscribe today to hear first about our sales Subscribe Thanks for subscribing COMPANY INFO * About us * Privacy Policy * Terms of service CUSTOMER SERVICE * Contact Us * Shipping & Delivery * Return Policy * How To Track My Order WE ACCEPT American Express Apple Pay Mastercard PayPal Visa © 2024 huayoubuy About us Privacy Policy Terms of service SIGN UP AND SAVE Entice customers to sign up for your mailing list with discounts or exclusive offers. Include an image for extra impact. Subscribe Thanks for subscribing CART 111 GIFTS POINTS Item has been added ${(function(){ const products = data.products; const getDefaultVariant = function(product){ if (product.min_price_variant.available){ return product.min_price_variant; }else { const avail_variants = product.variants.filter(function(variant){ return variant.available; }); if (avail_variants.length) { return avail_variants[0]; } } }; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); const getDefaultTrackParams = function(product, index){ const variant = getDefaultVariant(product); const params = { aid: 'smart_recommend.2.' + data.id, scm: product.scm || data.scm || '', spm: data.spmBase + '.' + index, ssp: data.ssp || '', }; const trackParams = Object.keys(params).map(function(key){ return params[key]; }).join('__'); return trackParams; }; const hasMore = (data.products.length - data.target_top_product_num - data.page * data.limit) === 0; return ` ${(function(){ return ` ${data.config.pop_title} ${data.rebate_tips || ''} `; })()} ${product.title} Added `; })()} class SpzCustomComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this._atcLineItem = {}; this.cart_ = {}; this.top_product_ids_ = []; this.products_ = []; this.activityId_ = null; this.rendered_ = false; this.myInterceptor_ = null; this.i18n_ = {}; this.config_ = {}; this.page_ = 1; this.limit_ = 10; this.loading_ = false; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('pop mounted'); this.i18n_ = window.smartRecommendI18n && window.smartRecommendI18n[document.documentElement.lang || 'en-US'] || {}; const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const modalEl = document.getElementById("smart_cart_pop_modal"); const spmBase = `smart_recommend_2`; const extra = { spmBase: spmBase, i18n: this.i18n_, }; const that = this; document.addEventListener('dj.addToCart', (event) => { try { const e = event.detail; if (e.source === 'buy_now' || window.__upsell_block || this.rendered_) return; that.fetchActivityData({product_id: e.product_id, variant_id: e.variant_id}).then(data => { if (!data || !data.products || !data.products.length) return; that.config_ = data.config; const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` #plugin_recommend_atc_pop { display: none !important; } `; document.head.appendChild(recommendStyle); if (data.config.pop_frequency === 'once' && window.sessionStorage.getItem('smart_pop_times') > 0) return; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ api.render(Object.assign({}, data, extra), true).then(function() { that.rendered_ = true; if (data.products.length) { const headEl = document.getElementById("smart_cart_pop_head_render"); if (headEl) { SPZ.whenApiDefined(headEl).then(function(head){ head.render({ data: data }); }); } SPZ.whenApiDefined(modalEl).then(function(api){ that.impressListen('#smart_cart_pop_activity', function(){ that.trackPluginImpression_(data); }); api.open(); const intersectionObserver = new IntersectionObserver( function (entries) { if (entries[0].intersectionRatio > 0){ !that.loading_ && (that.products_.length - that.target_top_product_num_) === that.page_ * that.limit_ && that.viewMore(); } }, { threshold: [0.1] } ); intersectionObserver.observe( document.querySelector('#smart_cart_pop_view_more_text') ); }); } }) }); }) } catch (e) { console.error(e); } }); } unmountCallback() { } viewMore () { const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const that = this; const data = {}; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ that.fetchActivityData({ page: that.page_ + 1, limit: that.limit_ }).then(function(data) { data.products = that.products_; data.target_top_product_num = that.target_top_product_num_; data.i18n = that.i18n_; data.spmBase = `smart_recommend_2`; api.render(data); }) }) } fetchActivityData(data) { const that = this; if (data.product_id) { that._atcLineItem = data; } that.loading_ = true; return that.getCart().then(cart => { that.cart_ = cart.cart; return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_activities", { method: "POST", headers: { "Content-Type": "application/json", "store-id": window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ "show_type": 2, "line_item": { "product_id": that._atcLineItem.product_id, "variant_id": that._atcLineItem.variant_id, }, line_items: cart.cart.line_items, "page": data.page || 1, "limit": data.limit || 10, }) }).then(function(res){ if(res.ok){ return res.json(); } }).then(function(data){ data.cart = cart.cart; if (data.page === 1) { that.target_top_product_num_ = data.target_top_product_num || 0; } that.products_ = that.products_.concat(data.products || []); that.page_ = data.page || 1; that.limit_ = data.limit || 10; return data; }).catch(function(e){ console.log(e); }).finally(function(){ that.loading_ = false; }) }); }; setAction_() { this.registerAction('changeBannerColor', (data) => { if (!data.args.data || !data.args.data.data || !data.args.data.data.data) return false; const config = data.args.data.data.data.config; const bannerBgEl = document.querySelector('.smart_cart_pop_banner_bg'); if (bannerBgEl && config) { bannerBgEl.style.background = config.banner_bg_color; bannerBgEl.style.color = config.banner_text_color; } }); this.registerAction('handleProductChange', (data) => { const that = this; const imageEl = document.getElementById(`smart_cart_pop_image_${data.args.data.product_id}`); SPZ.whenApiDefined(imageEl).then(function(api){ api.render({ data: data.args.data, config: that.config_ }); }); const atcTextEl = document.getElementById(`smart_cart_pop_atc_${data.args.data.product_id}`); SPZ.whenApiDefined(atcTextEl).then(function(api){ api.render({ data: data.args.data, defaultText: data.args.defaultText, soldOutText: that.i18n_.sold_out }); }); if (data.args.data.variant.available) { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.remove('zb-pointer-events-none'); } else { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.add('zb-pointer-events-none'); } }); this.registerAction('handleProduct', (detail) => { const that = this; this.renderProductsForm_(detail.args.data.data); }); this.registerAction('addATCHook', (data) => { const params = data.args; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: 'smart_recommend.2.' + params.activity_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${params.spm}`, }, once: true }); }); this.registerAction('handleAtcSuccess', (detail) => { detail.args.data.product = detail.args.data.product || {}; detail.args.data.variant = detail.args.data.variant || {}; const defParams = detail.args.product.split('__'); const product_id = detail.args.data.product.id; const product_title = detail.args.data.product.title; const variant_id = detail.args.data.variant.id; const price = detail.args.data.variant.price; const aid = defParams[0]; const ifb = detail.args.data.product.ifb; const cfb = detail.args.data.product.cfb; const scm = defParams[1]; const spm = defParams[2]; const ssp = defParams[3]; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; const activity_id = `${detail.args.activity_id}`; const target_drive_way = detail.args.target_drive_way; document.getElementById(`smart_cart_pop_loading_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_added_${product_id}`).classList.remove('zb-hidden'); setTimeout(() => { document.getElementById(`smart_cart_pop_added_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_atc_${product_id}`).classList.remove('zb-hidden'); document.getElementById(`smart_cart_pop_atc_btn_${product_id}`).classList.remove('zb-pointer-events-none'); }, 1000); this.tranckAddToCart(params); if (target_drive_way === 'rebate') { const bannerEl = document.getElementById(`smart_cart_pop_banner`); this.getRecommendInfo(activity_id).then(res => { if (res && res.rebate_tips) { bannerEl.innerHTML = res.rebate_tips; } }) } }); this.registerAction('handleCartSummary', (event) => { const that = this; const checkoutButtonEle = document.getElementById("smart_cart_pop_checkout_button"); if (checkoutButtonEle) { SPZ.whenApiDefined(checkoutButtonEle).then(function(api){ api.render({ i18n: that.i18n_ }, false); }); } const tipEl = document.getElementById("smart_cart_pop_tip_info"); const cart = event && event.args && event.args.data && event.args.data.data; if (!tipEl || !cart) return; let total_price = cart.total_price; if (!total_price) { SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); } else { this.getBindDiscount_(cart.line_items).then(res => { if (res && res.discount_code){ const total = cart.line_price - cart.total_discount - res.bundle_discount_value; if (total > 0) { total_price = total; } else { total_price = 0; } } SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); }) } }); this.registerAction('open', () => { window.sessionStorage.setItem('smart_pop_times', Number(window.sessionStorage.getItem('smart_pop_times')) + 1); }); this.registerAction('close', () => { this.rendered_ = false; this.products_ = []; window.djInterceptors && window.djInterceptors.track.eject(this.myInterceptor_); }); } getCart() { return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/cart`, { method: 'GET', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, }).then(res => res.json()) } getRecommendInfo (activity_id) { return this.getCart().then(cart => { this.cart_ = cart.cart; return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/possum/recommend_info`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: JSON.stringify({ show_type: 2, rule_id: `${activity_id}`, line_items: cart.cart.line_items, line_item: this._atcLineItem, }) }).then(res => res.json()) }) } renderProductsForm_(data) { const products = data.products; const listPopRenderEl = document.getElementById("smart_cart_pop_render"); if (!listPopRenderEl) return; listPopRenderEl.querySelectorAll('.smart_cart_pop_atc_btn_bg').forEach(function(el){ el.style.background = data.config.add_to_cart_button_color; }); products.forEach(function(product){ const productId = product.id; const productFormEls = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]`); let variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_mobile ljs-variants`); if (window.innerWidth > 768) { variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_pc ljs-variants`); } productFormEls.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.setProduct(product); }); }); variantsEl.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.handleRender(product); }); }) }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } trackPluginImpression_(rule){ if (window.sa && window.sa.track) { window.sa.track("module_impressions", { aid: `smart_recommend.2.${rule.id}` }); } } getBindDiscount_(carts) { let bundle_sale_ids = []; try { bundle_sale_ids = sessionStorage['bundle_sale_ids'] && JSON.parse(sessionStorage['bundle_sale_ids']).filter((item, index, arr) => arr.indexOf(item, 0) === index).slice(-5); } catch (err) { console.error(err); } if (!carts.length) { Promise.resolve(); } return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/bundle-sales/cart`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', 'store-id': window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ cart: carts, action_type: 'cart', bundle_sale_ids }) }).then(res => res.json()) } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart', SpzCustomComponent); ${function(){ return ` ${data.data.rebate_tips || ''} `; }()} ${function(){ const getImageHeight = function(image){ const width = image.width || 500; const height = image.height || 500; const image_size = data.config.image_size || 0; let ratio = 0; if(image_size == 0){ ratio = (height / width).toFixed(2); }else if(image_size == 1){ ratio = 1.5; } return 132 * ratio; }; const image = data.data.variant.image || data.data.product.image; return ` `; }()} ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant = product.min_price_variant.available ? product.min_price_variant : avail_variants.length && avail_variants[0]; return ` ${option.name} ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` ${value} ` }).join("") } ` })()} ${(function(){ const variant = data.variant; return ` `; })()} ${(function(){ const variant = data.variant; return ` ${ variant.options.map(function(option){ return option.value; }).join("/") || 'Not exist' } `; })()} ${(function(){ const variant = data.data && data.data.variant; const defaultText = data.defaultText || 'Add To Cart'; const text = (!variant || variant.available) ? defaultText: data.soldOutText; return ` ${text} `; })()} ${(function(){ let cart = data; if(data.data) { cart = data.data; } return ` ${cart.item_count >=0 ? cart.item_count : '..'} `; })()} ${(function(){ return ` ${data.i18n.checkout} `; })()} Original text Rate this translation Your feedback will be used to help improve Google Translate