\n\n

,需要通过父级DOM结构来判断 */ var trackActionPhone = function (node) { var nodeInnerText = node.innerText || ''; if (!limitRegLength(nodeInnerText)) return; var nodeText = trimText(nodeInnerText); if (nodeText.length < 5 || nodeText.length > 20) return false; var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click'; var str = trimText(node.href || nodeText || ''); if (phoneReg.test(str) && numUseReg.test(str)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { phone: nodeText, }, }, '*'); _paq.push(['trackEvent', type, 'phone', nodeText]); return true; } /** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */ var fatherText = trimText(node.parentNode.innerText || ''); if (fatherText.length < 5 || fatherText.length > 20) return false; if (phoneReg.test(fatherText) && numUseReg.test(fatherText)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { phone: nodeText, }, }, '*'); _paq.push(['trackEvent', type, 'phone', nodeText]); return true; } return false; }; window.addEventListener('click', function (e) { var node = e.target; /** 社媒点击 */ var appName = ''; var getAppAriaLabel = node.ariaLabel || node.parentNode.ariaLabel || ''; if (mediaList.includes(getAppAriaLabel.toLowerCase())) { appName = getAppAriaLabel; } if ( !appName && node.nodeName && node.nodeName.toLowerCase() === 'a' ) { appName = getMediaName(node.href) || getMediaName(node.alt); } if ( !appName && node.nodeName && node.nodeName.toLowerCase() === 'img' ) { appName = getMediaName(node.alt) || getMediaName(node.src); } if ( !appName && node.nodeName && node.nodeName.toLowerCase() === 'i' ) { appName = getMediaName(node.className); } if (appName) { _paq.push(['trackEvent', 'click', 'contactApp', appName]); return; } /** 联系方式点击 */ if (trackActionPhone(node, 'click')) return; if (node.nodeName && node.nodeName.toLowerCase() === 'a') { var val = node.href; if (!limitRegLength(val)) return; if (emailReg.test(val)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: val, }, }, '*'); _paq.push(['trackEvent', 'click', 'email', val]); return; } } if (node.nodeName && node.nodeName.toLowerCase() === 'i') { var val = node.className; var content = node.parentNode.href || ''; if (val.includes('email')) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: content, }, }, '*'); _paq.push(['trackEvent', 'click', 'email', content]); return; } } var nodeChildList = node.childNodes; for (var i = 0; i < nodeChildList.length; i++) { if (nodeChildList[i].nodeType !== 3) continue; var val = nodeChildList[i].textContent.replace(/\s?:?/g, ''); if (!limitRegLength(val)) continue; if (emailReg.test(val)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: val, }, }, '*'); _paq.push(['trackEvent', 'click', 'email', val]); return; } } trackNumberData(node); }); window.addEventListener('copy', function (e) { if (trackActionPhone(e.target, 'copy')) return; var text = e.target.textContent; if (!text) return; var val = text.replace(/\s:?/g, ''); if (!limitRegLength(val)) return; if (emailReg.test(val)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: val, }, }, '*'); _paq.push(['trackEvent', 'copy', 'email', val]); return; } trackNumberData(e.target); }); } trackContactInit(); /** * 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户 * 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00; * 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报 */ function trackActionInput() { const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00'; const pathName = window.location.hostname + window.location.pathname; var lockTrackInput = function () { try { const lastCacheData = localStorage.getItem(CACHE_KEY); if (!lastCacheData) return false; const cacheData = JSON.parse(lastCacheData); const cacheTime = cacheData[pathName]; if (!cacheTime) return false; return Date.now() - cacheTime < 1000 * 60 * 10; // 10分钟内,不重复上报 } catch (error) { console.error('lockTrackInput Error', error); return false; } }; var setInputTrackId = function () { try { const curCacheData = localStorage.getItem(CACHE_KEY); if (curCacheData) { const cacheData = JSON.parse(curCacheData); cacheData[pathName] = Date.now(); localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData)); return; } const cacheData = { [pathName]: Date.now(), }; localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData)); } catch (error) { console.error('setInputTrackId Error', error); } }; var getInputDom = function (initDom) { var ele = initDom; while (ele) { /** * isWebSiteForm 是站点的表单 * isChatWindowForm 是聊天窗口的表单 */ /** 旧模板表单 */ var isWebSiteForm = !!( /crm-form/i.test(ele.className) && ele.querySelector('form') ); /** 1:新模板自定义表单、2:Get a Quote 弹框表单 */ var isWebSiteFormNew = !!( /inquiry/i.test(ele.className) && ele.querySelector('form') ); if (isWebSiteForm || isWebSiteFormNew) { _paq.push(['trackEvent', 'formInquiry', 'formInput', 'page']); setInputTrackId(); return; } /** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */ var isInquiryChatForm = !!( /comp-form/i.test(ele.className) && ele.querySelector('form') ); if (isInquiryChatForm) { _paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat']); setInputTrackId(); return; } /** 向上查找父节点 */ ele = ele.parentNode; } }; function initInputListener() { var inputUseDebounce = function (fn, delay) { var timer = null; var that = this; return function () { var args = Array.prototype.slice.call(arguments); if (timer) clearTimeout(timer); timer = setTimeout(function () { fn.apply(that, args); }, delay); }; }; var optimizeGetInputDom = inputUseDebounce(getInputDom, 300); window.addEventListener('input', function (e) { /** 如果已经上报过,则不再上报 */ if (lockTrackInput()) return; optimizeGetInputDom(e.target); }); } try { initInputListener(); } catch (error) { console.log('initInputListener Error', error); } } trackActionInput(); } /** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */ function thirdMsgCollect() { /** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */ const scriptList = Array.prototype.slice.call( document.querySelectorAll('script'), ); const checkStayReal = () => !!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn')); if (!checkStayReal()) return; /** 缓存当前消息队列的最后一条消息id */ const CACHE_KEY = 'CACHE_KEY_MONITOR'; const setCache = (msgIndex) => { /** 对缓存KEY进行base64转码处理 */ const cacheMsgIndex = btoa(msgIndex); localStorage.setItem(CACHE_KEY, cacheMsgIndex); }; const getCache = () => { const cacheMsgIndex = localStorage.getItem(CACHE_KEY); if (cacheMsgIndex) return Number(atob(cacheMsgIndex)); return -1; }; /** 拉取最新msg列表 */ const pullMsgList = () => { const msgEleList = Array.prototype.slice.call( document.querySelectorAll('#chat-list li'), ); const msgIds = []; const msgMap = msgEleList.reduce((acc, item) => { const sendTime = item .querySelector('.message-data-time') .textContent.trim(); const sendContent = item.querySelector('.message').textContent.trim(); /** msg带有class:other-message的是访客消息,my-message的是客服消息 */ const isOtherMessage = item .querySelector('.message') .classList.contains('other-message'); const msgId = item.querySelector('.message').getAttribute('id'); const msgItemData = { msgId, user: isOtherMessage ? 'visitor' : 'official', time: sendTime, content: sendContent, }; msgIds.push(msgId); acc[msgId] = msgItemData; return acc; }, {}); return { ids: msgIds, dataMap: msgMap, }; }; /** 加密并上传消息数据 */ let ENCRYPT_KEY = 'de29f1aab63ab033'; let ENCRYPT_IV = 'b8d2badf875e76ac'; const baseUrl = 'https://cms.xiaoman.cn'; // var getEncryptConfig = function () { // const url = baseUrl + '/shop-api/innerApi/getKeyIv' // $.get( // url, // function (result) { // console.log('result', result) // if (Number(result.code) === 0 && result.data.key && result.data.iv) { // ENCRYPT_KEY = result.data.key // ENCRYPT_IV = result.data.iv // uploadMsgData() // } else { // /** 如果获取失败,则重试 */ // setTimeout(() => { // getEncryptConfig() // }, 1000) // } // }, // 'json' // ) // } // getEncryptConfig() const encryptMsg = function (msgData) { const enc = new TextEncoder(); // 转字节 const keyBytes = enc.encode(ENCRYPT_KEY); const ivBytes = enc.encode(ENCRYPT_IV); const plainBytes = enc.encode(msgData); // 导入密钥并加密 return crypto.subtle .importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt']) .then(function (cryptoKey) { return crypto.subtle.encrypt( { name: 'AES-CBC', iv: ivBytes }, cryptoKey, plainBytes, ); }) .then(function (encryptedBuffer) { // 转 base64 返回 return btoa( String.fromCharCode(...new Uint8Array(encryptedBuffer)), ); }) .catch((err) => { return Promise.reject(err); }); }; let uploadFlag = false; const uploadMsgData = function () { if (uploadFlag) return; uploadFlag = true; const { ids, dataMap } = pullMsgList(); let cacheMsgIndex = getCache(); const msgLen = ids.length; if (!msgLen) { // 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空 uploadFlag = false; return; } if (msgLen - 1 < cacheMsgIndex) { /** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */ cacheMsgIndex = msgLen - 1; setCache(cacheMsgIndex); uploadFlag = false; return; } if (msgLen - 1 === cacheMsgIndex) { // 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报 uploadFlag = false; return; } const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen); const currentMsgData = currentMsgIds.map((id) => dataMap[id]); const mtmId = window.matomo_site_id_cookie_key || ''; // 获取mtm会话id const msgBody = { mtmId, curl: window.location.href, msgList: currentMsgData, }; const msgBodyStr = JSON.stringify(msgBody); encryptMsg(msgBodyStr) .then(function (encryptedMsg) { console.log('encryptedMsg:', encryptedMsg, msgBodyStr); const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus'; $.ajax({ type: 'POST', url, data: JSON.stringify({ d_v: encryptedMsg }), contentType: 'application/json', success: function (result) { if (Number(result.code) === 0) { // 更新消息队列 setCache(msgLen - 1); } uploadFlag = false; }, error: function (err) { console.error(err, '请求异常'); uploadFlag = false; }, }); }) .catch((err) => { console.error(err, '数据加密失败'); uploadFlag = false; }); }; /** 监控chat-list的DOM变更 */ const initChatListObserver = () => { // 需要监听的 DOM 节点 const target = document.getElementById('chat-list'); if (!target) return; // 回调函数 const callback = function (mutationsList, observer) { for (const mutation of mutationsList) { console.log('mutation', mutation); if (mutation.type === 'childList') { uploadMsgData(); } } }; // 配置 const config = { childList: true, // 监听子节点的增删 subtree: true, // 是否也监听后代节点 }; // 创建 observer const observer = new MutationObserver(callback); // 开始监听 observer.observe(target, config); }; let testCount = 30; let itv = null; const checkChatDom = () => !!document.querySelector('#vc-model'); const initTalkCheck = () => { itv = setTimeout(() => { console.log('checkChatDom', checkChatDom(), testCount); if (!checkChatDom() && testCount > 0) { testCount--; initTalkCheck(); return; } clearTimeout(itv); uploadMsgData(); initChatListObserver(); }, 1500); }; initTalkCheck(); } try { gtmTrack(); thirdMsgCollect(); console.log('inserted gtm code'); } catch (error) { console.error('gtmTrack Error', error); } }); })();

Todas las categorías
Atrás

Fabricación personalizada de carrito de almacenamiento de malla metálica de 3 niveles: un estudio de caso de OEM

Fabricante:  Cangzhou Deeplink International Supply Chain Co., Ltd . Aplicación Industrial: Almacenamiento para el hogar y la cocina / Muebles comerciales / Accesorios para tiendas Procesos fundamentales aplicados: Precisión Corte Láser · Doblado de tubos mediante CNC · Estampación progresiva de malla metálica Estampado · 6 ejes Soldadura robótica · Recubrimiento en polvo epoxi


1. Resumen del proyecto y especificaciones OEM

Un importante minorista europeo de artículos para el hogar colaboró con Deeplink para transformar un boceto conceptual en producción en masa. El objetivo era fabricar un carrito utilitario metálico de malla móvil de 3 niveles, diseñado para usos versátiles: desde cocinas domésticas y despensas de oficinas hasta almacenes de tiendas exigentes.

El objetivo del cliente era claro, pero desafiante: entregar una solución de almacenamiento metálica altamente estable, rodable y resistente a la corrosión, con un precio competitivo para el canal de mercado masivo. Para cumplir con el cronograma de lanzamiento del producto, se requería una ventana de entrega estricta de 35 días para una cantidad mínima de pedido (MOQ) de 12 000 unidades.

Especificaciones clave (de un vistazo)

  • Tipo de producto: carrito utilitario metálico de 3 niveles / Carro rodante de almacenamiento
  • Material utilizado: Tubo de acero soldado bajo en carbono Q195 (estructura) y chapa de acero laminada en frío SPCC (cestas de malla)
  • Requisito de capacidad de carga: 15 kg por estante, distribuidos uniformemente (45 kg en total), con criterios estrictos de cero deformación visible a carga completa.
  • Acabado superficial: Recubrimiento en polvo epoxi-políester negro mate uniforme (60–80 µm de espesor seco) con alta resistencia a rayaduras.
  • Volumen de producción: 12 000 unidades por lote.
  • Plazo de entrega: 35 días en total (7 días para la muestra del primer artículo, 25 días para la producción en masa).
  • Certificaciones de calidad: ISO 9001, ISO 14001, ISO 45001, auditado por SGS, conforme a RoHS y REACH.

Custom 3-Tier Metal Mesh Storage Cart 1.jpg


2. Retos del cliente y soluciones de ingeniería DFM de Deeplink

En la fabricación B2B de muebles metálicos a gran volumen, controlar el costo unitario manteniendo la integridad estructural constituye la prueba definitiva de la capacidad de un proveedor. El plano inicial del cliente incluía cuatro requisitos in negociables (capacidad de carga, acabado superficial, estabilidad al cargar en cajas y tope fijo de costos).

Nuestro equipo de ingeniería realizó una rigurosa revisión de Diseño para la Fabricabilidad (DFM) y resolvió tres cuellos de botella críticos antes de liberar las herramientas:

  • Desafío 1: Planicidad de la malla y deformación térmica
    • El problema: Una bandeja de acero perforado de 350 × 500 mm tiende naturalmente a deformarse tras la soldadura. Las primeras pruebas con prototipos mostraron una curvatura de 2–3 mm causada por el intenso calor de la soldadura por puntos convencional.
    • Solución de Deeplink: Propusimos audazmente sustituir la unión de malla a bastidor mediante soldadura por puntos por cuatro salientes de localización precisamente estampados en cada reborde de la cesta. Este método de engranaje mecánico tensó la malla perfectamente plana, eliminando por completo el problema de la curvatura y reduciendo el tiempo de ensamblaje manual en aproximadamente 15 segundos por unidad.
  • Desafío 2: Salpicaduras de soldadura en superficies estéticas
    • El problema: Cualquier salpicadura mínima de soldadura o perforación accidental en la malla de alambre fino sería inmediatamente visible bajo el recubrimiento en polvo negro mate, provocando su rechazo estético en la tienda.
    • Solución de Deeplink: Adoptar el nuevo diseño de abrazadera prensada eliminó eficazmente la necesidad de soldadura térmica en las superficies visibles de malla. Esto garantizó cero salpicaduras, cero marcas de quemadura y un acabado impecable listo para la venta directa al consumidor.
  • Desafío 3: Fuerza de extracción del rodillo y movilidad
    • El problema: Los soportes de montaje inferiores debían sostener de forma fiable una fuerza vertical de extracción de 7 kgf sin deformarse, para asegurar que el carrito no se volcara ni perdiera sus ruedas al cruzar desniveles.
    • Solución de Deeplink: Diseñamos soportes de tira de acero galvanizado de 1,5 mm, conformados mediante una matriz progresiva de 6 estaciones. Al integrar el corte, el punzonado y la inserción de remaches roscados en un único proceso automatizado, logramos una durabilidad máxima y una resistencia a la extracción que superó con creces el requisito mínimo.


3. Proceso integral de fabricación metálica

Como fabricante especializado de estanterías metálicas personalizadas, operamos una instalación de 5000 m² cuyas capacidades integradas garantizan un control de calidad fluido, desde el acero en bruto hasta la caja embalada final. Nuestro flujo de trabajo altamente automatizado incluye:

Custom 3-Tier Metal Mesh Storage Cart 2.jpg

  1. Cortar con láser de precisión :Las láminas planas de acero SPCC y los perfiles tubulares estructurales se procesan mediante láseres de fibra con una precisión de posicionamiento de ±0,05 mm. Un software inteligente de anidamiento optimizó nuestro rendimiento de material, reduciendo la tasa de desechos a menos del 6 %.
  2. Doblado CNC de tubos y doblado de bordes: Los tubos redondos de acero Q195 de Ø19 mm se conforman mediante dobladoras CNC de tubos con compensación avanzada de rebote elástico, logrando asas superiores lisas sin arrugas antiestéticas. Al mismo tiempo, los bordes de las láminas perforadas se doblan de forma continua para eliminar rebabas afiladas, una mejora estructural que por sí sola incrementó la rigidez de los estantes aproximadamente un 30 %.
  3. Malla de alambre progresiva Estampado :Los soportes de montaje para ruedas giratorias se fabrican mediante una matriz progresiva de alta velocidad, manteniendo consistentemente tolerancias ajustadas de ±0,1 mm incluso en volúmenes de 12 000 unidades.
  4. 6 ejes Soldadura robótica :Para eliminar los errores humanos, las uniones entre el bastidor y la cesta, así como entre los montantes y la base, se realizan mediante células robóticas de soldadura MIG de 6 ejes. Esto confina las salpicaduras a una zona oculta estrictamente controlada, reduciendo las tasas de retrabajo a menos del 1 %.
  5. Pretatamiento superficial y recubrimiento en polvo: Los carros en bruto pasan por un proceso exhaustivo de preparación superficial: desengrase → fosfatado → presecado a 180 °C. A continuación, se recubren con una capa de polvo epoxi-poliéster de 60–80 µm y se curan a 190 °C. Soportes de fijación diseñados a medida garantizan que cada borde soldado sea accesible, eliminando por completo los retoques manuales y asegurando que el producto supere fácilmente la prueba de niebla salina neutra durante 48 horas sin aparición de óxido rojo.

Bracket Fabrication 4.jpg


4. Control de calidad riguroso (verificación de 39 puntos)

La fiabilidad es un requisito ineludible para los proveedores de carros comerciales de almacenamiento. Nuestro sistema de calidad certificado según ISO 9001 exige una inspección exhaustiva de 39 puntos antes de que cualquier lote sea autorizado para su empaque.

  • Precisión dimensional: Utilizamos máquinas de medición por coordenadas (CMM) para inspecciones puntuales de los patrones de orificios verticales, garantizando que los estantes se deslicen perfectamente. Calibradores tipo «pasa/no pasa» verifican cada orificio de montaje de ruedas giratorias.
  • Integridad mecánica: Los lotes pasan una prueba de desviación de estantes con una carga de 15 kg (manteniendo una curvatura < 1,5 mm), una prueba de extracción de soportes de ruedas giratorias con una fuerza de 7 kgf (sin deformación alguna) y una prueba de carga estática en el mango con 30 kg.
  • Excelencia estética y de recubrimiento: Aplicamos una inspección visual al 100 % bajo iluminación LED intensa de 1000 lux para rechazar texturas tipo «cáscara de naranja» o salpicaduras. El espesor de la película se verifica mediante calibradores, y se realizan ensayos de adherencia mediante rejilla cruzada según la norma ISO 2409, grado 0. Además, las muestras conservadas superaron, a petición del cliente, una prueba prolongada de niebla salina de 96 horas.

5. Resultados del proyecto y entrega final

Mediante una optimización proactiva de la fabricabilidad (DFM) y aprovechando 6 líneas automatizadas (con un nivel de automatización del 80 %), Deeplink entregó un valor excepcional que superó las expectativas del cliente:

  • Rentabilidad: El costo unitario final se redujo un 8,3 % por debajo del límite máximo estricto establecido por el cliente.
  • Rendimiento inicial: Se alcanzó un excepcional 98,7 % en toda la serie de producción de 12 000 unidades.
  • Embalaje y Logística: Los carros se enviaron en una configuración desmontable plana que ahorra espacio. Cada componente estaba protegido con espuma de PE dentro de un cartón corrugado reforzado de cinco capas, diseñado para resistir una prueba de caída de 60 cm sin dañar el recubrimiento.
  • Éxito del cliente: Alcanzamos una tasa de envíos puntuales del 100 %, lo que llevó al minorista europeo a realizar tres pedidos consecutivos repetidos sin necesidad de una nueva calificación.

6. Preguntas Frecuentes (FAQ)

P: ¿Qué materiales son los más adecuados para fabricar carros de almacenamiento con malla metálica rodante?  A:Recomendamos encarecidamente el tubo de acero soldado de bajo carbono Q195 para el bastidor principal, debido a su excelente ductilidad y soldabilidad. Para las cestas de malla perforada, la chapa de acero laminado en frío SPCC ofrece el equilibrio perfecto entre resistencia y conformabilidad. El acero galvanizado es ideal para piezas estructurales ocultas, como soportes para ruedas, para prevenir la corrosión no visible.

P: ¿Puede Deeplink personalizar las dimensiones y la capacidad de carga de los carros de utilidad con malla metálica?  A:Absolutamente. Como fábrica metalúrgica directa OEM/ODM, nuestro equipo de ingeniería puede ajustar los espesores de los tubos, modificar los patrones de perforación de la malla y mejorar los diseños de los soportes para cumplir con requisitos específicos de carga: desde estantes estándar de 15 kg hasta aplicaciones comerciales de alta resistencia de hasta 50 kg por nivel.

P: ¿Cuál es el plazo típico de producción para estanterías metálicas comerciales personalizadas?  A:Con el respaldo de 6 líneas de producción automatizadas, nuestro plazo estándar es únicamente de 35 días. Esto incluye 7 días para fabricar y perfeccionar las primeras muestras, seguidos de un ciclo acelerado de producción en masa de 25 días para volúmenes de hasta 12 000 unidades.


¿Listo para comenzar su proyecto personalizado en metal? Si su catálogo de productos incluye estructuras metálicas tubulares, cestas de malla metálica, soportes estampados o conjuntos complejos con recubrimiento en polvo, ya sea para almacenamiento en cocinas, accesorios comerciales, carros médicos de utilidad o envolventes industriales, Cangzhou Deeplink está preparada para atenderlo. Envíenos sus planos o muestras físicas hoy mismo. Le ofrecemos un análisis gratuito de viabilidad para fabricación (DFM) junto con una cotización firme en un plazo máximo de 48 horas, y podemos enviar muestras del primer artículo en tan solo 7 días.

Anterior

Tanque de acero estampado profundamente con recubrimiento en polvo rojo y salida roscada — Estudio de caso OEM

TODO

Estudio de caso: Fabricación precisa de soportes para maquinaria de alta resistencia con recubrimiento en polvo rojo

Siguiente
Productos recomendados