2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
1 / 14
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG
0% OFF
weteis

2024 NOUVELLE MONTRE INTELLIGENTE MONTRE PERSONNALISÉE VISAGE SPORT ÉTANCHE BLUETOOTH APPEL SMARTWATCH ECG + PPG

€69.99
1 ventes
Couleur
Quantité
  • Si vous n'êtes pas satisfait des marchandises reçues, veuillez nous contacter dans les 15 jours suivant la réception, nous vous aiderons au mieux ! Ne vous inquiétez pas.
  • Garantie de remboursement rapide>> Remboursement partiel ou complet dépend de la situation.
  • Expédition>> Expédition express dans le monde entier disponible.
  • Temps de traitement>> Expédier le plus rapidement après le paiement.


 

FQA pour le tracker de fitness BW0408 >>

 

Q : Pourquoi la valeur de la pression artérielle est-elle déviée du sphygmomanomètre ?

A: L'écart entre la valeur de mesure de la montre et le sphygmomanomètre est déterminé par une variété de facteurs. Le site de mesure du sphygmomanomètre se trouve dans l'artère radiale et le site de mesure de la montre correspond aux deux branches principales de l'artériole. Normalement, la mesure de la pression artérielle aortique et les mesures de la pression artérielle artériole varient de trois à quarante ; si vous utilisez une montre et un tensiomètre pour mesurer en même temps, car le sang circule dans l'artère en direction de la centrifugeuse, le tensiomètre mesure les sangles pour que la partie inférieure de votre coude soit sous pression. Le sang temporaire ne peut pas s'écouler en douceur vers la branche de l'artère en dessous et la tension vasculaire est augmentée, ce qui rendra les valeurs de mesure de la pression artérielle supérieure et inférieure plus biaisées.

 

Q : Pourquoi la montre ne peut-elle pas recevoir le message push ?

R :Paramètres du téléphone Android1. Confirmez que le bouton poussoir de message est activé sur le client mobile.2. Le message de confirmation peut s'afficher normalement dans la barre de notification du téléphone portable. La poussée du message de la montre est poussée en lisant le message de la barre de notification du téléphone mobile ; s'il n'y a pas de message dans la barre de notification du téléphone portable, la montre ne pourra pas recevoir le push (besoin de trouver le paramètre de notification dans les paramètres du téléphone, ouvrir WeChat, téléphone QQ, SMS, notification bouton du client mobile)3. Ouvrez les paramètres de la fonction auxiliaire du client du bracelet (voir la fonction auxiliaire dans les paramètres du téléphone et ouvrez les paramètres de la fonction auxiliaire du client du bracelet)

Paramètres du téléphone Apple :1. Confirmez que le bouton poussoir de message est activé sur le client mobile.2. le message de confirmation peut être affiché normalement dans la barre de notification du téléphone mobile (besoin de trouver les paramètres de notification dans les paramètres du téléphone, ouvrir WeChat, téléphone QQ, SMS, commutateur de notification du client de téléphone mobile)

 

Q :Pourquoi le podomètre ne compte-t-il pas les pas alors que j'ai déjà commencé à marcher ?

A:Pour réduire les erreurs, la montre intelligente définit généralement une valeur initiale de 10, elle comptera les pas lorsque nous marcherons plus de 10 pas. L'APP affichera les étapes de marche réelles et commencera à compter à partir de l'étape 10.

 

Q : Quelle application est utilisée lors de la connexion à un smartphone ?

R : L'application est conçue par le fournisseur. Vous pouvez scanner le code QR sur l'emballage ou le manuel pour le télécharger lorsque vous recevez l'article.

 

Q : Pourquoi l'appareil ne peut pas démarrer ou démarrer correctement ?

R : Veuillez charger votre nouvel appareil pendant au moins 10 minutes ou plus avant la première utilisation, cela garantit un démarrage normal de l'appareil et un fonctionnement optimal. Pour les appareils équipés de batteries amovibles, assurez-vous qu'elles sont correctement installées avant de les charger.

 

Q : Impossible de trouver l'appareil lors de l'appairage de l'appareil ?

R : Veuillez vous assurer que la distance entre le téléphone et l'appareil est inférieure à 0,5 m.

