\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);
}
});
})();
Metallhöljen för medicintekniska apparater är precisionstillverkade höljen av rostfritt stål som skyddar elektroniken, sensorerna och strömbatterierna i patientövervakningsutrustning, infusionspumpar och diagnostiska instrument. I denna fallstudie visar Deeplink – en ISO 9001-certifierad OEM för tillverkning av plåt och stansning – hur en tillverkare av medicinsk utrustning erhöll höljen av rostfritt stål 316L utan några defekter med med dimensionsnoggrannhet på ±0,05 mm , kanter utan burrar, elektropolerade ytor och full spårbarhet per parti. Projektet kombinerade DFM-granskning, progressiv diesdjupdragning, fiberlaserbegränsning, CNC-avslutning och ett kontrollschema med 39 steg; varje del levererades med materialcertifikat, dimensionsrapporter och partispårbarhet för att stödja kundens krav enligt ISO 13485 och FDA:s regelverk 21 CFR 820. Kunden kom till Deeplink med en krävande specifikation. Hållaren måste uppfylla sex krav som skiljer medicinsk kvalitets plåtbearbetning från vanlig industriell bearbetning: Deeplinks lösning var en fyrfasig ingenjörsarbetsgång byggd kring ett enda princip: designa processen innan verktygen . Varje fas nedan ingår i Deeplinks helhetslösning för plåtbearbetning , som omfattar stansning, djurdragning, laserskärning, CNC-bearbetning, svetsning och ytbehandling under ett tak. Innan någon metall skars, genomförde Deeplinks ingenjörer en tillverkningsanpassad designgranskning (DFM) av kundens 2D-ritningar och 3D-modeller. De kontrollerade dragförhållandet, väggtunnning, återböjning och positionen av detaljer för att bekräfta att höljet kunde formas i ett begränsat antal dragsteg, varefter blankstorleken och pressens tonnage fastställdes. Det valda materialet var SUS316L — föredraget framför SUS304 på grund av dess högre korrosionsbeständighet i kliniska och desinficerande miljöer. Varje spole levererades med ett materialcertifikat och godkändes vid inkommande inspektion avseende kemisk sammansättning och yttillstånd. För vägledning om hur man väljer rätt råmaterial, se vilka material som är bäst för anpassade metallstansdelar . Höljet formades med en flerstationers progressiv stans på högprecisionsspressar: blankning, första dragning, omformning, trimning och borrning sker i en kontinuerlig linje, så att varje hölje är identiskt och fritt från svetsnätdar. Väggtjockleken regleras genom järning mellan stadierna; smörjning och hantering av dragförhållandet förhindrar revor och ytskador; samt kritiska mått hålls inom ±0,05 mm . Eftersom karossen dras från ett enda blank är resultatet ett sömlöst, läckagefritt skal med bättre hållfasthet och utmattningstålighet än svetsade samlingar. Relaterad läsning: grundläggande kunskap om metall djupdragning och de viktigaste fördelarna med högprecisionsdjupdragna delar . Utforska vår precision djupdragna delar kapaciteten. Fiber laserbearbetning skapade monteringshål, ventiler och utskärningar med ±0,03 mm positionering , medan Cnc-mackning tillagda gängade hål, upphöjda ytor och tätytor som djupdragning inte kan producera. Ett slutligt avkantnings- och kantförbehandlingssteg – kombinerat med skarpa verktyg och kontrollerad diespelrum på 6–10 % av materialtjockleken – avlägsnade mikroskopiska kantburrar så att den färdiga delen är säker att hantera och montera. Se även: exakt laserskärningsteknik . Delar var elektropolerade och passiverade : elektropolering avlägsnar mikroburrar och inbäddade partiklar, minskar ytgrovheten till Ra ≤ 0,4 μm och förbättrar korrosionsbeständigheten; passivering återställer den skyddande kromoxidlagret. Gehåsen genomgick sedan en neutral saltnebelsprovning i 72 timmar utan synlig korrosion. De färdiga delarna rengjordes, skyddades individuellt och förpackades för att undvika repor under transport. Vår premiumguide för metallytbehandling förklarar de tillgängliga alternativen i mer detalj. Leveranskedjan för medicintekniska produkter tolererar inte oväntade kvalitetsproblem. Deeplink kör ett dokumenterat kvalitetssystem enligt ISO 9001 med 39 QA-kontroller för varje projekt — samma regelverk som används för OEM:er inom bilindustrin, elektronik och energi: Varje parti är spårbar: materialcertifikat → produktionsparti → inspektionsregister → leverans , så att ett enskilt hölje kan spåras tillbaka till dess bandrulle och pressgång. Denna dokumentation är utformad för att integreras i medicinska OEM:ers egna kvalitetssystem och stödjer kraven på spårbarhet och enhetshistorik från FDA 21 CFR 820 och Komponentleverans i enlighet med ISO 13485 . Vid projektets avslut fick kunden höljen som uppfyllde samtliga krav i specifikationen – och, avgörande, dokumentation som bevisade detta: Utöver detta projekt samarbetar tillverkare av medicintekniska apparater med Deeplink eftersom fabriken kombinerar expertis inom stansning med omfattande kunskaper som en komplett leverantör av plåtprodukter: Relaterad läsning: precisionsskärmda plåtskåp på begäran för elektronisk utrustning , högprecisionens djupdragning och CNC-bearbetning och matgrad 304 rostfritt stål tillverkning . Se alla projekt på vår prestandafall sida, eller läs om hur metallstansning stödjer OEM-anpassning . De vanligaste alternativen är SUS304 och SUS316L rostfritt stål samt aluminiumlegeringar när vikt är avgörande. Deeplink rekommenderar SUS316L för höljen som utsätts för saltlösning, desinfektionsmedel eller upprepad rengöring, eftersom dess högre molybdenhalt ger överlägsen motstånd mot punktkorrosion och korrosion. Alla material levereras med certifikat och genomgår inkommande inspektion. Deeplink upprätthåller regelbundet toleranser på ±0,05 mm för kritiska formade dimensioner och ±0,03 mm för positionering av laserskurna hål, med ännu striktare värden möjliga för CNC-fräsade funktioner. Den exakta toleransen beror på material, tjocklek och delgeometri – DFM-granskningen vid offertstadiet fastställer den slutgiltiga toleransen. Deeplink använder ett dokumenterat kvalitetsledningssystem enligt ISO 9001 med 39 kvalitetskontroller per projekt, intern kontroll och full spårbarhet för varje parti. För kunder inom sjukvårdssektorn levererar Deeplink materialcertifikat, dimensionsrapporter och partispårbarhet som stödjer efterlevnad av ISO 13485 och FDA:s 21 CFR 820. Om du kräver en specifik certifiering eller granskning, ange detta vid RFQ så att det kan bekräftas. Burrkontrollen påbörjas i verktyget: skarpa skärande kanter och stansavstånd hålls vid 6–10 % av materialtjockleken. Delarna passerar sedan genom avburring, kantbehandling och, om specificerat, elektropolering, vilket tar bort mikroburrar på molekylär nivå. Färdiga kanter kontrolleras visuellt och dimensionellt innan förpackning. Ja. Deeplink stödjer både prototyputveckling och volymproduktion från samma ingenjörsteam. För många delar kan provleverans ske inom 3 dagar; när provet godkänts kan progressiva stansverktyg och automatiserade linjer skala upp till högvolyms, konsekvent produktion. Skicka ditt ritningsunderlag för en DFM-granskning och offert. Skicka dina 2D-ritningar eller 3D-modeller – Deeplinks ingenjörer granskar tillverkningsbarhet, toleranser och kostnad, och återkommer med en offert inklusive provleveranstid. Ny på OEM-sourcing? Läs vår guide till hur du lämnar ritningar för snabb och exakt offertberäkning .
Metallhöljen för medicintekniska apparater: En fallstudie om 316L-rostfritt stål utan defekter
Metallhöljen för medicintekniska apparater: En fallstudie om 316L-rostfritt stål utan defekter

