🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag
🔥 🔥Double-layer Cosmetic Bag

🔥 🔥Double-layer Cosmetic Bag

Price
$34.99
$19.99
Save  $15.00
Size
Please select a size
Quantity
Worldwide shipping
Free returns
24/7 customer support
Secure payments

As a gift for your loved ones, this Double-layer Cosmetic Bag will be the perfect!

undefined

Product Features
💯💝 Layered Design: 
Different from the previous single-space cosmetic bag, it adopts a layered design. It consists of a transparent layer + elastic strap layer + main compartment to form enough space to store your cosmetics and cosmetic accessories, which is convenient for you to sort and store. It has a wide range of uses and can hold anything except cosmetics.
 
undefined
💯💝 Find Items Faster: This transparent cosmetic bag is made of environmentally friendly TPU+ leather polyester material. The transparent visual performance allows you to clearly see the contents of the bag, making it easier for you to find your daily makeup instead of digging in the bag. Save your time, the upper layer is made of transparent material, you can clearly see what is inside.
undefined
💯💝 Double Zipper: A transparent cosmetic bag made of sturdy zipper with a thick double zipper pull. The high-quality design ensures that the zipper slides very smoothly and will not get stuck in the corners.
undefined
💯💝 Easy to Carry: Medium size, easy to store on a suitcase or desktop, and can also be carried when traveling. It is both a cosmetic bag and a toiletry bag.
undefined
 
 
 

Specifications

  • Material:TPU+Leather
  • Color:Green,Pink,Silver
  • Product size:23*16*17cm
  • Product weight:300g
  • Package includes:Double-layer Cosmetic Bag*1PCS

undefined

Customer Reviews

Here are what our customers say.

Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.