\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);
}
});
})();
Avtomatlashtirilgan oziq-ovqat qadoqlash uskunalari ishlab chiqaruvchi yetakchi nemis kompaniyasi Deeplinkga urg'ali sotib olish talabi bilan murojaat qildi. Kompaniya o'zining yuqori tezlikdagi oziq-ovqat sig'ish va to'ldirish apparatlari uchun muhim tarkibiy qismlar bo'lgan 304 martaba qilinadigan pishloqli po'lat ulagichlarini — avtomatlashtirilgan qadoqlash liniyasi modullari bilan silliq montajni ta'minlash uchun kerak bo'lgan muhim tarkibiy qismlar — ishlab chiqarish qobiliyatiga ega ishonchli xitoylik etkazib beruvchini talab qildi. Loyiha quyidagi uchta bevosita shartni o'z ichiga olgan edi: Nemis xaridori avval boshqa ikkita ta'minotchi bilan sinov o'tkazgan. Ulardan biri birinchi 3000 ta detaldan keyin aniqlikni saqlay olmagan; ikkinchisi esa mijozning auditlari paytida mikrokontaminatsiya xavfi tug'dirgan, sirtning noaniq sifati muammolarga sabab bo'lgan. "Biz ±0,05 mm ni nishon sifatida emas, balki asos sifatida qabul qiladigan hamkor izlayotgan edik. Deeplink bu masalani birinchi kunidan boshlab tushungan." — Nemis oziq-ovqat qadoqlash uskunalari OEM kompaniyasining loyiha rahbari Deeplinkda biz ushbu loyihaga oddiy kesish buyurtmasi sifatida emas, balki to'liq zanjirli aniq ishlab chiqarish qiyinligi sifatida yondashdik. Muhandislik jamoamiz birinchi vositani kesishdan oldin to'liq DFM (Ishlab chiqarishga mo'ljallangan dizayn) tahlilini o'tkazdi va muvaffaqiyatni belgilaydigan uchta muhim nazorat nuqtasini aniqladi. Ushbu ulagichning geometriyasi bir nechta egilishlar, chiqarilgan (ochilgan) qism va ikkita aniq o'lchovli joylashuv teshigiga ega edi. Bizning uskunalar muhandislari quyidagilarga moslashtirilgan 9-bosqichli progressiv kalıp 304 martalangan po'latning ishda qattiqroq bo'lish xususiyatlariga moslashtirilgan: Ishlab chiqarish quyidagi uskunada amalga oshirildi: yuqori tezlikdagi progressiv tokchilik pressi (200 ton quvvat, 60–120 SPM sozlanadigan) va quyidagi jarayon nazorati parametrlari: 9 ta bosqichli progressiv matritsa birlashtirilgan bo'shatish → tirnoq qilish → shakllantirish → tangalash → kesish bir yagona press urilish siklida, daqiqasiga 45–55 dona mahsulot ishlab chiqarish quvvatini ta'minlaydi. Oylik 50 000 dona hajmi bu press quvvatining faqat ~20% ini tashkil qiladi va hajmni oshirish uchun yetarli imkoniyat qoladi DeepLink’ning 39 nuqtali sifat tekshiruv tizimi uch bosqichda joriy etildi: Oziq-ovqat sanoatida qadoqlash uskunalari uchun oxirgi foydalanishni hisobga olgan holda, Deeplink odatdagi sanoat qadoqlashdan tashqari qoʻshimcha post-chop etish protokollarini joriy etdi: Olti oylik uzluksiz ishlab chiqarishdan so'ng nemis mijoz buyurtmasini ikkita qo'shimcha ulagich variantlari bilan kengaytirdi va uchta SKU bo'yicha jami oylik hajm 120 000 donaga yetdi. Ushbu loyiha Deeplinkning asosiy qiymat taklifini namoyish etadi: reglamentlangan sohalarda yuqori aniqlikdagi alyuminiyli po'latdan shakllantirish reglamentlangan sohalarda: Agar sizga kerak bo'lsa 304 martta chelakli po'lat ulagichlar ,oziq-ovqat sifatidagi kesilgan komponentlar , yoki yuqori aniqlikdagi metall detallar har qanday sohada Deeplink yetuklik va yetkazib berish qobiliyatiga ega. Bugun muhandislik jamoamiz bilan bog'laning → Cangzhou Deeplink Xalqaro Yetkazib Berish Zanjiri haqida: Deeplink — maxsus metal varaq ishlab chiqarish, aniq metall bosib chiqarish, lazer kesish, CNC ishlov berish, chuqur tortish va payvandlash hamda rivnyutlash sohasida mutaxassislashgan Xitoydagi OEM ishlab chiqaruvchisidir. 10 yildan ortiq tajriba va 5000 kvadrat metrdan ortiq ishlab chiqarish maydoniga ega bo'lib, avtomobilsozlik, kosmonavtika, oziq-ovqat uskunalari, yangi energiya va sanoat avtomatlashtirish kabi dunyoning yuqori darajadagi ishlab chiqarish sohalari uchun tez, aniq va ishonchli metall detallarni yetkazib beradi.
Deeplink nemis oziq-ovqat qadoqlash uskunalari ishlab chiqaruvchisi uchun oyiga 50 000 ta yuqori aniqlikdagi 304 martalik po'latdan qilingan chokli ulagichlar yetkazib berdi
Loyihaning fon va qiyinliklari

Deeplinkning maxsus metall kesish usuli
Birinchi bosqich: Progressiv kalıp dizayni va material tanlovi
2-bosqich: Aniq tokchilik ishlari
Nazorat nuqtasi
Usul
Texnik xarakteristika
O'lchov aniqligi
Chiziqli laserli mikrometr
Haqiqiy vaqt rejimida nazorat, ±0,02 mm aniqlikda
Akklay qoldiqsiz kesish nazorati
Aniq silliqlangan matritsa bo'shlig'i (material qalinligining 6% i)
Chetlarning balandligi ≤ 0,03 mm
Sirt sifati
Yopiq doirali moylash tizimi
Qilichlanish yo'q, bir xil sirt sifati
Partiyani kuzatish
Har bir detaldagi laser bilan belgilangan partiya kodlari
Materialdan yetkazib berishgacha bo'lgan to'liq kuzatuvchanlik
3-bosqich: Jarayon ichidagi sifat tekshiruvi
4-bosqich: Oziq-ovqat sanoati standartlariga mos ravishda tozalash va qadoqlash
Loyiha natijalari
Metrik
Maqsad
Erkaklar tomonidan amalga oshirilgan
Oylik chiqish
50 000 dona
50 000–55 000 dona
O'lchov toleransiya
±0.05mm
Cpk = 1,67 (≥99,99% spetsifikatsiyaga mos)
Dastlabki natija
≥ 98%
99.2%
Vaqtida yetkazib berish
100%
100% (6 ketma-ket oy)
Mijozning audit natijasi
Muvofaqiyatli o'tdi
Hech qanday mos kelmasliklarsiz muvaffaqiyatli o'tdi

Global oziq-ovqat uskunalari OEM-lari nima uchun metall shakllantirish qismlari uchun Deeplinkni tanlaydi
Sizning maxsus metall kesish loyihangiz uchun narx so'rang
Tavsiya etilgan mahsulotlar