✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
2 / 12
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
✨Last Day 70% OFF Women's Orthopedic Sandals✨
50% OFF
Save $40.00
mysite

✨Last Day 70% OFF Women's Orthopedic Sandals✨

🔥Order now to enjoy discounted prices before tariffs are set to rise🔥

$39.98 $79.98
343 sold
Color
Size(US)
Qty

Returns>> Fast refund,100% Money Back Guarantee
 

    

  • Is the joint pain making like frustrating? In most cases the problem is deep rooted at the base of your body: your feet. Having a weak imbalance can potentially lead to imbalances in the knees, hips and muscles.

 

  • 3-ARCH SUPPORT

    The Sandal corrects posture and eliminates muscle imbalances by balancing your feet at the perfect angle its original position to realign skeleton positioning.

    Simply, slip them on and snug your feet in place around the toe clasp for enhanced support.

    It's lightweight; but with a wedge design, you can walk more steadily & stand for hours without any strain or imbalance.

    PERFECT FOR ALL-DAY ACTIVITIES

    Helps Control, Stabilize & Balance the Foot. Heat Moldable for a Custom Fit. Absorbs Shock & Reduces Friction to Improve Overall Foot Comfort.

    Model display

    ADVANTAGES

    • Great shock absorption soles: Make your walk more steadily & stand for hours, without any strain or imbalance.
    • Reduces Pain: Eliminate the pain caused by flat feet, poor walking posture, and plantar fasciitis.
    • Posture Correction: Straighten your hips, correct kick knees, and muscle imbalance by adjusting the structure of your feet.

    PERFECT FOR ALL-DAY ACTIVITIES

         

  • #1 | Premium Quality | Confortable | Arch Suppport | Softsole

EASY SIZING:

SPECIFICATION:

  • Upper Material: Fly woven
  • Heel Height: About 3cm
  • Shoe Width: Medium
  • Sole Hardness: Soft
  • Season: All seasons
  • Occasion: Casual, Travel, Daily
  • Features: Non-slip, Antibacterial, Deodorization, Quick dry

Why Choose Us?

  • We work directly with manufacturers all over the world to ensure the best quality of our products. We have a Quality Control department which helps us to keep our promise!

  • Price is always competitive.
  • Awesome Customer Service
  • Amazing products along with High Quality
  • Read reviews from our lovely customers

CLICK ADD TO CART TO GET YOURS NOW! 

Limited Items Available In Stock! Not Sold In Stores

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 or become defective within 30 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.

Thank you for shopping at shoeeszone.

Shipping Policy

The shipment we choose is Yanwen / Yuntu, and it’s the fastest shipment worldwide.
Express shipping delivery date take 12-20 Working Days(USA)

How long does shipping take?

Shipment delivery time by destination:

US/ CANADA/ Europe Shipment: 12 - 20 Working Days

All Other Countries: 20 - 40 Working Days

Return Policy

100% Delivery Guarantee. We have a 30-day return policy. For more details see Shipping & Returns. Also, make sure that all original tags are attached, original packaging is intact and there are no signs of wear on any of the shoes. Be sure to check out the Engagement FAQ's section for more details on the Engagement return policy. Any questions or helps, pls email service@reejoinwell.com.co or message us.

