www.watchcod-de.shop
Open in
urlscan Pro
2606:4700::6811:f677
Public Scan
Submitted URL: https://watchcod-de.shop/products/rolex-126231-0028_91590734-oa99?aid=smart_recommend.5.436013898202658101&ifb=f88463c6-b...
Effective URL: https://www.watchcod-de.shop/products/rolex-126231-0028_91590734-oa99?aid=smart_recommend.5.436013898202658101&ifb=f88463c6-b...
Submission: On October 26 via api from US — Scanned from DE
Effective URL: https://www.watchcod-de.shop/products/rolex-126231-0028_91590734-oa99?aid=smart_recommend.5.436013898202658101&ifb=f88463c6-b...
Submission: On October 26 via api from US — Scanned from DE
Form analysis
4 forms found in the DOM<form class="product-info product-info-031062b3-4b00-4cc0-9a82-41384917962c col-12 col-md-6 properties">
<div class="product-info__header">
<div class="product-info__vendor dj_skin_product_list_title">mysite</div>
<h1 class="product-info__header_title dj_skin_product_title">Rolex Datejust 36, 126231-0028</h1>
<div class="product-info__header_price-wrapper">
<div class="product-info__header_price-wrapper-left">
<span class="product-info__header_price dj_skin_product_detail_price money notranslate"> €100.00 </span>
<span class="product-info__header_compare-at-price dj_skin_product_compare_at_price money notranslate"> €2,188.00 </span>
</div>
</div>
<div class="bootstrap">
<div class="plugin__wrappers d-flex flex-column"></div>
</div>
</div>
<input type="hidden" name="product_id" value="031062b3-4b00-4cc0-9a82-41384917962c">
<input type="hidden" name="variant_id" id="selected_variant_id_031062b3-4b00-4cc0-9a82-41384917962c" value="33854afc-c2a8-40c1-afac-9789e725fc06">
<div class="product-info__body">
<div class="product-info__variants ">
</div>
<div class="product-info__qty_container">
<div class="qty-title product-info__qty_title">Qty <span class="product-info__qty_stock" style="display: inline;">
</span>
</div>
<div class="product-info__qty notranslate">
<button type="button" class="btn product-info__qty_btn product-info__qty_decr" data-click="decrease" disabled=""> - </button>
<input id="product_quantity_031062b3-4b00-4cc0-9a82-41384917962c" class="form-control product-info__qty_num" type="text" value="1" name="quantity">
<button type="button" class="btn product-info__qty_btn product-info__qty_incr" data-click="increase"> + </button>
</div>
</div>
</div>
<div class="product-info__btn product-info__btn_2">
<button type="button" class="btn btn-secondary" data-click="addToCart" data-track="click" data-track-content="add_to_cart" data-track-source="add_to_cart"> Add to Cart </button>
<button type="button" class="btn btn-primary " data-click="submit" data-track="click" data-track-content="checkout" data-track-source="buy_now">Buy Now</button>
</div>
<div class="product-info__social-sharing notranslate">
<a target="_blank" href="//www.facebook.com/sharer.php?u=https://www.watchcod-de.shop/products/rolex-126231-0028_91590734-oa99" class="share-facebook dj_skin_text">
<i class="sep-font sep-font-facebook"></i>
<span class="share-title" aria-hidden="true">Share</span>
</a>
<a target="_blank" href="//twitter.com/share?text=Rolex%20Datejust%2036%2C%20126231-0028&url=https://www.watchcod-de.shop/products/rolex-126231-0028_91590734-oa99" class="share-twitter dj_skin_text">
<i class="sep-font sep-font-twitter"></i>
<span class="share-title" aria-hidden="true">Tweet</span>
</a>
<a target="_blank" href="//pinterest.com/pin/create/button/?url=https://www.watchcod-de.shop/products/rolex-126231-0028_91590734-oa99&media=//img.fantaskycdn.com/b3340978fecb5f5950b79bdaeee12078_1024x1024.jpeg&description=Rolex%20Datejust%2036%2C%20126231-0028" class="share-pinterest dj_skin_text">
<i class="sep-font sep-font-pinterest"></i>
<span class="share-title" aria-hidden="true">Pin it</span>
</a>
</div>
</form>
<form class="zb-flex zb-flex-col zb-relative zb-w-full">
<div class="zb-overflow-y-auto zb-pb-[100px]">
<div class="zb-flex zb-items-center zb-pb-4 zb-border-b zb-border-t-0 zb-border-l-0 zb-border-r-0 zb-border-solid zb-border-[#eee] md:zb-border-none"> <ljs-render layout="container"
class="zb-flex-shrink-0 zb-w-[66px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0 zb-h-[70px] md:zb-hidden" id="smart_recommend_product_image" manual="" template="smart_recommend_product_image_template"></ljs-render>
<div class="zb-w-full">
<div class="zb-line-clamp-2 zb-mb-2 zb-text-sm md:zb-text-base">${product.title}</div>
<div class="zb-flex zb-justify-between zb-items-center"> <spz-render layout="container" template="smart_recommend_price_template" id="smart_recommend_modal_price" manual="">
<div class="zb-flex zb-items-center"> <ljs-currency class="zb-font-semibold zb-text-[22px] zb-text-[#CD201A] zb-mr-2" layout="container" value="${product.min_price_variant.price}"></ljs-currency> <ljs-currency
class="zb-text-[#93989D] zb-text-xs zb-line-through" layout="container" value="${product.min_price_variant.compare_at_price}"
spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency> </div>
</spz-render>
<a class="zb-flex zb-items-center zb-cursor-pointer zb-text-[#212B36] zb-no-underline" href="${product.url}?${toQuery({ aid: 'smart_recommend.' + data.show_type + '.' + data.rule_id, ifb: product.ifb || '', cfb: product.cfb || '', scm: data.scm || '', ssp: data.ssp || '' })}"> <span class="zb-text-[13px]">See detail</span> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#93989D"></path></svg> </a>
</div>
</div>
</div> <ljs-variants id="smart_recommend_product_variants" layout="container" template="smart_recommend_product_variant_template" slide="smart_recommend_carousel" disabled-dj-event="" interference=""> </ljs-variants>
<div class="zb-text-sm zb-mb-2">Quantity</div> <ljs-quantity disabled-dj-event="" layout="fixed" width="150" height="52" min="1" max="999999" value="1" input-class="!zb-text-base" icon-class="!zb-p-3"></ljs-quantity>
</div>
<div class="zb-absolute zb-bottom-0 zb-flex md:zb-flex-col zb-w-full zb-bg-white"> <button
class="zb-flex zb-items-center zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 md:zb-mb-2 zb-justify-center zb-cursor-pointer zb-w-full zb-border zb-border-solid zb-border-[#313131] zb-bg-white zb-rounded zb-h-[42px]" role="addToCart" type="button"
@tap="smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');"> <span>Add To Cart</span> </button> <button
class="zb-flex zb-items-center zb-justify-center zb-cursor-pointer zb-w-full zb-bg-[#292929] zb-text-white zb-rounded zb-h-[42px] zb-border-none" type="button" role="buyNow"
@tap="smart_recommend_loading.showLoading;smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');"> <span>Buy Now</span> </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
The delivery time is approx. 5-7 days 0 Powered by Google Übersetzer Deutsch,English,Italiano,français,español 0 * Login * Register All Rolex -------------------------------------------------------------------------------- Rolex-Oyster-Perpetual-1 -------------------------------------------------------------------------------- Rolex-Sea-Dweller -------------------------------------------------------------------------------- Rolex-sky-dweller -------------------------------------------------------------------------------- Rolex GMT Master -------------------------------------------------------------------------------- Rolex Submariner -------------------------------------------------------------------------------- Rolex Yacht Master -------------------------------------------------------------------------------- Rolex explorer -------------------------------------------------------------------------------- Rolex-daytona -------------------------------------------------------------------------------- Rolex-datejust -------------------------------------------------------------------------------- Login -------------------------------------------------------------------------------- Register Deutsch,English,Italiano,français,español Il nostro negozio di riparazione e servizio completo di orologi Rolex I nostri orologi sono tutti standard e marcati. I prodotti nella confezione originale possono essere restituiti se non sei soddisfatto entro 15 giorni. Acquista con fiducia, supportiamo il pagamento in contrassegno. 1 / 1 mysite ROLEX DATEJUST 36, 126231-0028 €100.00 €2,188.00 Qty - + Add to Cart Buy Now Share Tweet Pin it Product Description Reviews Product Description Rolex Perpetual Datejust 36 Watch, Two-Tone: Stainless Steel & 18k Everose Gold. Rosé-colour dial, Fluted bezel and Oyster Bracelet, 126231-0028. Rolex Datejust 36 Two-Tone: Stainless Steel & 18k Everose Gold. Rosé colour dial 2/ 10 Factory set Diamonds. The hour markers Roman: VI and IX in 18 ct gold, set with 24 diamonds and scratch-resistant sapphire & cyclops lens over the date. The Watch comes with Mechanical Self-winding Movement & 3235 Calibre w/ 31 jewels & 70 hours power reserve. The Bracelet is Oyster Everose Rolesor & Stainless Steel. With Folding Oysterclasp with Easylink 5mm comfort extension link. The Waterproof is 100m/330 feet. The Watch is with a Rolex Watch box, Rolex Warranty Card. Covered with Rolex Warranty. SPECIFICATIONS:MakeRolexModelDatejust 36Reference126231-0028MODEL CASEModel caseOyster, 36 mm, Oystersteel and Everose goldOyster architectureMonobloc middle case, screw-down case back and winding crownDiameter36 mmMaterialEverose Rolesor - a combination of Oystersteel and 18 ct Everose goldBezelFlutedWinding crownScrew-down, Twinlock double waterproofness systemCrystalScratch-resistant sapphire, Cyclops lens over the dateWater-resistanceWaterproof to 100 metres / 330 feetMOVEMENTMovementPerpetual, mechanical, self-windingCalibre3235, Manufacture RolexPrecision-2/+2 sec/day, after casingFunctionsCentre hour, minute and seconds hands. Instantaneous date with rapid setting. Stop-seconds for precise time settingOscillatorParamagnetic blue Parachrom hairspring. High-performance Paraflex shock absorbersWindingBidirectional self-winding via Perpetual rotorPower reserveApproximately 70 hoursBRACELETBraceletOyster, flat three-piece linksBracelet materialEverose Rolesor - a combination of Oystersteel and 18 ct Everose goldClaspFolding Oysterclasp with Easylink 5 mm comfort extension linkDIALDialRosé colour set with diamondsGem-SettingRoman VI and IX in 18 ct gold, set with 24 diamondsCERTIFICATIONSuperlative Chronometer (COSC + Rolex certification after casing)WATCH LABEISwiss MadeWHAT IS INCLUDEDBoxOriginal Rolex Watch boxBookletsYesWarrantyBalance of Rolex 5-year Warranty Reviews ${function(){ const rules = data.data.rules; return ` ` }()} You May Also Like * ROLEX Yacht-Master Automatic Chronometer Diamond 'HARIBO' WatchItem No. 116695 SATS Quick Shop * Rolex 116508 Cosmograph Daytona "Green Dial" Quick Shop * ROLEX 124060 SUBMARINER 41 "BRAND NEW" Quick Shop * Rolex Datejust 31 Rosé Dial Diamond Bezel Rose Gold Two Tone Jubilee Watch 278381RBR 278381 Quick Shop * Rolex Datejust 31 Silver Diamond Oyster Bracelet Watch 178384-0017 Quick Shop * Rolex GMT-Master II Pepsi Blue Dial Reference # 126719blro-0003 Quick Shop * Rolex Datejust 31 Pink Roman Numeral Oyster Bracelet Ladies Watch 178274-0076 Quick Shop * Rolex 116589 Cosmograph Daytona "Brand New" "Fully Stickered" Quick Shop * Rolex Datejust 36, 126203-0029 Quick Shop * Rolex Day-Date 40 Presidential Champagne dial, Fluted Bezel, President bracelet, Yellow gold Watch 228238-0003 Quick Shop * Rolex Datejust 31 Dark Grey Diamonds Dial Diamond Bezel Yellow Gold Two Tone Watch 278383RBR 278383 Quick Shop * Rolex Datejust 31 Rosé Roman Dial Diamond Bezel Rose Gold Two Tone Watch 278381RBR 278381 Quick Shop * Rolex 126613LN Submariner Date 41mm "New Release" 5 Year Rolex Warranty Quick Shop * Rolex Datejust 31 Champagne Dial Diamond Bezel Yellow Gold Two Tone Watch 278343RBR 278343 NP Quick Shop * Rolex 226570 Explorer II 'New Card' Rolex Warranty to 2025 Quick Shop * Rolex Datejust 36 Blue Dial Automatic Jubilee Watch 126234 Quick Shop * Rolex Datejust 36mm, Ref. # 126234-0045 Quick Shop * Rolex Perpetual Submariner Date 41mm Blue Dial Yellow Gold 126618LB Quick Shop * Rolex's latest rose gold water ghost Quick Shop * Rolex Datejust 31 Silver Diamond Dial Fluted Bezel 18K Yellow Gold Two Tone Watch 278273 NP Quick Shop * Rolex Datejust 31 Champagne Dial Fluted Bezel 18K Yellow Gold Two Tone Watch 278273 NP Quick Shop * Rolex Cosmograph Daytona m116518ln Series Quick Shop * Rolex Datejust 31 Dark rhodium Index Dial Diamond Bezel Rose Gold Two Tone Watch 278341RBR 278341 Quick Shop * ROLEX 126613LB SUBMARINER DATE 41 "BRAND NEW" Quick Shop * Rolex Datejust 41, 126303-0014 Quick Shop * Rolex Sky-Dweller 42 mm Ref. # 326235-0005 Quick Shop * Rolex Cosmograph Daytona Black Yellow Gold Mens Watch 116518LN-0043 Quick Shop * Rolex's latest rose gold water ghost Quick Shop * Rolex MILGAUSS Oyster, 40 mm, Oystersteel M116400GV-0002 Quick Shop * Rolex Sky Dweller Black Dial 18K White Gold Bezel Steel Jubilee Men's Watch 326934 Quick Shop * Rolex White Gold Daytona 116509 Steel and Black-44mm Quick Shop * Rolex 116518LN Daytona Limoncello - Brand New Quick Shop * Rolex Datejust 41 Silver Dial Oyster Bracelet Watch 126334-0003 Quick Shop * Rolex Cosmograph Daytona Ref. # 116518ln-0042 Quick Shop * ROLEX Pearlmaster 39 Diamond Pave Dial Pearlmaster Bracelet 18K Rose Gold Watch 86405RBR Quick Shop * Rolex Oyster Perpetual Explorer II 42mm m216570-0002 Quick Shop * Rolex Day-Date 36 Pink Jubilee Diamonds Dial President Everose Gold Watch 118205 Quick Shop * Rolex 116713LN GMT-Master II "Gold & Steel" "NOS" Complete Set Quick Shop * Rolex Datejust 28 Silver set with diamonds Dial Diamond Bezel Yellow Gold Ladies Watch 279383RBR 279383 Quick Shop * Rolex Cosmograph Daytona White Mother of Pearl Dial Diamond Dial Oysterflex Strap Mens Watch 116519LN 116519 Quick Shop * Rolex Day Date 36 White Roman Dial President Men's Watch 118206 Quick Shop * Rolex GMT-Master II Root Beer Rose Gold 126715CHNR Quick Shop * Rolex Datejust 31 Rhodium Large VI set with diamonds Dial Fluted Bezel 18K Everose Gold Two Tone Watch 278271 Quick Shop * Rolex GMT-Master II 40mm Root Beer Black Dial Oyster Bracelet 18k Rose Gold Watch 126715chnr-0001 Quick Shop * Rolex Day-Date 36 Champagne Diamond Dial Gold Diamond Bezel Watch 128348RBR-0008 128348RBR Quick Shop * Rolex Daytona 116589TBR "Eye of the Tiger" White Gold UNWORN Quick Shop * Rolex 116518LN Cosmograph Daytona "Brand new' Yellow Gold Oysterflex Quick Shop * Rolex Datejust 31 Elegant Women's Watch 178344-0003 Quick Shop * Rolex Datejust 41 Blue Dial Men's Watch 126334-0002 Quick Shop * Rolex Datejust 36 Bright Blue Motif Dial Jubilee Watch 126200 Quick Shop * Rolex GMT Master II Pepsi Black Dial Stainless Steel Mens Watch 126710blro-0001 Quick Shop * Rolex Datejust 28 Champagne Diamond Star Dial Diamond Bezel Yellow Gold Ladies Watch 279383RBR 279383 Quick Shop * Rolex Cosmograph Daytona Champagne Yellow Gold Oysterflex Strap Mens Watch 116518LN 116518 Quick Shop * Rolex COSMOGRAPH DAYTONA Oyster, 40 mm, Everose gold m116515ln-0055 Quick Shop * Rolex Cosmograph Daytona 40mm, Ref. # 116509-0073 Quick Shop * Rolex 126618LB Submariner Date 41 "Royal Blue" Rolex Warranty to 2026 Quick Shop * Rolex Submariner Ceramic 41 mm Ref. # 126610lv-0002 Quick Shop * Rolex GMT-Master II 40 mm Oystersteel Men's Watch 126720VTNR-0001 Quick Shop * ROLEX WHITE GOLD SMURF SUBMARINER WATCH REF. 116619 Quick Shop * Rolex Cosmograph Daytona Champagne Dial 18kt Yellow Gold Oyster bracelet Men's Watch 116508-0003 Quick Shop * Rolex Datejust 31 Champagne Dial Diamond Bezel Jubilee Yellow Gold Two Tone Watch 278343RBR 278343 NP Quick Shop * Rolex Yacht-Master 42 Black Dial 18k Yellow Gold Men's Watch 226658 Quick Shop * Rolex Datejust 41 Green Dial Oystersteel and White Gold Men's Watch 126334 Quick Shop * Rolex Datejust 36 White Dial Automatic Jubilee Watch 126200 Quick Shop * Rolex Datejust 31 White Roman Dial Diamond Bezel Jubilee Yellow Gold Two Tone Watch 278343RBR 278343 NP Quick Shop * Rolex Yacht-Master II 18k Yellow Gold Men's Luxury Watch 116688 Quick Shop * Rolex Datejust 31 Rose Diamond Dial Fluted Bezel 18K Everose Gold Two Tone Watch 278271 Quick Shop * Rolex 126233 Datejust 36 'Gold & Steel' Latest Model Quick Shop * Rolex Datejust 36, 126203-0015 Quick Shop * Rolex Yacht-Master II Luxury Men's Watch 116681-0002 Quick Shop * Rolex Datejust 41, 126303-0013 Quick Shop * ROLEX 116500LN COSMOGRAPH DAYTONA "CERACHROM" "NEW STYLE WARRANTY CARD" Quick Shop * Rolex Day-Date 40 Presidential White dial, Fluted Bezel, President bracelet, Yellow gold Watch Quick Shop * Rolex Oyster Perpetual Datejust 41 Watch 126333-0010 Quick Shop * ROLEX 116622 YACHT-MASTER "PLATINUM BEZEL" ROLEX WARRANTY TO 2023 Quick Shop * Rolex Day-Date 36 Champagne Dial President Yellow Gold Watch 118208 Quick Shop * Rolex 116509 Cosmograph Daytona "Brand New" "Fully Stickered" White Gold Quick Shop * Rolex Datejust 31 Olive Green Diamond Dial Fluted Bezel 18K Yellow Gold Two Tone Watch 278273 NP Quick Shop * Rolex Datejust 36 Dark Rhodium Dial Fluted Bezel Watch 126231-0023 Quick Shop * Rolex Datejust 41, 126300-0013 Quick Shop * Rolex Cosmograph 116588TBR Daytona Eye of Tiger Quick Shop * Rolex Explorer I 36 Black Dial Yellow Gold Stainless Steel Men's Watch 124273 Quick Shop * Rolex Datejust 36, 126233-0026 Quick Shop * Rolex Datejust 36, 126233-0025 Quick Shop * ROLEX Yacht-Master II Men's Watch 116688-0002 Quick Shop * Rolex Datejust 41, 126334-0023 Quick Shop * Rolex Datejust 41, 126334-0013 Quick Shop * Rolex Datejust 41 Blue Fluted Dial Jubilee Men's Watch 126300 126300-0024 Quick Shop * Rolex Datejust 36mm, Ref. # 126200-0020 Quick Shop * Rolex DAY-DATE 36 Oyster, 36 mm, Everose gold m128235-0037 Quick Shop * Rolex Datejust 36, 126234-0037 Quick Shop * Rolex Datejust 41 126300-0001 Quick Shop * Rolex Datejust 31 White Roman Dial Fluted Bezel 18K Yellow Gold Two Tone Jubilee Watch 278273 NP Quick Shop * Rolex Day-Date 36 Silver Dial President Yellow Gold Watch 118208 Quick Shop * Rolex Datejust 31 White Dial Diamond Bezel Rose Gold Two Tone Watch 278381RBR 278381 Quick Shop * Rolex Datejust 31 Pearl Diamond Dial Fluted Bezel 18K Everose Gold Two Tone Watch 278271 Quick Shop * Rolex Datejust 36, 126200-0005 Quick Shop * Rolex Datejust 31 Champagne Diamonds Dial Diamond Bezel Yellow Gold Two Tone Watch 278383RBR 278383 Quick Shop * ROLEX 126334 DATEJUST 41 "LATEST MODEL" ROLEX WARRANTY TO 2024 Quick Shop * ROLEX 116622 YACHT-MASTER "PLATINUM BEZEL" ROLEX WARRANTY TO 2023 Quick Shop ${function(){ const isCart = data.data.isCart; const isCollection = data.data.isCollection; const isProduct = data.data.isProduct; const isIndex = data.data.isIndex; return ` ${isCart ? 'The items in the shopping cart do not participate in any recommendation rule. Add the participating items to your shopping cart to check the design.' : ''} ${isProduct ? 'This product did not participated in any recommendation rule. Switch to another product to check the design.' : ''} ${isCollection ? 'The items in this collection do not participate in any recommendation rule. Switch the participating items to check the design.' : ''} ${isIndex ? 'The home page do not participate in any recommendation rule.' : ''} (This prompt would not display on client-side) Recommended Products ` }()} ${function(){ const rule = data.data; const getImageHeight = function(image){ const image_size = rule.config.image_size || 0; const imageWidth = image.width || 600; const imageHeight = image.height || 800; let ratio = 0; if(image_size == 0){ ratio = (imageHeight / imageWidth).toFixed(2); }else if(image_size == 1){ ratio = 1.5; }else if(image_size == 2){ ratio = 1; }else if(image_size == 3){ ratio = 0.75; } return imageWidth * ratio; }; 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('&'); return ` ${rule.config.title} * ${product.title} ${rule.config.quick_shop_button_text} ` }()} 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.C_SETTINGS.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.C_SETTINGS.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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; if (rule.products?.length) { const modalRender = document.getElementById('smart_recommend_js_root'); const $dest = document.getElementById('cart'); const isLifeStyle = /Life.*Style/.test(window.C_SETTINGS.theme.merchant_theme_name); if (modalRender && isLifeStyle && $dest.clientWidth > 767) { modalRender.classList.add('zb-mt-[-180px]') } } 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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block: window.C_SETTINGS.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); ${(function(){ const product = data.product; 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('&'); return ` ${product.images.map((image) => { return `` }).join('')} ${product.title} See detail Quantity Add To Cart Buy Now `; })()} ${(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("") } ` })()} ABOUT US CONTACT US TERMS OF SERVICE SHIPPING POLICY RETURN POLICY PRIVACY POLICY Instagram Facebook Twitter Youtube © 2024 Rolex-outlet 111 GIFTS POINTS Rolex Datejust 36, 126231-0028 €100.00 €2,188.00 €100.00 €2,188.00 Buy Now Rolex Datejust 36, 126231-0028 €100.00 €2,188.00 €100.00 €2,188.00 Buy Now 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.C_SETTINGS.routes.root + "/api/possum/recommend_activities", { method: "POST", headers: { "Content-Type": "application/json", "store-id": window.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.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.C_SETTINGS.routes.root || ''}/api/bundle-sales/cart`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', 'store-id': window.C_SETTINGS.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} `; })()} Originaltext Diese Übersetzung bewerten Mit deinem Feedback können wir Google Übersetzer weiter verbessern