Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
1/12
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
Vintage Fashion Distressed Denim Beret
1/12

Vintage Fashion Distressed Denim Beret

$14.69
$20.69
Save 29%
ColorBlue
Please select a color
Size
Please select a size

1.Click to enter product details.

2.Scroll down to the size selection section, then you can choose the right size according to the size chart!

3.In general, the size of the clothes is divided into S, M, L or according to the waist classification for 32.34.36, etc., you can choose the right size according to the specific value.

                     

4.If you still have difficulty in determining the right size for you, the following is the right size according to our customers' feedback on their own weight, you can refer to it.

WEIGHT/KG 45-50 50-55 55-62 62-70 70-77 77-84 84-92 92-105
SIZE-type1 30 32 34 36 38 40 42 44
SIZE-type2 S M L XL 2XL 3XL 4XL 5XL

5.How to measure the size?

  • TOPS

  • Shoulder Width

Use The Dividing Point Between The Shoulder And The Arm As The Node, And Measure From The Outer End Of The Left Bone Of The Back To The Outer End Of The Right Bone (Passing Through The Base Of The Back Of The Neck, Making A Slight Arc). It Is More Convenient To Wear A Fitted Shirt Or Suit.

  • Sleeve Length

The arm hangs down naturally, measure from the outer end of the shoulder bone to the parallel position of the tiger's mouth of the arm, and keep the tape measure vertically downward along the arm.

  • Bust

In a normal breathing state, the arms hang down naturally, and the tape measure goes around the highest point of the chest and passes through the armpit parallel to the ground, so that it is tight and does not constrict the flesh.

  • Clothes Length

Stand up straight with normal breathing and keep your arms hanging naturally. Starting from the junction of the shoulders and the base of the neck, pass vertically downward through the highest point of the chest, and measure to the same horizontal line as the thumb's mouth.

     

                                                                                                                                                                  

  •  BOTTOMS

  • Pants length:

Measure vertically from the thinnest point of the waist (at the level of the navel) to the length of each variety or the required length.

  • Lower length:

measure from the inside of the leg at the level of the heel of the leg, and measure down to the end of the trouser length.

  • 3.Rise length:

Measure from the thinnest point of the waist to the root of the thigh.

  • 4.Waist circumference:

Measure around the waist at the level of the navel, and increase the degree of relaxation according to the variety. (If you don't wear it next to your body, add 2-4 cm if you wear warm pants.)

  • 5.Hip circumference:

Measure around the fullest part of the hip for a week, and increase the degree of relaxation according to the variety. (Ordinary trousers add 8-12 cm, fit straight trousers add 6-8 cm, jeans add 4-6 cm).

  • 6.Cross crotch:

measure around the base of the thigh for a week, and increase the degree of relaxation according to the variety. (Add the same hip circumference)

  • 7.Trouser opening:

measure around the ankle and double the size.

Quantity
Sku: xtjx52023081110-7-i
Weight: 0kg
Barcode:
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);

SKU:xtjx52023081110

DESCRIPTION

Product Category: Beret

Material: Denim

Weaving Method: Plain Weave

Processing Method: Tie-Dye

Popular Elements: Sutures

Pattern: Monochrome

Crown Style: Tapered

Brim Style: Short Brim

Size: Adjustable

Function: Sun Protection, Age Reduction, Sunshade

Applicable Scene: Leisure

  • PleaseNote:There may be 1-2 cm deviation in different sizes, locations and stretch of fabrics.

PromiseIf the product has any quality problems, please feel free to contact us, we will help you solve the problem as quickly as possible.

care
Machine wash gently at 30°C with similar coloured garments.
Do not use bleach or softener.
Do not iron or dry.
Dry as much as possible.

  • PleaseNote:There may be 1-2 cm deviation in different sizes, locations and stretch of fabrics.

PromiseIf the product has any quality problems, please feel free to contact us, we will help you solve the problem as quickly as possible.



1.How long does it take to ship?

Once we received your order. The item will be processed within 3-10days from the day you made your order, and after that, it may take 7-15 business days to be delivered normally.

 

2.How do I choose my size?

