🦶Dual‑Sided Foot Callus Remover, Replaceable Stainless Steel Blade Foot Scraper

$19.99  - $32.99
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "a5b8a2f4-8a88-467d-a2a6-4e4361125f0e"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '0b76d77a-54b0-4d0f-9d30-9b9131aba13b' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "0b76d77a-54b0-4d0f-9d30-9b9131aba13b", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Color:  🔥White
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description


🦶 Salon-Style Foot Care Without the Salon Visit

Enjoy smoother-looking feet with a simple dual-sided foot care routine you can use at home.

✅ Dual-Sided Care One side helps remove rough dead skin, while the other side smooths and refines the finish.
✨ Smoother Heels Helps improve the look and feel of dry, rough heel areas with regular use.
💎 Stainless Steel Surface Durable filing surface designed for repeated foot care routines.
✈️ Travel Friendly Compact size makes it easy to keep in your bathroom, travel bag or self-care kit.
Dual Action Foot Care

1. Two Surfaces for a More Complete Pedicure Routine

The dual-sided design gives you both targeted rough-skin removal and gentle smoothing in one compact tool. Use the stronger surface for stubborn calluses, then finish with the finer side for softer, cleaner-looking feet.

Rough Skin Removal Helps reduce dry, thick and rough areas on heels and soles.
Smoothing Finish Buffs the skin surface for a softer after-care feel.
Simple Routine Easy to use at home without complicated pedicure tools.

2. Visible Smooth Results After One Routine

Reveal softer-looking feet by gently removing dry surface buildup. The precision filing surface helps smooth rough heels and stubborn areas while keeping the routine simple and controlled.

  • Helps smooth rough heels and dry foot skin
  • Designed for callus care and regular foot maintenance
  • Easy to control during at-home pedicure routines
  • Great for sandals, travel, beach days and daily self-care
Use tip: Start gently and avoid pressing too hard. Over-filing can irritate the skin.
Durable Foot Care Tool

3. Stainless Steel Filing Surface for Long-Lasting Performance

The stainless steel filing surface is built for repeated use and easy cleaning. It offers reliable foot care performance without needing disposable filing pads for every routine.

💎 Stainless Steel Surface Durable filing surface for rough skin and callus care.
🧼 Easy to Clean Rinse and dry after use to keep your routine more hygienic.
🔁 Reusable Design Made for regular at-home pedicure maintenance.
✨ Clean Finish Helps keep feet looking smoother and better cared for.

4. Pro-Level Dual Surfaces for Callus Removal and Polishing

Designed like a professional pedicure tool, this foot file gives you two useful surfaces for different parts of your routine.

🚀 Scraper Side Helps remove stubborn calluses and thicker dead skin buildup.
✨ Fine File Side Buffs and polishes heels for a smoother finish.
🦶 Heel Care Useful for dry heels, rough soles and everyday foot maintenance.
🏠 At-Home Routine Enjoy a simple pedicure-style routine without booking an appointment.

5. Compact Foot Care Essential for Home and Travel

Lightweight and easy to store, this foot file fits into your bathroom drawer, self-care kit or travel bag. Keep your feet smooth whether you are at home, on vacation or preparing for sandal season.

✈️ Travel Friendly Compact size is easy to pack for trips and vacations.
🛁 Bathroom Ready Simple to keep near your shower, vanity or pedicure kit.
🎁 Practical Gift A useful self-care essential for anyone who wants smoother feet.
Your Everyday Foot Care Shortcut

Rough Heels? Smooth Them Before They Get Worse.

This dual-sided stainless steel foot file helps remove rough buildup, smooth dry heel areas and keep your feet looking sandal-ready with a simple at-home routine.

Salon-Style Care Enjoy smoother-looking feet without frequent salon visits.
Effective Yet Controlled Designed for targeted callus care when used gently and correctly.
Reusable & Cleanable Rinse and dry after use for regular foot care maintenance.
Self-Care Gift A practical beauty essential for home pedicure lovers.

🛠️ How to Use

1. Start With Clean Feet Use on dry or slightly damp feet for better control.
2. File Rough Areas Gently move the scraper surface over thick or rough skin.
3. Smooth the Finish Use the fine filing side to polish and refine the heel surface.
4. Rinse and Moisturize Clean your feet, apply moisturizer and enjoy a softer feel.
5. Clean the Tool Rinse, dry fully and store in a clean, dry place after use.
Best results tip: Use light pressure first. Repeat gradually instead of removing too much skin at once.

📦 Product Specifications

Product Name Dual-Sided Stainless Steel Foot File
Product Type Manual foot scraper and heel smoothing file
Color White / Blue
Bundle Options Scraper Only / Scraper + Replacement Head
Size 11.5cm × 5.5cm / 4.5 × 2.2 inches
Material Plastic body + stainless steel filing surface
Recommended Use Rough heels, dry skin, callus care and regular at-home pedicure maintenance
Package Includes 1/2 × Scraper or 1/2 × Scraper + 2/4 × Replacement Heads depending on selected option
Skin safety: Do not use on broken, bleeding, infected, irritated or painful skin.
Use caution: Avoid over-filing. Stop immediately if discomfort, redness or irritation occurs.
Hygiene tip: Clean and dry the tool after each use. Do not share personal foot care tools for hygiene reasons.
Care note: For very thick calluses, diabetes, poor circulation or foot health concerns, consult a healthcare professional before use.

Give Your Feet the Smooth Care They Deserve

Remove rough buildup, smooth dry heels and enjoy a cleaner at-home pedicure routine.

Add the Foot File to Cart

Why Shop With Us?

🚚 Fast Shipping Orders are processed carefully and shipped as quickly as possible.
🔒 Secure Checkout Your payment information is handled through a protected checkout process.
💬 Helpful Support Our customer-support team is available for order-related questions.
✅ Satisfaction Guarantee We aim to provide a smooth and dependable shopping experience.