Angel

$53.00
$66.00
Save 20%
class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "f0b1fb39-e3a4-40ab-8fb8-f0f7ea76a91d"; // 促销活动数据 this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // 挂载bind函数 解决this指向问题 this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // 获取数据 this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); if (this.flashsaleData.product_setting.is_redirection && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(`/promotions/discount-default/${this.flashsaleData.discount_info.id}`); } } // 绑定 this.viewport_.onResize(this.resize); // 监听子款式切换,重新渲染 this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // 解绑 this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
Frame Color : Blue - Green
Free Premium Packaging (Including Outer Box, Sunglasses Case And Microfiber Cloth)
(function(){ const TAG = 'spz-custom-lamb-add-btn'; class SpzCustomLambAddBtn extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.action_ = null; this.selected_variant = '{"id":"f0b1fb39-e3a4-40ab-8fb8-f0f7ea76a91d","product_id":"6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0","title":"Blue - Green","weight_unit":"kg","inventory_quantity":8,"sku":"ZSA1003-V1","barcode":"","position":1,"option1":"Blue - Green","option2":"","option3":"","note":"","image":{"src":"\/\/img.staticdj.com\/a81180af78c3ece6e3174ff1143667a7.jpg","path":"a81180af78c3ece6e3174ff1143667a7.jpg","width":5000,"height":5000,"alt":"Angel Zealous","aspect_ratio":1},"wholesale_price":[{"price":53,"min_quantity":1}],"weight":"0","compare_at_price":"66","price":"53.00","retail_price":"66","available":true,"url":"\/products\/angel?variant=f0b1fb39-e3a4-40ab-8fb8-f0f7ea76a91d","available_quantity":8,"options":[{"name":"Frame Color","value":"Blue - Green"}],"off_ratio":"20","flashsale_info":{"variant_id":"f0b1fb39-e3a4-40ab-8fb8-f0f7ea76a91d","product_id":"","quantity":0,"discount_id":"c8a27b12-5a0a-4cd6-a99b-c9c171938212","limit_time":1570048,"limit_buy":-1,"user_limit_buy":-1,"discount_sales":0,"discount_sales_rate":"0","discount_stock":8,"ends_at":1751860799,"starts_at":1750172822,"allow_oversold":"uncheck","allocation_method":"none","price":"53.00","compare_at_price":"66.00","discount_price":"53.00","customary_saved_price":"13.00","customary_off_ratio":"20","discount_saved_price":"13.00","discount_off_ratio":"20","use_before_price":false,"before_price":"0","title":"","properties":"","color_setting_promotional_copy":"Canada Day Sale","discount_quantity":0,"is_need_split":false},"sales":0}'; this.lens_process_id = ""; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.getLambLensSteps_(true); this.setupAction_(); } mountCallback() { document.addEventListener('dj.variantChange', (event) => { const variant = event.detail.selected; if (variant.product_id == '6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0') { this.selected_variant = JSON.stringify(variant); } }); } fetchLambLensSteps() { const lens_process_id = location.search.replace('?', '').split('&').find(v => v.includes('lens_process_id')); const template_id = location.search.replace('?', '').split('&').find(v => v.includes('template_id')); const stepsUrl = '/api/fireant/product/6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0/steps' + ((lens_process_id ? `?${lens_process_id}` : '') || (template_id ? `?${template_id}` : '')); return fetch(stepsUrl).then((res)=>{ return res.json(); }).then((data)=>{ return data; }) } showProductBtn() { var addToCart = document.getElementById('add_to_cart_normal'); var productQuantityBtn = document.getElementById('product_info_quantity_normal'); addToCart && addToCart.classList.remove('hidden'); productQuantityBtn && productQuantityBtn.classList.remove('hidden'); } getLambLensSteps_(isInit) { try{ this.fetchLambLensSteps().then((data)=>{ if(data.errors) { if(isInit){ this.renderBtn(false); this.showProductBtn(); } }else{ if(isInit){ this.lens_process_id = data?.lens_process_id; let frameOnlyArr = data?.prescription_types?.options.filter((option)=>{ return option.prescription_type === 'Frame Only' }); let frameOnlyObj = frameOnlyArr.length > 0 ? frameOnlyArr[0] : {}; let available = true; if(available && (frameOnlyObj?.frame_only_display_at == 'product_detail' || frameOnlyObj?.frame_only_display_at == 'all')){ this.renderBtn({ ...frameOnlyObj, process_type: data.process_type }); }else{ this.renderBtn({ process_type: data.process_type }); } } } }); }catch(e){ this.renderBtn(false); this.showProductBtn(); } } renderBtn = (isRenderProcessBtn) => { return this.templates_ .findAndRenderTemplate(this.element, isRenderProcessBtn) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }); } handleClickFrameOnlyBtn_ = async () => { try { const reqBody = { product_id: "6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0", variant_id: JSON.parse(this.selected_variant)?.id, quantity: 1, properties: { lens_processing_id: this.lens_process_id, prescription_type: "Frame Only" } } const data = await this.xhr_.fetchJson('/api/fireant/v2/customize_cart', { method: "post", body: reqBody }); if(data.state === 'success') { this.atc_loading_ = false; this.element.removeAttribute('atc-loading'); this.triggerEvent_("dj.addToCart", data); window.location.href = "/cart"; } else { this.atc_loading_ = false; this.element.removeAttribute('atc-loading'); } } catch (e) { this.atc_loading_ = false; this.element.removeAttribute('atc-loading'); const toast = SPZCore.Dom.scopedQuerySelector(document, `#error-toast`); toast && SPZ.whenApiDefined(toast).then((api) => { e.then((result)=>{ api.showToast(result?.errors[0] || 'Unknown error'); }) }); } } trackAddToCart = () => { const params = { business_type: "product_plugin", function_name: "prescription_lens", plugin_name: "prescription_lens", module: "apps", tab_name: "process_btn", event_type: "click", event_developer: "jozy", event_info: JSON.stringify({ action_type: "frame_only_add_to_cart", product_id: '"6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0"', process_id: this.lens_process_id, process_type: "glasses", element_type: "button", element_name: "frame_only_btn" }) } window.spzutm && window.spzutm.registerParams('add_to_cart', params ); } setupAction_ = () => { this.registerAction('handleClickBtn', (invocation) => { this.saveAllFormProperties_(); const glassesInfo = { product:{ title: "Angel", id: "6deb57dd-8a1b-42e0-977f-4e27bf0d6ff0", image: {"src":"\/\/img.staticdj.com\/a81180af78c3ece6e3174ff1143667a7.jpg","path":"a81180af78c3ece6e3174ff1143667a7.jpg","width":5000,"height":5000,"alt":"Angel Zealous","aspect_ratio":1}, selected_variant: JSON.parse(this.selected_variant) }, atcType: 'add_lens' }; const tempElement = document.getElementById('process-request-script'); tempElement && SPZ.whenApiDefined(tempElement).then(async (api) => { await api.requestLensProcess(glassesInfo, invocation.args.process_type); }); setTimeout(() => { const proceeBtn = document.getElementById('lens_add_to_cart'); proceeBtn && proceeBtn.classList.remove('pointer-events-none'); }, 3000); }); this.registerAction('handleClickFrameOnlyBtn', (invocation) => { this.trackAddToCart(); this.atc_loading_ = true; this.element.setAttribute('atc-loading',""); this.handleClickFrameOnlyBtn_(); }); } saveAllFormProperties_(){ const formEntries = this.getFormData_(); const properties = this.getFormAllProperties_(formEntries); // 获取的form所有properties存全局 window.app_lamb_form_properties = properties; } getFormData_() { const form = this.element.closest("form"); const formData = new FormData(form); const formEntries = Object.fromEntries(formData.entries()); return formEntries; } getFormAllProperties_(obj){ const result = {}; Object.entries(obj).forEach(([key, value]) => { if (key.startsWith("properties")) { result[key.substring(11, key.length - 1)] = value; } }); return result; } triggerEvent_(name, params) { const event = SPZUtils.Event.create( this.win, name, params, {bubbles: true} ); this.element.dispatchEvent(event); } isLayoutSupported = (layout) => { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomLambAddBtn) })()
Description

Elevate Your Look with Zealous Angel Women's Polarized Sunglasses

Unleash your inner fashionista with the Zealous Angel Women's Polarized Sunglasses. Crafted for the discerning woman who values both style and functionality, these sunglasses seamlessly combine high-quality craftsmanship with a trendy aesthetic. Whether you're strolling through the city or enjoying a day at the beach, these shades are designed to enhance your look while providing essential protection from harmful UV rays.

Key Features:

  • Polarized Protection: Experience the ultimate in eye care with our TAC polarized lenses, providing 100% UV400 protection. These lenses effectively block harmful UVA and UVB rays, allowing you to enjoy your outdoor adventures without compromising your eye health. With enhanced color contrast and reduced glare, you'll see the world more clearly and comfortably.
  • Luxurious Materials: Made from premium acetate, the Zealous Angel sunglasses feature a durable yet lightweight frame that ensures all-day comfort. The stylish square shape not only adds a modern touch but also complements various face types, making it a versatile addition to any wardrobe.
  • Stunning Design: The sunglasses are designed with elegant gradient lenses that add a touch of sophistication to your eyewear collection. The eye-catching design makes a bold statement, ensuring you stand out in any crowd.
  • Built-In Nose Pads: Designed with built-in nose pads for a comfortable and secure fit, these sunglasses conform to your unique facial contours. Say goodbye to the discomfort of sliding glasses and hello to all-day wear without irritation. Perfect for any activity, whether you're driving, shopping, or lounging by the pool.
  • Thoughtful Packaging: Each pair of Zealous sunglasses comes beautifully packaged in an opulent gift box, making them an ideal present for birthdays, holidays, or any special occasion. Included with your purchase are a magnetic sunglasses case and a microfiber cleaning cloth, ensuring your shades stay pristine and protected from scratches.

Why Choose Zealous?

At Zealous, we believe that luxury and affordability can coexist. Our commitment to quality ensures that you don’t just look good—you feel good too. We streamline our processes and cut out the middleman, allowing us to offer premium eyewear at prices that won’t break the bank. Our sunglasses represent the epitome of style, comfort, and durability.


Product Details:

  • Style Number: ZSA1003
  • UV Protection: Yes (UV400 rated)
  • Lens Width: 49 mm
  • Bridge Width: 21 mm
  • Frame Width: 145 mm
  • Frame Material: Acetate
  • Temple Material: Acetate
  • Shape: Square
  • Lens Type: TAC Polarized
  • Nose Pad: Built-in
  • Gender: Female
  • Packaging Includes:
    • Sunglasses x1
    • Magnetic sunglasses case x1
    • Microfiber cleaning cloth x1
    • Gift box x1

Final Touch:

Redefine your style and embrace affordable luxury with the Zealous Angel Women’s Polarized Sunglasses. Elevate your accessory game while ensuring your eyes are well-protected from the sun’s harmful rays. Order now to experience the perfect blend of quality, style, and comfort!

Details
window.__bright__ = { getMetaData_: () => { const metaData = [ {"value": "", "title": "Size", "owner_resource": "product", "key": "size"}, {"value": "", "title": "Weight", "owner_resource": "product", "key": "weight"}, {"value": "", "title": "Rim", "owner_resource": "product", "key": "rim"}, {"value": "", "title": "RXable", "owner_resource": "product", "key": "rxable"}, {"value": "Blue - Green / Brown - Purple", "title": "Frame Color", "owner_resource": "product", "key": "frame_color"}, {"value": "Green / Purple", "title": "Temple Color", "owner_resource": "product", "key": "temple_color"}, {"value": "Acetate", "title": "Frame Material", "owner_resource": "product", "key": "material"}, {"value": "Acetate", "title": "Temple Material", "owner_resource": "product", "key": "temple_material"}, {"value": "Black", "title": "Lens Color", "owner_resource": "product", "key": "color"}, {"value": "Square", "title": "Shape", "owner_resource": "product", "key": "shape"}, {"value": "TAC Polarized", "title": "Lens Type", "owner_resource": "product", "key": "_LensType"}, {"value": "Built In", "title": "Nose Pad", "owner_resource": "product", "key": "nose_pad"}, {"value": "Anti scratch", "title": "Coating", "owner_resource": "product", "key": "Coating"}, {"value": "Yes", "title": "Polarized", "owner_resource": "product", "key": "Polarized"}, ]; return metaData; }, getBlockData_: () => { const blockSettingData = { "frameWidth": { "value": "145", }, "lensWidth": { "value": "49", }, "bridgeWidth": { "value": "21", }, "lensHeight": { "value": "", }, "templeLength": { "value": "", } }; return blockSettingData; } }; (function(){ const TAG = 'spz-custom-structured-logic'; class SpzCustomStructuredLogic extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); } buildCallback = () => { this.setupAction_(); this.unit = 'mm'; this.variantChange_(); this.selectedData = this.getProductData_(); this.init_(); } static deferredMount() { return false; } isLayoutSupported = (layout) => { return layout == SPZCore.Layout.CONTAINER; } setupAction_ = () => { this.registerAction('changeUnit', (invocation) => { const changeUnit = invocation.args.data; this.unit = changeUnit; this.init_(); }); } init_ = () => { this.meteData_ = window.__bright__.getMetaData_(); this.blockData_ = window.__bright__.getBlockData_(); this.renderParameter_(); this.renderStructuredImg_(); this.renderTempleLength_(); this.renderBtn_(); } getProductData_ = () => { let pJson = document.getElementById('product-json'); if (pJson) { return JSON.parse(pJson.innerHTML); } if (typeof $ === 'function') { return $(document).data('djproduct'); } return undefined; } renderParameter_ = () => { const structuredParameterContainerRender = document.getElementById('structured-parameter-container-render'); SPZ.whenApiDefined(structuredParameterContainerRender).then(async (api) => { const parameter = []; this.meteData_.forEach(meta => { if (meta.owner_resource === 'product') { parameter.push({ title: meta.title, value: meta.value }); } else { parameter.push({ title: meta.title, value: meta.value[this.selectedData.selected.id] }); } }); api.render(parameter); }); } renderStructuredImg_ = () => { const glassesImgRender = document.getElementById('glasses-img-render'); SPZ.whenApiDefined(glassesImgRender).then(async (api) => { const parameter = {}; parameter.unit = this.unit; Object.keys(this.blockData_).forEach(key => { if (typeof this.blockData_[key].value === 'string') { parameter[key] = this.blockData_[key].value; } else { parameter[key] = this.blockData_[key].value[this.selectedData.selected.id]; } }); api.render(parameter); }); } renderTempleLength_ = () => { const lensImgRender = document.getElementById('lens-img-render'); SPZ.whenApiDefined(lensImgRender).then(async (api) => { let parameter = {}; parameter.unit = this.unit; if (this.blockData_.templeLength.value) { if (typeof this.blockData_.templeLength.value === 'string') { parameter.value = this.blockData_.templeLength.value; } else { parameter.value = this.blockData_.templeLength.value[this.selectedData.selected.id]; } } api.render(parameter); }); } renderBtn_ = () => { const conversionBtnRender = document.getElementById('conversion-btn-render'); conversionBtnRender && SPZ.whenApiDefined(conversionBtnRender).then(async (api) => { const parameter = {}; Object.keys(this.blockData_).forEach(key => { if (typeof this.blockData_[key].value === 'string') { parameter[key] = this.blockData_[key].value; } else { parameter[key] = this.blockData_[key].value[this.selectedData.selected.id]; } }); parameter.unit = this.unit; api.render(parameter); }) } variantChange_ = () => { document.addEventListener('dj.variantChange', (e) => { this.init_(); this.selectedData = e.detail; }); document.addEventListener('dj.editor.update', (e) => { this.init_(); }); } } SPZ.defineElement(TAG, SpzCustomStructuredLogic) })();