Each product has a corresponding size chart, you can choose the right size according to the size chart

Each product detail is accompanied by a corresponding Size Guide (How to check the Size Guide--👉Click in) you can choose the right size according to the size chart!

If you still have questions about sizing, please contact our online customer service.

 

3. About the material

At the bottom of each product detail page there will be a product description which contains the product fabric and material. If you would like to know more about materials and product care, click the link to learn more! 👉Click in

 

4. What payment methods do you support?

As for payment methods, Paypal, Visa, Maestro, MasterCard, and American Express are all acceptable.

 

5. What is your location?

We are located in Hong Kong. All the items will be shipped out from it.

 

6. Is your website trustworthy? What countries does the logistics deliver to?

We understand your concern and can assure you of lawful operation of our company.

We provide qualified products and attentive service.We provide worldwide shipping on a global scale including America, Europe, Australia, Africa, etc. You will get what you buy.

If you are interested in our products, please visit our website to place the order.

If there is any further question, please feel free to contact us.

 

7.Does your company have a local store?

We are sorry for the inconvenience, but we solely sell online. If you are interested in our products, please view our website: XXXX. You can directly choose items and place orders there.

 

8.Is there a quality issue with the relatively low pricing of the products on your site?

Whatever the item is cheap or expensive, the most important thing is that you like it. Also we need to tell you, there might be some difference between the expensive items and the cheap items in every aspects, there are some cheap items in our websites but also have a good quality .

 

So please believe in us and in our product. Thanks.

 

9.There are some bad messages on your site, are these real?

We are sorry to hear that. Even if you saw some bad reviews about our websites, it doesn't rule out that someone is doing it on purpose. And everything has two sides, as the saying goes "Ten thousand people have ten thousand different views on Hamlet." You can have a try by yourself.

Also, we guarantee the good quality of our products. Please contact us if you have received damaged product. It will be solved timely till your satisfaction.

 

10.With regard to tariffs, who pays the tariffs?

We usually mark the parcel as‘gift’ with estimated value of $10, so you might not need to pay the customs duties. But, it also depends on the customs rules of your country. Please note that customers are responsible for paying the tax their countries charge.

Shopping:

How To Track My Order?

Customers can get their tracking number in the order information and check the package information on https://www.17track.net/en.

Sell Out ? What If The Item I’m Interested In Is No Longer Available In My Size ?

New items can be sold out rather quickly, but we may get more soon!Please contact our customer care department via New items can be sold out

rather quickly, but we may get more soon!

Please contact our customer care department via email and we will do our best to notify you if the item becomes available again. Please include the

best email address for reaching you when the item becomes available.

What Should Do If The Size On The Tag Is Different From What I Ordered ?

The size show on the website will be converted into international size before products are put on sale, which is standard and regular. Therefore, if

you find that the size you get is not the same as shown on the website, don’t panic and worry. That size we sent you is right. Put them on first and see how it turns out. If they don't fit you well, you could return them definitely. (Please check our return policy)

Why The Color Of Received Clothing Is A Little Different From What I Saw Online ?

The camera's perspective and the extent of lighting may cause a little color difference. Hope you could understand us. If it does not affect the

appearance and mood about your favorite clothing, we hope you can keep clothing. We will give you promotion code as the compensation for the future purchase. However, we will try our best to avoid the matter happens.

How Do I Use A Discount Code ?

If you have a discount coupon, when you go to “check out” page, you may find an option where you need to input the number, that’s how you use it.

Why Was My Order Canceled ?

Due to an unforeseen event, the item you ordered suddenly became out of stock and is no longer available. We promise these cases are rare. However, if an item in your order does become unavailable, you will be contacted within 24 to 48 hours about the cancellation. If your order contains additional items, these items will still be shipped to you and the unavailable item will be removed from your order for refund.

Need To Change Something On My Order, How Can I Do That ?

If you need to change or cancel your order, please contact us immediately. We process and ship orders quickly (we’re fast!). Once the parcel was processed and sent to the post office, we will be unable to make any changes.

Can I Get More Information On A Product ?

We try to publish as much useful info as we can about all our products, to help you buy the things that will suit you best.