/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1759048033660').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);
const TAG = 'spz-custom-add-to-cart'; class SpzCustomAddToCart extends SPZ.BaseElement { constructor(element) { super(element); this.plugin_timestamp = Date.now(); this.defaultColorConfig = { module_bg: "#FFFFFF", button_bg: "#E84926", button_color: "#FFFFFF", text_color: "#202020", price_color: "#E84926", border_color: "#E6E6E6", border_bg: "#FFFFFF", round_size: '4' }; this.config = this.defaultColorConfig; this.originStickyTop = 0; this.qty = 1; this.variantId = this.element.getAttribute('variant-id'); this.trackMap = { qty: this.trackQty.bind(this), variant: this.trackVariant.bind(this), addToCart: this.trackAddtoCart.bind(this), atcView: this.trackAtcView.bind(this), } this.isHasView = false; this.isFirstUpdateVariant=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.locale_ = SPZServices.localeFor(this.win); this.setupAction_(); } mountCallback() { // 初始化 this.init(); } async init() { // 如果不是详情页,不需要执行后面js if (window.SHOP_PARAMS.template_type !== '1') return; await this.setLocale(); this.handleIsRender(); this.bingEvents(); } bingEvents() { // 设备切换 重新渲染 window.addEventListener('resize', SPZCore.Types.debounce( this.win, (invocation) => { // 关闭弹窗, 解决切换屏幕尺寸不能滚动的问题 this.triggerEvent_('closeShopModal'); this.config = { ...this.config, isMobile: window.innerWidth < 768 ? true : false, position: window.innerWidth < 768 ? 'down' : this.config.display_position }; this.renderAddToCart(); }, 200 )) } // 获取多语言 async setLocale() { let data; try { //多语言 data = await this.locale_.i18n(['product', 'products']); } catch (error) { console.error(error); } this.i18n = { 'sold_out': 'Sold out', 'add_to_cart': 'Add to cart', 'unavailable': 'Unavailable', 'product_unavailable': 'Product is unavailable.', ...data?.product?.product_detail, ...data?.products?.product, } } getProductData() { let pJson = document.querySelector('#product-json'); if (pJson) { return JSON.parse(pJson.innerHTML)?.product; } else if (typeof $ === 'function') { return $(document).data('djproduct')?.product; } return undefined; } getAddCartBtn() { return document.querySelector('[data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="buyNow"], [data-section-type="product_detail"] [role="buyNow"], [data-section-type="product"] [data-click="addToCart"], [data-section-type="product"] [role="addToCart"], [data-section-type="product"] [data-click="buyNow"], [data-section-type="product"] [role="buyNow"]'); } handleObserver() { if(this.config.trigger_condition == 'theme_hidden') { const $addCartBtn = this.getAddCartBtn(); if($addCartBtn) { // 配置了加购/购买按钮; 设置按钮为observer观察目标 $addCartBtn.setAttribute('id', 'app-atc-need-sticky-buttons') } } } findAncestor(node, selector) { while (node) { if (node.querySelector(selector)) { return node; } node = node.parentElement; } return null; } getThemeProductInfoForm() { let $themeForm = ''; const $themeProductInfo = document.querySelector('[data-section-type="product_detail"], [data-section-type="product"]'); $themeForm = $themeProductInfo?.querySelector('form'); return $themeForm; } // 获取主题商品加购数量 getThemeQuantity() { let $themeForm = this.getThemeProductInfoForm(); if($themeForm) { const formData = new FormData($themeForm); const quantity = formData.get('quantity'); return quantity; } else { return null; } } getThemeInitVariantsData() { const $themeForm = this.getThemeProductInfoForm(); const formData = new FormData($themeForm); } // 获取主题初始表单数据 getThemeProductFormData = () => { const $themeForm = this.getThemeProductInfoForm(); if($themeForm) { const form_data = new FormData($themeForm); const form_data_format = {} for (const [key, value] of form_data) { form_data_format[key] = value; } return form_data_format; } else { return null; } } brightnessByColor(c) { let color = '' + c, isHEX = c.indexOf('#') == 0, isRGB = c.indexOf('rgb') == 0; let r, g, b; if (isHEX) { var m = color.substr(1).match(color.length == 7 ? /(\S{2})/g : /(\S{1})/g); if (m) { (r = parseInt(m[0], 16)), (g = parseInt(m[1], 16)), (b = parseInt(m[2], 16)); } } if (isRGB) { const m = color.match(/^rgba\((\d+),\s*(\d+),\s*(\d+),(\d+)\)$/); if (m) { (r = m[1]), (g = m[2]), (b = m[3]); } } if (typeof r != 'undefined') return (r * 299 + g * 587 + b * 114) / 1000; }; getSelectedVariant() { const product = this.getProductData(); return product.variants.find(item => item.id == this.variantId); } setSelectedOption(product) { const selectedVariant = this.getSelectedVariant(); const productData = Object.assign({}, product); // 处理下拉选项 productData?.options?.forEach(option => { option.selectList = []; option.values?.forEach(value => { let selectStatus = ''; selectedVariant?.options?.forEach(item => { if(item.name == option.name && item.value == value) { selectStatus = 'checked'; } }) option.selectList.push({name: option.name, value: value, checked: selectStatus}); }) }) return productData; } getSelectedSkuText() { const selectVariant = this.getSelectedVariant(); if(!selectVariant) { return ''; } const selectList = selectVariant.options; for (var i = 0; i < selectList.length; i++) { selectList[i].value = selectVariant[`option${i + 1}`]; } const selectedSkuText = selectList .map( item => { return item.value; }) .join('/'); return selectedSkuText; } // 是否展示 加购弹窗 getIsButtonClickInfo() { const product = this.getProductData(); const isMultipleProduct = product.available && !product.has_only_default_variant; // 多款式商品 const isButtonClickInfo = this.config.isMobile && (this.config.style_mobile === "mb_simple" || this.config.style_mobile === "mb_circle") && this.config.button_click_mobile === 'info' && isMultipleProduct; return isButtonClickInfo; } // 是否跟随主题的加购数量 isFollowThemeQty (移动端 simple、circle模版、 PC端 simple模版加购数量从主题获取) getIsFollowThemeQty() { const followThemeQtyMobile = (this.config.style_mobile === "mb_simple" || this.config.style_mobile === "mb_circle") && this.config.isMobile; const followThemeQtyPc = this.config.style === "simple" && !this.config.isMobile; const isFollowThemeQty = (followThemeQtyPc || followThemeQtyMobile) ? true : false; return isFollowThemeQty; } getBannerRenderData() { const product = this.getProductData(); // 当前选中变体 const selectedVariant = this.getSelectedVariant(); // 变体options下拉列表数据处理 const productData = this.setSelectedOption(product); // 选中的sku文案 const selectedSkuText = this.getSelectedSkuText(); // 是否展示 加购弹窗 const is_button_click_info = this.getIsButtonClickInfo(); // 主题是否有配置加购/购买按钮 const isHasAddCartBtn = this.getAddCartBtn() ? true : false; // 加购数量是否跟随主题 const isFollowThemeQty = this.getIsFollowThemeQty(); // 浅色背景颜色配置 const brightness = this.brightnessByColor(this.config.module_bg); const isDarkBg = brightness < 115; const renderData = { product: { ...productData, config: {...this.config}, selectedVariant, selectedSkuText, }, config: this.config, qty: this.qty, variant: selectedVariant, selectedVariant, selectedSkuText, is_button_click_info, isDarkBg, isHasAddCartBtn, isFollowThemeQty, i18n: this.i18n }; return renderData; } // render add_to_cart async renderAll() { const renderData = this.getBannerRenderData(); this.triggerEvent_('renderBanner', renderData); } getConfigData() { return fetch(`/api/add-to-cart-config`).then(res => { return res.json(); }); } async getConfig() { if(!this.config.hasOwnProperty('open_status')) { const res = await this.getConfigData(); if (res.state === 0 && res.data.open_status) { // config数据转化 this.transConfigData(res.data); } } return this.config; } transConfigData(data) { const resConfig = data; this.config = { ...this.config, ...resConfig, isMobile: window.innerWidth < 768 ? true : false, position: window.innerWidth < 768 ? 'down' : resConfig.display_position }; // 颜色跟随系统时 if(resConfig.color_setting === 'default' || resConfig.color_setting === 'theme') { this.config = { ...this.config, ...this.defaultColorConfig } } } // 是否应用到商店 async handleIsRender() { const res = await this.getConfigData(); if (res.state === 0 && res.data.open_status) { // config数据转化 this.transConfigData(res.data); this.handleObserver(); // 渲染加购内容 this.renderAddToCart(); } } renderAddToCart() { const product = this.getProductData(); if (product.product_type === 'gift_card') return ; if (!product.available) return; this.renderAll(); } // 选择变体 上报 trackVariant() { const product = this.getProductData(); window.sa && sa.track('plugin_atc_variant_click', { product_id: product.id, style: this.config.style, style_mobile: this.config.style_mobile }); } // 更改数量上报 trackQty() { const product = this.getProductData(); window.sa && sa.track('plugin_atc_qty_click', { product_id: product.id, style: this.config.style, style_mobile: this.config.style_mobile }); } // 加购上报 trackAddtoCart() { const product = this.getProductData(); let properties = ''; let source = 'atc'; if (this.config.button_action === 'checkout') { source = 'buy_now'; } const obj = { product_id: product.id, style: this.config.style, style_mobile: this.config.style_mobile, button_action: this.config.button_action, plugin_timestamp: this.plugin_timestamp }; const options = { product_id: product.id, variant_id: this.variantId, quantity: this.qty, source, variant: this.getSelectedVariant(), product: product, process: (window.SHOP_PARAMS.product_settings || {}).add_to_cart_process, properties: properties } // 注册曝光参数到add_to_cart事件 window.spzutm && window.spzutm.registerParams('add_to_cart', { add_to_cart: JSON.stringify(obj) }); window.sa && sa.track('plugin_atc_button_click', obj); this.trackHookAddTocart(); } trackAtcView() { const product = this.getProductData() if(!this.isHasView) { sa.track('plugin_atc_view', { product_id: product.id, button_action: this.config.button_action, style: this.config.style, style_mobile: this.config.style_mobile, plugin_timestamp: this.plugin_timestamp }); this.isHasView = true; } } trackHookAddTocart(options) { //FLASH及之后主题trigger事件上报采用HOOK window.djInterceptors && window.djInterceptors.track && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { id: options.product_id, number: options.quantity, childrenId: options.variant.id, item_price: options.variant.price, name: options.product.title, type: options.variant.type ? options.variant.type : options.product.type, properties: properties, quantity: options.quantity, variant_id: options.variant.id, product_id: options.product_id, source: 'atc', process: options.process }, once: true }); } // 加购弹窗 renderShopModal_() { const renderData = this.getBannerRenderData(); this.triggerEvent_('showAddToCartModal', renderData); } showSuccessToast() { this.triggerEvent_('showAddToCartToast'); } updateSelectVariant = async(selectedVariant, product) => { const configData = await this.getConfig(); const productData = this.setSelectedOption(product); const selectedSkuText = this.getSelectedSkuText(); const renderData = { ...productData, selectedVariant, config: configData, selectedSkuText }; this.triggerEvent_('variantChange', renderData); const renderBannerData = this.getBannerRenderData(); if(renderBannerData.is_button_click_info && this.config.style_mobile === "mb_circle") { this.triggerEvent_('renderBannerClickInfo', renderBannerData); } } getUrlVariantId() { const urlParams = new URLSearchParams(window.location.search); const variantId = urlParams.get('variant'); return variantId; } // 商详页变体切换 djVariantChange(detail) { const product = this.getProductData(); // 是否为商详页当前商品 const isDetailProduct = product?.id === detail?.product?.id; if(!detail || !isDetailProduct) { return; } const selectVariant = detail.selected; // 更新变体id const variantId = selectVariant.id; const oldVariantId = this.variantId; if(variantId) { this.triggerEvent_('renderSelectedVariant'); if(oldVariantId !== variantId || !this.isFirstUpdateVariant) { this.isFirstUpdateVariant = true; this.variantId = variantId; this.updateSelectVariant(selectVariant, detail.product); } } else if(!variantId){ // 主题未选中变体 const isDisabledAtc = this.disabledAtc(); if(isDisabledAtc) { this.triggerEvent_('renderBannerNoSelectedVariant', { product: detail.product }); } } } // 不展示变体的模版 isHiddenVariantsTemplate() { return ((this.config.style_mobile === 'mb_circle' || this.config.style_mobile === 'mb_simple') && this.config.isMobile) || (this.config.style === 'simple' && !this.config.isMobile); } // 主题未选中变体 isUnSelectedThemeVariants() { // 不展示变体的模版 const formData = this.getThemeProductFormData(); return (formData && formData.hasOwnProperty('variant_id') && (!formData.variant_id || formData.variant_id === 'undefined')); } // 禁用加购 disabledAtc() { // 不展示变体的模版 const isHiddenVariantsTemplate = this.isHiddenVariantsTemplate(); const isUnSelectedThemeVariant = this.isUnSelectedThemeVariants(); return isHiddenVariantsTemplate && isUnSelectedThemeVariant; } // 滚动至主题变体处 scrollToThemeVariant() { const themeFormEl = this.getThemeProductInfoForm(); if(themeFormEl) { this.triggerEvent_('showUnSelectedVariantTips'); setTimeout(() => { themeFormEl.scrollIntoView({ behavior: 'smooth' }); }, 1000); } } async setupAction_() { // 上报处理 this.registerAction('saTrack', async(invocation) => { const data = invocation.args; // this.trackMap[data.type]?.(); }) // 更新variantId this.registerAction('updateVriantId', async(invocation) => { const data = invocation.args.data; if(data.variant_id && data.variant_id != 'undefined') { this.variantId = data.variant_id; } }) // 渲染弹窗加购&购买按钮 this.registerAction('renderShopModal', async(invocation) => { this.renderShopModal_(); }) this.registerAction('bannerExtraRender', async(invocation) => { const renderData = this.getBannerRenderData(); if(renderData.is_button_click_info && this.config.style_mobile === "mb_circle") { this.triggerEvent_('renderBannerClickInfo', renderData); } }) // 加购数量同步 this.registerAction('handleAddToCart', async(invocation) => { // 主题未选中变体 const isDisabledAtc = this.disabledAtc(); if(isDisabledAtc) { this.scrollToThemeVariant(); return; } const quantity = this.getThemeQuantity(); if(this.config.button_action === "checkout" ) { this.triggerEvent_('updateQty', { quantity: Number(quantity) || this.qty }); this.triggerEvent_('handleBuyNow'); } else { this.triggerEvent_('updateQty', { quantity: Number(quantity) || this.qty }); this.triggerEvent_('handleAtc'); } }) // 渲染弹窗加购&购买按钮 this.registerAction('handleFixedBanner', async(invocation) => { // 固定定位时, 触发ljs-sticky 组件showSticky方法,展示banner if(this.config.trigger_condition == 'fixed') { this.triggerEvent_('showBanner'); // this.trackAtcView(); } }) this.registerAction('handleVariantsRender', async(invocation) => { const data = invocation.args.data; // 主题未选中变体 const isDisabledAtc = this.disabledAtc(); if(isDisabledAtc) { this.triggerEvent_('renderBannerNoSelectedVariant', { product: data }); return; } this.triggerEvent_('renderSelectedVariant', { product: data }); this.triggerEvent_('variantChange', data); }) this.registerAction('handleShowErrorToast', async(invocation) => { const data = invocation.args.data; if(data?.message) { this.triggerEvent_('showAtcErrorToast', data); } }) } 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.LOGIC; } } SPZ.defineElement(TAG, SpzCustomAddToCart)