Bath and Body Set for Women - 5 Pcs Ocean Spa Baksets Holiday Beauty Birthday Gifts Sets for Her
Bath and Body Set for Women - 5 Pcs Ocean Spa Baksets Holiday Beauty Birthday Gifts Sets for Her
${function() {
const variantData = data.variant || {"id":"26846db2-88f4-4be7-9cc1-b3bc50112b0d","product_id":"087e1126-d728-419f-a7b4-08f8903483fb","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"BE-BP-44","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":21.99,"min_quantity":1}],"weight":"0","compare_at_price":"38.99","price":"21.99","retail_price":"38.99","available":true,"url":"\/products\/bath-and-body-set-for-women-5-pcs-ocean-spa-baksets-holiday-beauty-birthday-gifts-sets-for-her?variant=26846db2-88f4-4be7-9cc1-b3bc50112b0d","available_quantity":999999999,"options":[],"off_ratio":"44","flashsale_info":{"variant_id":"26846db2-88f4-4be7-9cc1-b3bc50112b0d","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"21.99","compare_at_price":"","discount_price":"21.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"44","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
const saveType = null;
const productSaveLabel = null;
return `
-
${ variantData.off_ratio }%
`; }()}
${function(){
return `
${data.starNum}/${data.starTotal}
`;
}()}
${function(){
return `
${data.showStarText === 'true' ? `
${data.starNum}/${data.starTotal}
` : ''}
`;
}()}
const TAG = 'spz-custom-revue-star';
class SPZCustomRevueStar extends SPZ.BaseElement {
constructor(element) {
super(element);
}
static deferredMount() {
return false;
}
buildCallback = () => {
this.action_ = SPZServices.actionServiceForDoc(this.element);
this.templates_ = SPZServices.templatesForDoc(this.element);
this.xhr_ = SPZServices.xhrFor(this.win);
this.starNum = this.element.getAttribute('starNum');
this.starTotal = this.element.getAttribute('starTotal');
this.showStarText = this.element.getAttribute('showStarText');
this.starColor = this.element.getAttribute('color');
this.interact = this.element.getAttribute('interact');
this.starSize = this.element.getAttribute('starSize') || 14;
}
mountCallback = () => {
this.doRender_({
starTotal: this.starTotal,
totalArray: Array.from({ length: Number(this.starTotal) }, (v, k) => k + 1),
starNum: this.starNum,
showStarText: this.showStarText,
starColor: this.starColor,
starSize: this.starSize
}).then(() => {
if (this.interact) {
this.addEventListeners_();
}
});
}
addEventListeners_ = () => {
const stars = document.querySelectorAll('.revue-star__star');
stars.forEach(star => {
star.addEventListener('click', event => {
const starEl = star.closest('.revue-star__star');
const starIndex = Number(starEl.dataset.index);
let isHalf = event.offsetX < star.offsetWidth / 2;
// rtl
if (document.documentElement.getAttribute('dir') === 'rtl') {
isHalf = event.offsetX > star.offsetWidth / 2;
}
const starValue = isHalf ? starIndex - 0.5 : starIndex;
this.starClickHandler_({ value: starValue });
});
});
}
renderStar = () => {
const isRtl = document.documentElement.getAttribute('dir') === 'rtl';
const stars = this.element.querySelectorAll('.revue-star__star');
stars.forEach((star, i) => {
const starIndex = i + 1;
const starEl = star.querySelector('svg:nth-child(2)');
const isHalf = this.starNum % 1 > 0 && Math.ceil(this.starNum) === starIndex;
const isSolid = starIndex <= Math.ceil(this.starNum);
starEl.style.display = isSolid ? 'block' : 'none';
if (isHalf) {
if (isRtl) {
// RTL布局下,如果是半星,显示星星的右半边
starEl.style.clipPath = `polygon(50% 0, 100% 0, 100% 100%, 50% 100%)`;
} else {
// LTR布局下,如果是半星,显示星星的左半边
starEl.style.clipPath = `polygon(0 0, 50% 0, 50% 100%, 0 100%)`;
}
} else {
starEl.style.clipPath = `polygon(0 0, 100% 0, 100% 100%, 0 100%)`
}
});
const showCountEle = this.element.querySelector('#revue-star-show-count');
showCountEle && SPZ.whenApiDefined(showCountEle).then((api) => {
api.render({ starNum: this.starNum, starTotal: this.starTotal });
});
}
doRender_ = (data) => {
return this.templates_
.findAndRenderTemplate(this.element, { starSize: this.starSize, ...data }, null)
.then((el) => {
const children = this.element.querySelector('*:not(template)');
children && SPZCore.Dom.removeElement(children);
this.element.appendChild(el);
})
.then(() => {
this.starNum = data.starNum;
this.renderStar();
});
}
starClickHandler_ = (event) => {
this.starNum = event.value;
this.renderStar();
this.triggerEvent_('change', { value: event.value });
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {});
this.action_.trigger(this.element, name, event);
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.CONTAINER;
}
}
SPZ.defineElement(TAG, SPZCustomRevueStar)
()
try {
const productId = window.SHOPLAZZA.meta.page.resource_id;
const productType = `default`;
const getProductReviews = (star_least) =>
fetch('/api/comment/count-star-multi',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: [productId],
star_least: star_least || 1,
}),
}).then(res => res.json());
try {
const section = document.querySelector('#revue-product-star');
if(productType === "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e);
window.addEventListener('load', () => {
try {
const section = document.querySelector('#revue-product-star');
if(productType=== "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e)
}
})
}
const getReviewsConfig = async () => {
let data = {};
const url = new URL(window.location.href);
const preview_theme_id = url.searchParams.get('preview_theme_id');
const commentConfig = await fetch('/api/comment-config', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
data = commentConfig.data;
const themeConfig = await fetch(`/api/comment-config?theme_id=${preview_theme_id || ''}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
if (themeConfig?.data && themeConfig.data.star_color) {
data.star_color = themeConfig.data.star_color;
}
if (preview_theme_id) {
data.star_least = window.apps_global && apps_global.reviews && apps_global.reviews.preview_star_least;
} else if (themeConfig?.data && themeConfig.data.product_settings) {
data.star_least = themeConfig.data.product_settings.star_least;
}
return data;
};
if (productId && window.SHOPLAZZA.meta.page.template_type == 1) {
getReviewsConfig().then(async res => {
const config = res;
let review = await getProductReviews(config.star_least);
review = review.data[productId];
if (!config.open_status || (!review.comment_avg_star && !config.show_no_comment_star)) {
const section = document.querySelector('#revue-product-star');
if (section) section.remove();
return;
}
const render = async () => {
const section = document.querySelector('#revue-product-star');
const starComponent = document.querySelector('#revue-product-star-component');
const count = document.querySelector('#revue-product-star-count');
count.innerText = review.published_count;
const api = await SPZ.whenApiDefined(starComponent);
api.doRender_({
starNum: review.comment_avg_star,
starTotal: 5,
showStarText: false,
starColor: config.star_color,
totalArray: Array.from({ length: 5 }, (v, k) => k + 1)
});
section.style.opacity = 1;
}
render();
document.addEventListener('dj.editor.update', render);
});
}
} catch (e) {console.warn(e)};
${function() {
const minInventory = parseInt('7');
const maxInventory = parseInt('10');
const randomInventory = Math.round(Math.random() * (maxInventory - minInventory)) + minInventory;
const customText = "Only {stock} item(s) left in stock!".replace(/\{stock\}/g, '' + randomInventory + '');
const barWidth = (randomInventory / maxInventory) * 100 + '%';
return `
`;
}()}
Product was out of stock.
Product is unavailable.
Enjoy free shipping on every order, delivered to your doorstep no matter where you are in the world.
Shop with confidence with our hassle-free returns policy, ensuring you love what you buy.
Designed with the planet in mind, all our products are committed to sustainable practices.
Your payment information is always protected with our advanced, encrypted checkout security.
Welcome to Body & Earth!
Body & Earth bath spa gift set infused with a relaxing ocean scent, The set enriched with shea butter, plant essential oil, natural aloe and vitamine E, all known for soothing and healing dry, dull and cracked skin
Delight in the comforting goodness of Spa Gift Basket:
Using our spa set are bound to put you into a state of relaxtion and bliss as if you were at the beach. Let your body soak up the soothing, sweet notes of the ocean while the products treat and moisturize your skin
Perfect Spa Gift Set for Women:
An at-home beauty set to enjoy at your own home or as a warm gifts on Christmas, Valentine's Day, Mother's Day, and Halloween Do not miss a good chance to have a spa to make your body smelling graceful! Great gift basket for her you loved!
Package list:
1xhand soap(100g)
1xhand cream(90ml)
1xbody butter(100ml)
1xbath bomb(80g)
1xscented candle(50g)
-
Fresh Ocean Scent: Body & Earth bath spa gift set infused with a relaxing ocean scent, these products are bound to put you into a state of relaxtion and bliss as if you were at the beach. Let your body soak up the soothing, sweet notes of the ocean
-
Essential Oils: Infused with essential oils that are blended to create the perfect scent of the ocean, these products are rich in anti-oxidants and repair the skin’s natural barriers, promoting smooth, nourished skin
-
Hand Soap: This 100% handmade soap is gentle enough for different skin types and it leaves skin clean,smooth, soft to the touch and floral fragrance
-
Body Butter: Our body butter is a thicker and ultra-hydrating version of our light building block for softer, radiant skin. This body butter is suitable for people with dry skin
-
Bath Bomb: Unwind and soak up the benefits of Shea Butter and joyful botanicals with this luxurious Bath Bombs
-
Re-usable Packaging: The spa gift set for women come in beautiful, sturdy packaging that can be re-used as display box or to store personal items
-
The Perfect Gift Set: Our beautiful gift-wrapped and luxurious bath experience is perfect as a gift or to enjoy your own indulgent time. It is the perfect gift for Christmas, birthdays, holidays, anniversaries, Mother's Day and Valentine's Day
Vendor by :
BODY & EARTH
Sku :
BE-BP-44
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"26846db2-88f4-4be7-9cc1-b3bc50112b0d","product_id":"087e1126-d728-419f-a7b4-08f8903483fb","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"BE-BP-44","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":21.99,"min_quantity":1}],"weight":"0","compare_at_price":"38.99","price":"21.99","retail_price":"38.99","available":true,"url":"\/products\/bath-and-body-set-for-women-5-pcs-ocean-spa-baksets-holiday-beauty-birthday-gifts-sets-for-her?variant=26846db2-88f4-4be7-9cc1-b3bc50112b0d","available_quantity":999999999,"options":[],"off_ratio":"44","flashsale_info":{"variant_id":"26846db2-88f4-4be7-9cc1-b3bc50112b0d","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"21.99","compare_at_price":"","discount_price":"21.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"44","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
return `
Vendor by :
${data.product && data.product.vendor}
Weight :
${variantData && variantData.weight}${variantData && variantData.weight_unit}
Barcode :
${variantData && variantData.barcode}
Sku :
${variantData && variantData.sku}
Inventory :
${variantData && variantData.available_quantity}
` }()}