The product page for every item includes sizing, a detailed description, care instructions, and most importantly, plenty of images.

If there is anything further information you feel we need to put on there to help you, just let us know what information you'd like to see and we'll do our best to include it.

Any Catalogues That I Can Buy From ?

With over so many new items every week, and hundreds of items on the site at any one time, plus constantly changing fashion news, trend features and advice, it would simply be impossible for a paper catalogue to keep up.

Instead we prefer to focus our energy on providing our customers with a website where you can buy what you want when you want, 24 hours, 7 days a week and we believe that the images and catwalk give you a much more realistic view of the items you want.

Payment:

How Do I Pay For My Order ?

We like to give you plenty of payment options: we accept Visa, MasterCard credit card as our secure payment method which accepts all kinds of credit or debit cards. We also take security very seriously indeed, so your details will be safe with us.

All credit and debit card holders are subject to validation and authorization by both us and the card issuer, to maintain security and prevent fraud.

What Currencies Can I Use ?

There are several currencies available as follows: US dollar, EURO, Great Britain Pound Sterling,Canada Dollar, Australia Dollar, Norwegian Krone, Switzerland Francs, Swedish Krona, Polish Zloty, Danish Krona, Japanese Yen, Hong Kong Dollar.

Is It Safe To Use My Credit Card On The Website ?

Please don’t worry; it is safe to order on our website.

We use industry-standard encryption technologies when transferring and receiving customer data exchanged with our site server. None of your credit-card details will be revealed.

During checkout, when you enter your credit card & personal information at our online store, you are passing the information securely to us, using secure socket layer technology (SSL).Welcome to choose your favorite items on our website.

Why Might My Credit Card Be Refused ?

Your credit card may be refused for any of the following reasons:

The card may have expired. Check that your card is still valid.

You may have reached your credit limit. Contact your bank to check that you have not exceeded the authorized purchase limit.

You may have entered some information incorrectly. Check that you have filled in all the required fields correctly.

Make sure you’re using the latest version of your web browser. Maybe because your browser is installed some kinds of plug-ins. Please clear the cookies restart the browser and then try again.

Was I Charged Twice ?

Your credit card will only be charged once after your order ships.

If you just placed your order, what you are seeing on your bank account is an authorization. This is a common bank practice handling credit card transactions to ensure sufficient funds and account authenticity. This authorization will clear (depending on your bank, usually within 48 – 72 hours.) If you need help speeding up the process, you can contact the issuing bank of your credit card.

SHIPPING INFORMATION

WHAT DELIVERY OPTIONS DO I HAVE?


When your destination country is the United States or Canada., you can choose Standard Delivery.

STANDARD DELIVERY:

12-15 business days

$12.99 (FREE on orders over $70)


When your destination country is the United Kingdom or Australia, you can choose Standard Delivery.

STANDARD DELIVERY:

5-12 business days

$10.99 (FREE on orders over $70)

Standard delivery is free for orders over $70. The discount applies automatically at the checkout.

During peak seasons and promotional sales, delivery might take a little longer.


HOW CAN I TRACK MY ORDER?

Affected by Covid-19, there will be some delay on the delivery.

Our delivery time starts from the moment an order is accepted and includes a 24-hour period where your items will be processed and dispatched on business days. Please note: this can take longer during promotional sales.


As soon as your order is packed we will send you a shipment confirmation email with the delivery information and a link to track your order online. Please note, that it can take some days before the tracking information is available.


You will also be able to track your order in your account.


TAX AND DUTIES

The price includes tax, customers do not need to pay additional tax

We accept orders from users worldwide except in the following regions。

