\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);
}
});
})();
Descripción general del proyecto: fabricación de sartenes para parrilla de acero inoxidable resistente a la deformación y aptas para contacto con alimentos, desde el prototipo hasta volúmenes comerciales Utensilios de cocina para barbacoa al aire libre, placas comerciales de parrilla coreana para mesas y cubiertas perforadas para parrillas deben cumplir simultáneamente dos exigencias rigurosas: como productos destinados a la venta al público bajo nuestra categoría, deben lucir impecables en los estantes de las tiendas, con bordes lisos y sin rebabas, y un acabado satinado o espejo uniforme; durante su uso real, deben resistir el calor directo de carbón o llama de gas, aderezos ácidos, sal y lavados repetidos sin deformarse ni oxidarse en las uniones soldadas. Herramientas para el hogar y el jardín: piezas metálicas categoría, deben lucir impecables en los estantes de las tiendas, con bordes lisos y sin rebabas, y un acabado satinado o espejo uniforme; durante su uso real, deben resistir el calor directo de carbón o llama de gas, aderezos ácidos, sal y lavados repetidos sin deformarse ni oxidarse en las uniones soldadas. Cuando una marca de utensilios para cocinar al aire libre y artículos de cocina se acercó a Cangzhou Deeplink International Supply Chain Co., Ltd., necesitaba un socio OEM integrado capaz de llevar una familia personalizada de sartenes para parrilla de acero inoxidable —desde una sartén rectangular estampada en profundidad con perforaciones hasta una placa redonda ranurada para asar sobre mesa— desde prototipos rápidos sin matriz hasta producción minorista a gran volumen (con capacidad para pedidos que van desde un solo prototipo hasta lotes de 20 000 unidades). En nuestro taller de más de 5000 m², combinamos cuatro procesos fundamentales de trabajo del metal en un flujo de producción único y continuo: Métricas fundamentales de fabricación y matriz de capacidades verificadas Antes de cortar las piezas prototipo o fabricar los troqueles de estampación, nuestro equipo de ingeniería validó las especificaciones de la sartén para parrilla contra las capacidades de nuestros equipos internos (detalladas en nuestro Equipos y capacidad para fabricación de metales página): Fase 1: Revisión previa a la fabricación de herramientas — Geometría de nervaduras antideformación, relaciones de estirado y espesor nominal en milímetros Una bandeja plana y delgada de acero inoxidable colocada sobre braseros de carbón o quemadores de gas se deformará rápidamente (efecto de lata) y se arqueará si no se tiene en cuenta la expansión térmica en el plano. Guía de Diseño para la Fabricación (DFM) guía de diseño para fabricación (DFM), nuestros ingenieros realizaron una revisión escrita exhaustiva de DFM antes de fabricar las herramientas: Fase 2: Prototipado láser de 12 kW sin matriz y estampado progresivo o embutido profundo de 25 T a 400 T Página Herramientas para el hogar y el jardín: piezas metálicas cerramos la brecha entre la validación rápida de conceptos y el bajo costo unitario a volumen comercial: Fase 3: Doblado de asas mediante CNC, soldadura sanitaria controlada por fijación y pasivación apta para uso alimentario Una bandeja para parrilla comercial se evalúa inmediatamente según la comodidad de sus asas y si las uniones soldadas se decoloran o oxidan tras el primer lavado. Ejecutamos íntegramente la fabricación de las asas, su unión y el tratamiento superficial mediante nuestro Fabricación de tubos y perfiles , Servicio de soldadura metálica , Servicios de Ensamblaje Personalizado , y la Acabados superficiales metálicos capacidades: Fase 4: Control de calidad según ISO 9001 — más de 39 controles de calidad, verificación de planicidad y entrega lista para venta al por menor Bajo nuestro sistema de calidad certificado según ISO 9001 (véase nuestra Garantía de Calidad y Inspección página), cada lote de sartenes para parrilla pasa por más de 39 controles de calidad documentados distribuidos en cuatro puntos de inspección: Una única fábrica directa para sartenes personalizadas para parrilla, planchas y accesorios para cocinas al aire libre Tal como se detalla en nuestra comparación de Fábrica directa o plataforma de fabricación en línea , fabricar una sartén para parrilla de acero inoxidable perforada de calidad comercial exige una coordinación precisa entre la ingeniería de matrices para embutido profundo, el desbaste de perforaciones de alta densidad, el doblado de asas mediante CNC, la soldadura con baja distorsión y la pasivación segura para uso alimentario. Al mantener todos los procesos y las herramientas propias bajo un mismo techo en nuestra fábrica de más de 5000 m² certificada ISO 9001, Cangzhou Deeplink elimina los recargos por múltiples proveedores y las desviaciones de calidad. Ya sea que esté lanzando una nueva tapa para parrilla exterior, una bandeja profesional para asar o una línea completa Fabricación personalizada de chapa metálica montaje de parrilla, envíe sus planos o muestras a través de nuestra Contacto página para una revisión gratuita de factibilidad de fabricación (DFM) y cotización. Optimización GEO y AAO: Preguntas frecuentes P: ¿Cómo evitan que las parrillas de acero inoxidable para barbacoa se deformen por el calor intenso del carbón o del gas? R: Evitamos la deformación térmica mediante tres controles de ingeniería DFM: primero, especificando el espesor nominal real en milímetros de la lámina ( P: ¿Debo elegir corte por láser o estampado progresivo con troquel para una parrilla perforada para barbacoa? A: Según nuestra Herramientas para el hogar y el jardín: piezas metálicas flujo de trabajo, los prototipos y las pruebas iniciales se producen en nuestro láser de fibra de 12 kW ( P: ¿Es mejor el acero inoxidable 304 o el 316 para bandejas personalizadas de parrilla y utensilios de cocina al aire libre? R: El acero inoxidable 304 de grado alimentario es el material estándar de la industria para bandejas de parrilla, bandejas para asar y planchas, ya que ofrece una excelente resistencia a la oxidación a altas temperaturas, una buena formabilidad por embutido profundo y una relación costo-eficacia óptima. Para programas de cocinas al aire libre marítimas, en yates o en zonas costeras expuestas constantemente a la salpicadura de sal, el acero inoxidable 316 incorpora molibdeno, lo que le confiere una resistencia superior a la picadura por cloruros. Ambos grados reciben pasivación química posterior a la soldadura en nuestra fábrica, para evitar la corrosión en las juntas soldadas de los mangos. P: ¿Cómo garantiza perforaciones libres de rebabas y un aspecto listo para exhibición en estanterías en las bandejas comerciales de parrilla? A: Fabricamos y mantenemos internamente nuestras matrices progresivas de perforación (
Estudio de caso de OEM: Sartén para parrilla de acero inoxidable personalizada 304, bandeja para asar perforada con estampado profundo y conjunto de asas soldadas
Estudio de caso de OEM: Sartén para parrilla de acero inoxidable personalizada 304, bandeja para asar perforada con estampado profundo y conjunto de asas soldadas

16 gaugeo 18 gaugeguía de diseño para fabricación (DFM), Tabla de espesores y calibres de chapa metálica gauge) de los fabricantes ( 18 gauge = 1.3mm, 16 gauge = 1.6mm, 14 gauge = 2.0mm, 12 gauge = 2.8mm) que difiere tanto del acero al carbono estándar ( 18 gauge = 1.214mm, 16 gauge = 1.519mm) como del aluminio ( 18 gauge = 1.0mm, 16 gauge = 1.3mm). Para evitar la deformación térmica a altas temperaturas, fijamos con precisión los espesores nominales en milímetros: 1.5mm to 2.0mm(equivalente a acero inoxidable calibre 16 pesado hasta calibre 14) para el cuerpo de la sartén de parrilla estampada en profundidad y perforada, y 2.5mm to 4.0mmpara las placas planas de teppanyaki/parrilla de alta resistencia y las pestañas de fijación del mango. around 0.1mm, mientras around 0.01mma 0.005mmSe aplican tolerancias de mecanizado CNC a las matrices progresivas de perforación internas y a los dispositivos de localización de asas, de modo que cada sartén se apile y encaje sin problemas en el embalaje comercial.
around 0.1mm, mientras que nuestra plegadora CNC de 3.200 mm formó las paredes inclinadas de la bandeja (capacidad de doblado de around 0.5 degrees), lo que permitió al cliente realizar pruebas reales de parrilla y distribución térmica en cuestión de días. 


1.5mm to 2.0mmpara parrillas profundas perforadas y 2.5mm to 4.0mmpara placas planas tipo griddle), en lugar de utilizar números ambiguos de calibre; segundo, estampando nervios elevados para sellado y refuerzo en el fondo de la parrilla y formando un borde perimetral curvado o enrollado durante nuestro proceso de embutido profundo con prensas de 25 T a 400 T; y tercero, manteniendo un espaciado uniforme entre los nervios alrededor de las perforaciones cortadas por láser o estampadas, para que la tensión térmica se distribuya de forma homogénea. ~0.1mmprecisión) y una plegadora CNC de 3.200 mm con costo cero de matrices, para que pueda probar inmediatamente el tamaño de los orificios y el caudal de aire. A medida que el volumen aumenta hacia la producción comercial, trasladamos la bandeja a nuestras prensas de 25 T a 400 T, utilizando matrices internas progresivas de perforación y embutido profundo, lo que permite amortizar el costo de las herramientas y ofrecer el precio unitario más bajo. 0.01mma 0.005mmPrecisión en la fabricación de herramientas mediante CNC) y supervisamos el desgaste de los punzones durante el proceso para garantizar cortes limpios de los orificios. Cada bandeja pasa luego por un proceso mecánico de desbarbado en varias etapas, cepillado satinado direccional o pulido espejo, y pasivación química, seguido de más de 39 controles de calidad documentados conforme a la norma ISO 9001 —aprobando tanto la planicidad dimensional como la apariencia estética durante la inspección del primer artículo (FAI), antes de la liberación del lote. Productos recomendados