Djupdragna höljen för medicinska apparater i rostfritt stål 316L med elektropolerad yta – Deeplink precision metal fabrication.
01Case Snapshot
02Utmaningen — Vad den medicinska OEM-kunden krävde
03Den tekniska lösningen
3.1 Granskning av DFM och materialval
3.2 Progressiv stans & djupdragning – ihopsatt formning i ett stycke

Progressiv verktygsdjupdragningsslinje som tillverkar sömlösa rostfria stålhöljen på Deeplinks stansverkstad. 3.3 Laserbegränsning & CNC-avslutning — Precisionsegenskaper
3.4 Ytbehandling och renlighet
04Kvalitetssystem och spårbarhet – 39 kvalitetskontroller per projekt

Dimensionell verifiering av en medicinsk höljeskåp i rostfritt stål under Deeplinks slutliga inspektionsfas.
05Resultat
06Varför globala medicinska OEM-företag väljer Deeplink
07Vanliga frågor
Vilka material används för metallskåp till medicintekniska apparater?
Vilka toleranser kan Deeplink hålla för plåtdelar till medicintekniska apparater?
Är Deeplink certifierad för tillverkning av medicintekniska produkter?
Hur säkerställer Deeplink att det inte uppstår några burrar på rostfritt stål?
Kan Deeplink stödja både prototyper och volymproduktion?
Få en DFM-granskning och offert för dina metallkomponenter till medicintekniska apparater
Rekommenderade produkter