Non-delivery area:Andorra, Afghanistan, Albania, Armenia, Angola, Argentina, American Samoa, Austria, Azerbaijan, Bosnia and Herzegovina, Bangladesh, Bulgaria, Bahrain, Burundi, Benin, Bermuda, Brunei, Bolivia, Brazil, The Bahamas, Bhutan, Botswana, Belarus, Belize, Democratic Republic of the Congo, Côte d'Ivoire, Cook Islands, Chile, Cameroon, Colombia, Costa Rica, Cape Verde, Cyprus, Czech Republic, Dominican Republic, Algeria, Ecuador, Estonia, Egypt, Ethiopia, Fiji, Faroe Islands, Georgia, French Guiana, Ghana, Gibraltar, Greenland, Guinea, Guadeloupe, Equatorial Guinea, Greece, Guatemala, Guam, Guinea-Bissau, Guyana, Hong Kong, Honduras, Croatia, Haiti, Hungary, Indonesia, Ireland, Isle Of Man, India, British Indian Ocean Territory, Iraq, Iceland, Jamaica, Jordan, Kenya, Kyrgyzstan, Cambodia, South Korea, Kuwait, Cayman Islands, Kazakhstan, Laos, Lebanon, St. Lucia, Liechtenstein, Sri Lanka, Liberia, Lesotho, Lithuania, Luxembourg, Latvia, Libya, Morocco, Monaco, Moldova, Marshall Islands, Macedonia, Myanmar, Mongolia, Northern Mariana Islands, Mauritania, Malta, Mauritius, Maldives, Malawi, Mexico, Malaysia, Mozambique, Namibia, New Caledonia, Nigeria, Nicaragua, Nepal, Oman, Panama, Peru, French Polynesia, Papua New Guinea, Philippines, Pakistan, Saint Pierre and Miquelon, Puerto Rico, Palestine, Portugal, Paraguay, Qatar, Réunion, Romania, Serbia, Rwanda, Solomon Islands, Seychelles, Slovenia, Slovakia, Sierra Leone, San Marino, Senegal, Somalia, Sao Tome and Principe, El Salvador, Swaziland, Turks and Caicos Islands, Chad, Thailand, Tunisia, Turkey, Trinidad and Tobago, Taiwan, Tanzania, Ukraine, Uruguay, Uzbekistan, Venezuela, US Virgin Islands, Vietnam, Vanuatu, South Africa, Zambia, Zimbabwe

Affected by the coronavirus epidemic, it may lead to extension of the delivery time. In some areas or countries with serious epidemic , the delivery time may be twice as much as the normal standard.

Shipping Method Delivery Time Area
Standard Shipping 5-12 days North America (USA )
5-12 days Oceanica (Australia)
5-12 days Europe (France Germany Belgium Luxembourg Netherlands)
5-12 days Europe (Sweden Portugal Italy)
5-12 days Europe (England)
5-12 days Europe (Finland Iceland Switzerland The Czech Republic Greece Austria)
5-12 days Europe (Norway Denmark Sweden Ireland Luxembourg Switzerland The Czech Republic Slovakia Poland Slovenia Romania Hungary Latvia Lithuania Estonia)
5-12 days North America (Canada Mexico)
7-15 days South America (Columbia Chile Peru Argentina Venezuela Ecuador)
7-12 days Asia (Korea Japan Philippines Vietnam Thailand Singapore Malaysia India Pakistan Kazakhstan Iran Israel Saudi Arabia Cyprus Palestine)
5-12 days Europe (Croatia Ukraine Georgia Spain Russia)
5-12 days Africa (Egypt Libya Morocco South Africa Niger Ghana Cote d'Ivoire Togo Sultan Guinea)
5-12 days Oceanica (New Zealand)
Expedited Shipping 2-5 days Europe (Norway Denmark Sweden Finland France Ireland Belgium Netherlands Luxembourg Switzerland Germany Austria The Czech Republic Slovakia Poland Spain Portugal Italy Croatia Slovenia Romania Greece Hungary Ukraine Latvia Lithuania Georgia Estoni)
Europe England
2-5 days North America (USA Canada Mexico)
2-5 days South America (Columbia Chile Peru Brazil Argentina Venezuela Ecuador)
3-7 days Asia (Korea Japan Philippines Vietnam Thailand Singapore Malaysia India Pakistan Kazakhstan Israel Saudi Arabia Cyprus Palestine)
2-5 days Africa (Egypt Libya Morocco South Africa Niger Ghana Cote d'Ivoire Togo Sultan Guinea)
2-5 days Oceanica (Australia New Zealand)
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);