Veuillez vous assurer que l'appareil n'est pas sous batterie faible. S'il y a toujours un problème après 1,5 heure de charge, veuillez nous contacter.

 

Q : Vous ne pouvez pas connecter l'appareil avec l'application ?

A:Certains services Bluetooth de téléphone intelligent seront anormaux lors du redémarrage. Veuillez redémarrer le téléphone intelligent pour appairer l'appareil.

 

Q : Pourquoi la déconnexion mobile Android ?

A: la gestion de la mémoire du système de téléphonie mobile Android sera forcée d'éteindre l'application d'arrière-plan, vous devez désactiver le mode d'économie d'énergie ou tirer l'application dans le fond vert de ménage ayatem à l'intérieur, l'application ne sera pas forcée de se fermer. l'application doit être fonctionnant en arrière-plan, le Bluetooth ne se déconnectera pas automatiquement.

 

Q : Pourquoi n'ai-je pas pu connecter le Bluetooth ?

R:1. Veuillez d'abord télécharger l'application

2. Recherchez le nom Bluetooth sur votre APP, puis connectez-le.

3. Vous pouvez voir la demande de connexion sur le téléphone, cliquez sur "jumeler".

Si vous aviez déjà connecté le Bluetooth, veuillez effacer tous les appareils Bluetooth de votre téléphone.

 

Q:La montre est-elle étanche ?

R : BW0408 est résistant aux éclaboussures et à la transpiration, il est donc bon pendant que vous faites du sport. Mais tu ne peux pas nager avec.

