Sumdeal Metal Storage Locker Cabinet - Adjustable Shelves, Free Standing Ventilated Sideboard Steel Cabinets for Office, Home,Orange
Sumdeal Metal Storage Locker Cabinet - Adjustable Shelves, Free Standing Ventilated Sideboard Steel Cabinets for Office, Home,Orange
${function() {
const variantData = data.variant || {"id":"b8675999-72d3-430b-99dd-c6fa46f817cc","product_id":"851c5955-3160-4f63-9a30-24531e8437d3","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"W173091787","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":299,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"299","retail_price":"0","available":true,"url":"\/products\/sumdeal-metal-storage-locker-cabinet-adjustable-shelves-free-standing-ventilated-sideboard-steel-cabinets-for-office-home-orange?variant=b8675999-72d3-430b-99dd-c6fa46f817cc","available_quantity":999999999,"options":[],"off_ratio":"0","flashsale_info":{"variant_id":"b8675999-72d3-430b-99dd-c6fa46f817cc","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":"299","compare_at_price":"","discount_price":"299","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"0","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)) 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.
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.
🗄️Metal Storage Locker Cabinet, Adjustable Shelves Free Standing Sideboard Steel Cabinets for Office,Home
🗄️2 Door Metal Accent Storage Cabinet for Home Office,School,Garage
🗄️ Multiple Uses-Get the perfect storage solution for any room in your house with the 2 Door Metal Locker Accent Cabinet,thus you can place it in office, home, basements, shop, warehouse, school etc
🗄️Durable Material-Made of powder-coated metal,which is more durable and for the long term use,while the metal makes it easy to clean spills with a damp cloth
🗄️ Adjustable Shelf Height - 2 shelves in this cabinet are adjustable, maximum adaptability and convenience for your own unique storage and organizing needs.
🗄️ Adjustable Non-slip Feet-The four feet of the accent storage lockers are adjustable and can be used in uneven ground
🗄️Easy Assemble-All the parts of this product, hardware pack and
🗄️Instruction will ship to the customer into one package. The clear and logical instruction manual will assist user install this product without any error.
🗄️Product Dimensions
Assembled Length (in.): 31.50
Assembled Width (in.): 15.75
Assembled Height (in.): 47.24
Weight (lbs.): 47.18
- 🗄️2 Door Metal Accent Storage Cabinet for Home Office,School,Garage
- 🗄️Multiple Uses-Get the perfect storage solution for any room in your house with the 2 Door Metal Locker Accent Cabinet,thus you can place it in office, home, basements, shop, warehouse, school etc
- 🗄️Durable Material-Made of powder-coated metal,which is more durable and for the long term use,while the metal makes it easy to clean spills with a damp cloth
- 🗄️Adjustable Shelf Height - 2 shelves in this cabinet are adjustable, maximum adaptability and convenience for your own unique storage and organizing needs.
- 🗄️Adjustable Non-slip Feet-The four feet of the accent storage lockers are adjustable and can be used in uneven ground
Vendor by :
Sumdeal
Sku :
W173091787
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"b8675999-72d3-430b-99dd-c6fa46f817cc","product_id":"851c5955-3160-4f63-9a30-24531e8437d3","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"W173091787","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":299,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"299","retail_price":"0","available":true,"url":"\/products\/sumdeal-metal-storage-locker-cabinet-adjustable-shelves-free-standing-ventilated-sideboard-steel-cabinets-for-office-home-orange?variant=b8675999-72d3-430b-99dd-c6fa46f817cc","available_quantity":999999999,"options":[],"off_ratio":"0","flashsale_info":{"variant_id":"b8675999-72d3-430b-99dd-c6fa46f817cc","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":"299","compare_at_price":"","discount_price":"299","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"0","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}
` }()}