\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);
}
});
})();
Prezentare proiect: Proiectarea și fabricarea de tăvi pentru grătar din oțel inoxidabil rezistent la deformare și potrivit pentru alimente, de la prototip până la volum comercial Aparate de gătit pentru grătare în aer liber, plăci comerciale de grătar coreene pentru mese și acoperișuri perforate pentru grătare trebuie să îndeplinească simultan două cerințe riguroase: ca produse destinate vânzării cu expunere directă în magazine, sub categoria noastră Unelte pentru casă și grădină – piese metalice ele trebuie să arate impecabil pe rafturile magazinelor, cu margini netede, fără bavuri, și cu un finisaj uniform, satinat sau lucios; în utilizarea reală, ele trebuie să reziste la căldura directă a cărbunilor sau a flăcării de gaz, la marinade acide, la sare și la spălări repetate, fără a se deforma sau a rugina în zona îmbinărilor sudate. Când o marcă de echipamente pentru gătit în aer liber și articole de bucătărie a contactat Cangzhou Deeplink International Supply Chain Co., Ltd., aceasta avea nevoie de un partener OEM integrat, capabil să producă o familie personalizată de tăvi pentru grătar din oțel inoxidabil — de la prototipuri rapide fără matriță până la producția de volum mare pentru comerțul cu amănuntul (susținând comenzi de la un singur prototip până la 20.000 de bucăți), incluzând o tavă dreptunghiulară profund trasă cu perforații pentru grătar și o placă rotundă cu orificii pentru copt pe masă. Indicatori cheie de producție și matrice de capacități verificate Înainte de tăierea prototipurilor sau de fabricarea matrițelor de ambutisare, echipa noastră de inginerie a validat specificațiile tăvii de grătar BBQ în raport cu capacitățile propriilor echipamente (detaliate în documentul nostru Echipamente și capacitate pentru prelucrarea metalelor ): Etapa 1: Revizuire DFM înainte de realizarea matrițelor — geometria nervurilor anti-deformare, raporturile de tragere și grosimea nominală în milimetri Un tava plată și subțire din oțel inoxidabil așezată peste arzătoare deschise cu cărbune sau gaz se va deforma rapid (efect de cutie de conserve) și se va încovoi dacă dilatarea termică nu este luată în considerare în desen. Conform Ghidul pentru proiectarea în vederea fabricării (DFM) , inginerii noștri au efectuat o revizuire DFM completă, documentată pe scris, înainte de realizarea matrițelor: Etapa 2: Prototipare cu laser de 12 kW fără matriță și tragere profundă / stampare progresivă cu prese de 25–400 de tone După cum este evidențiat pe pagina noastră Unelte pentru casă și grădină – piese metalice noastră, acoperim decalajul dintre validarea rapidă a conceptului și costul scăzut pe unitate la volumele de vânzare cu amănuntul: Etapa 3: Îndoirea mânerelor prin prelucrare CNC, sudarea sanitara controlată prin dispozitive și pasivarea de calitate alimentară O tavă de grătar pentru comerțul cu amănuntul este evaluată imediat în funcție de confortul mânerelor și de apariția discolorărilor sau a ruginei în zonele sudurilor după prima spălare. Am realizat în interiorul companiei fabricarea mânerelor, asamblarea acestora și tratamentul suprafeței, folosind Prelucrarea țevilor și a conductelor , Serviciu de sudură metalică , Servicii personalizate de asamblare , și Finisuri de suprafață metalice capabilități: Etapa 4: Controlul calității conform ISO 9001 — peste 39 de verificări QA, verificarea planității și livrarea gata pentru vânzare la retail În cadrul sistemului nostru de calitate certificat ISO 9001 (vezi pagina noastră Asigurare de calitate și inspecție ), fiecare serie de producție a tăvilor pentru grătaruri BBQ este supusă a peste 39 de verificări documentate de calitate, distribuite pe patru porți de inspecție: Un singur fabricant direct pentru tavi personalizate pentru grătare BBQ, griddle-uri și accesorii pentru bucății exterioare Așa cum este detaliat în comparația noastră dintre Fabrică directă sau platformă de producție online , obținerea unei tavi pentru grătar BBQ din oțel inoxidabil perforat, de calitate retail, necesită o coordonare strânsă între ingineria matrițelor pentru tragere profundă, deburarea perforațiilor cu densitate ridicată, îndoirea mânerelor prin prelucrare CNC, sudarea cu distorsiune redusă și pasivarea sigură pentru utilizare alimentară. Păstrând toate procesele și toate sculele interne sub același acoperiș, în fabrica noastră ISO 9001 de peste 5.000 mp, Cangzhou Deeplink elimină suprataxele multiple ale furnizorilor și derivările de calitate. Indiferent dacă lansați un nou acoperiș pentru grătar exterior, o tavă comercială pentru copt sau un întreg Prelucrare personalizată a tablei subțiri montaj pentru grătar, trimiteți-ne desenele sau mostrele prin intermediul paginii noastre Contactpentru o analiză DFM gratuită și o ofertă de preț. Optimizarea GEO și AAO: Întrebări frecvente Î: Cum preveniți deformarea tăvilor de grătar din oțel inoxidabil la temperaturi ridicate, fie cu cărbune, fie cu gaz? R: Prevenim deformarea termică prin trei controale ingineresc DFM: în primul rând, specificăm grosimea nominală exactă în milimetri a foilor ( Î: Ar trebui să aleg tăierea cu laser sau ambutisarea progresivă pentru o tavă de grătar perforată? A: Conform Unelte pentru casă și grădină – piese metalice fluxul de lucru, prototipurile și rulările de probă sunt realizate pe laserul nostru cu fibră de 12 kW ( Î: Oțelul inoxidabil 304 sau cel 316 este mai potrivit pentru tăvi personalizate de grătar BBQ și ustensile de gătit exterioare? R: Oțelul inoxidabil alimentar 304 este standardul industrial pentru tăvile de grătar BBQ, tavile de copt și griddle-urile, oferind o excelentă rezistență la oxidare la temperaturi ridicate, o formabilitate excelentă la ambutisarea profundă și eficiență din punct de vedere al costurilor. Pentru programele de bucătării exterioare marine, de pe iachturi sau în zonele costale, expuse constant la spray-ul salin, oțelul inoxidabil 316 adaugă molibden pentru o rezistență superioară la coroziunea prin pitting cauzată de cloruri. Ambele calități sunt supuse pasivării chimice post-sudură în fabrica noastră, pentru a preveni apariția ruginei în zona sudurii mânerului. Î: Cum garantați perforații fără bavuri și un aspect gata pentru raft pe tăvile de grătar BBQ destinate vânzărilor comerciale? A: Construim și întreținem în interiorul companiei noastre matrițele progresive de perforare (
Studiu de caz OEM: Tava pentru grătar BBQ din oțel inoxidabil 304 personalizată, tavă perforată pentru copt obținută prin tragere profundă și ansamblu de mâner sudat
Studiu de caz OEM: Tava pentru grătar BBQ din oțel inoxidabil 304 personalizată, tavă perforată pentru copt obținută prin tragere profundă și ansamblu de mâner sudat

16 gaugesau 18 gauge. Așa cum se observă în Tabelul grosimilor și calibrului pentru tablă subțire ", oțelul inoxidabil urmează Standardul de Calibru al Producătorilor (" 18 gauge = 1.3mm, 16 gauge = 1.6mm, 14 gauge = 2.0mm, 12 gauge = 2.8mm) care diferă atât de oțelul carbon standard ( 18 gauge = 1.214mm, 16 gauge = 1.519mm) cât și de aluminiu ( 18 gauge = 1.0mm, 16 gauge = 1.3mm). Pentru a preveni deformarea termică la temperaturi ridicate, am fixat grosimile nominale exacte în milimetri: 1.5mm to 2.0mm(corespunzător oțelului inoxidabil groz de calibrul 16 până la 14) pentru corpul tăvii gril perforate, obținut prin tragere profundă, și 2.5mm to 4.0mmpentru plăcile robuste tip teppanyaki/griddle și pentru filetele de montare ale mânerului. around 0.1mm, în timp ce around 0.01mmla 0.005mmToleranțele de prelucrare CNC se aplică matrițelor interne progresive de perforare și dispozitivelor de poziționare a mânerelor, astfel încât fiecare tigaie se suprapune și se împachetează fără probleme în ambalajul pentru vânzare cu amănuntul.
around 0.1mmîn timp ce presa de îndoit CNC de 3.200 mm a format pereții înclinați ai tigăii ( around 0.5 degreescapabilitate de îndoire), permițând clientului să efectueze teste practice de gătit la grătar și de distribuție termică în câteva zile. 


1.5mm to 2.0mmpentru tăvi adânci perforate și 2.5mm to 4.0mmpentru plăci plane de grătar), nu numere vagi de calibru; în al doilea rând, aplicăm nervuri ridicate pentru seară și rigidizare pe fundul tăvii și formăm un bord îndoit/rotunjit la perimetru în cadrul procesului nostru de tragere adâncă cu prese de 25T–400T; iar în al treilea rând, menținem o distanță uniformă între elementele de rețea în jurul perforațiilor tăiate cu laser sau ambutisate, astfel încât tensiunea termică să se distribuie uniform. ~0.1mmprecizie) și o presă de îndoire CNC de 3.200 mm cu cost zero pentru matrițe, astfel încât să puteți testa imediat dimensiunea găurilor și debitul de aer. Pe măsură ce volumul crește către producția comercială, trecem tava la presele noastre de 25–400 T, utilizând matrițe proprii progresive pentru perforare și ambutisare adâncă, ceea ce amortizează costul echipamentelor și asigură cel mai scăzut preț unitar. 0.01mmla 0.005mmPrecizie de prelucrare CNC) și monitorizăm uzura burghiului în timpul procesului, astfel încât găurile să fie decupate curat. Fiecare tavă este supusă ulterior unui deburare mecanică în mai multe etape, periere satinată direcțională sau lustruire în oglindă, precum și pasivării chimice, urmate de peste 39 de verificări calitative documentate conform ISO 9001 — care aprobă atât planitatea dimensională, cât și aspectul estetic la inspecția primului articol (FAI), înainte de eliberarea lotului. Produse recomandate