(Veuillez noter : il ne prend pas en charge l'eau chaude, le bain chaud et la vapeur d'eau. Veuillez éviter d'utiliser et de stocker l'appareil à un endroit où la température et l'humidité sont élevées.)

 

RETOUR & GARANTIE

Paiement 100% sécurisé avec cryptage SSL.

Si vous n'êtes pas satisfait à 100 %, faites-le nous savoir et nous ferons le nécessaire.

POLITIQUES D'EXPÉDITION

Les commandes sont expédiées sous 5 à 10 jours ouvrables.

Astuce : L'achat de 2 produits ou plus en même temps vous fera économiser beaucoup sur les frais de livraison.

87.3% des clients ont également acheté Je n'aime pas ça?

❤️ASTUCE : Tous nos produits sont authentiques, avec de vrais brevets, les contrefaçons doivent être examinées ! Veuillez marquer nos produits !!!

😊Si vous n'êtes pas satisfait des articles reçus, veuillez nous contacter dans les 15 jours suivant la réception et nous vous apporterons la meilleure assistance possible !

🚢Livraison >> Livraison express efficace disponible dans toute la France.

🔥98,9 % de nos clients achètent 2 articles ou plus. Obtenez le vôtre dès maintenant !

Si vous avez encore des questions, veuillez nous contacter directement à l'adresse e-mail 👉 service@bonusvogue.com

émettre un commentaire
Commentaire de clients
tu as atteint le fond
Le plus récent
Le plus aimé
Meilleures notes
Notes les plus basses
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.
class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('smart mounted'); const that = this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const isGeek = /Geek/.test(themeName); this.fetchRules().then((res) => { if (res && res.rules && res.rules.length) { const blockEl = document.getElementById('smart_recommend_block'); SPZ.whenApiDefined(blockEl).then((api) => { api.render({data: res}, true).then(() => { if (isGeek && that.show_type_ === 6) { blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; } const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` .plugin__recommend_container,.app-recommend-card { display: none !important; } `; document.head.appendChild(recommendStyle); const fetchList = []; res.rules.forEach((rule) => { fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll = Promise.all(fetchList); fetchAll.then((p_res) => { res.rules.forEach((rule, index) => { rule.products = p_res[index] && p_res[index].products; const ruleEl = document.getElementById('smart_recommend_rule_' + rule.id); SPZ.whenApiDefined(ruleEl).then((api) => { api.render({data: rule}, true).then(() => { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`, function(){ that.trackRuleImpress(rule); }); const btnElList = document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`); btnElList.forEach((btnEl) => { if (btnEl && rule.config && rule.config.quick_shop_button_bg_color && rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor = rule.config.quick_shop_button_bg_color; btnEl.style.color = rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if (window.top !== window.self) { const template_type = window.SHOPLAZZA.meta.page.template_type; const holderEl = document.getElementById('smart_recommend_preview_no_data_placeholder'); SPZ.whenApiDefined(holderEl).then((api) => { api.render({data: { isCart: template_type === 13, isCollection: template_type === 2, isProduct: template_type === 1, isIndex: template_type === 15 }}, true); }); } } }); } setAction_() { this.registerAction('quickShop', (data) => { const that = this; const product_id = data.args.product_id; const productIndex = data.args.productIndex; const rule_id = data.args.rule_id; const ssp = data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb = data.args.ifb; const modalRender = document.getElementById('smart_recommend_product_modal_render'); if (product_id) { this.fetchProductData(product_id).then((res) => { const product = res.products && res.products.length && res.products[0] || {}; product.cfb = cfb; product.ifb = ifb; SPZ.whenApiDefined(modalRender).then((api) => { api.render({product: product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm, show_type: that.show_type_}, true).then(() => { const modalEl = document.getElementById('smart_recommend_product_modal'); SPZ.whenApiDefined(modalEl).then((modal) => { that.impressListen('#smart_recommend_product_modal', function(){ that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); }); modal.open(); }); const formEl = document.getElementById('smart_recommend_product_form'); SPZ.whenApiDefined(formEl).then((form) => { form.setProduct(product); }); const variantEl = document.getElementById('smart_recommend_product_variants'); SPZ.whenApiDefined(variantEl).then((variant) => { variant.handleRender(product); }); }); }) }); } }); this.registerAction('handleScroll', (data) => { this.directTo(data.args.rule_id, data.args.direction); }); this.registerAction('handleProductChange', (data) => { const variant = data.args.data.variant; const product = data.args.data.product; const imageRenderEl = document.getElementById('smart_recommend_product_image'); SPZ.whenApiDefined(imageRenderEl).then((api) => { api.render({ variant: variant, product: product }, true); }); }); this.registerAction('handleAtcSuccess', (detail) => { const data = detail.args; data.data.product = data.data.product || {}; data.data.variant = data.data.variant || {}; const product_id = data.data.product.id; const product_title = data.data.product.title; const variant_id = data.data.variant.id; const price = data.data.variant.price; const rule_id = data.rule_id; const aid = `smart_recommend.${this.show_type_}.${rule_id}`; const ifb = data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp; const scm = data.scm; const spm = `smart_recommend_${this.show_type_}.${data.spmIndex}`; 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, } }; this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) => { const params = data.args; const spm = `smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` + params.rule_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } fetchRules() { const payload = { show_type: this.show_type_, }; let that = this; if (this.show_type_ === 6) { let line_items = []; return this.fetchCart().then((res) => { if (res && res.cart && res.cart.line_items) { line_items = res.cart.line_items.map((item) => { return { product_id: item.product_id, variant_id: item.variant_id, quantity: item.quantity, price: item.price } }); } payload.line_items = line_items; that.cart_items_ = line_items; return that.fetchRulesRequest(payload); }); } else { if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }); } fetchCart() { return fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`) .then((res) => { if (res.ok) { return res.json(); } }); } fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields: ["title", "url", "image", "min_price_variant.price", "min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 6) { payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); } fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ product_ids: [product_id], fields: [ "images", "options", "min_price_variant", "variants"] }) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); const loadingEl = document.getElementById('smart_recommend_loading'); if (loadingEl) { loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele) return; if (window.getComputedStyle) { return window.getComputedStyle(ele)[style]; } return ele.currentStyle[style]; } directTo(id, direction) { const scrollElement = document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth = parseInt(this.getStyle(scrollElement, 'width')); const scrollLength = (blockWidth * 0.19 - 12) * 5; const scrollPoint = scrollElement.scrollWidth - scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left') { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength, 0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint + 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } } trackRuleImpress(rule) { if (window.sa && window.sa.track) { window.sa.track("plugin_common", { plugin_name: "upsell", event_type: "impressions", rule_id: rule.id, ssp: rule.ssp, scm: rule.scm, show_type: this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block: window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) { window.sa && sa.track && sa.track("plugin_common", { plugin_name: "upsell", event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id, show_type: this.show_type_, }); } 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-block', SpzSmartBlockComponent);