\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);
}
});
})();
Метални корпуси за медицинске уређаје су прецизно обрађени корпуси од нерђајућег челика који штите електронику, сензоре и енергетске ћелије унутар пацијената, инфузијске пумпе и дијагностичких инструмената. У овој студији случаја, Диеплинк сертификација ИСО 9001 производње листова метала и штампање ОЕМ показује како је произвођач медицинске опреме обуви од нерђајућег челика 316L без неисправности са размерна допуштања ±0,05 mm , без ивица, електрополиране површине и тражимост пуне партије. Пројекат је комбиновао преглед ДФМ-а, прогресивно дубоко цртање, ласерску резању влакана, ЦНЦ завршну обраду и режим инспекције од 39 корака, а сваки део је испоручен са сертификатима материјала, извештајима о димензији и тражимости за партију како би Купац је дошао у Диеплинк са захтевним спецификацијама. Кућа је морала да испуни шест услова који одвоје медицинску производњу листова од обичних индустријских радова: Диеплинков одговор је био четиристепени инжењерски радни тек који је изграђен око једног принципа: дизајнирати процес пре алата - Да ли је то истина? Свака фаза испод је део Диеплинк-ових услуга за производњу листова метала , који покрива штампање, дубоко цртање, ласерско сечење, ЦНЦ обраду, заваривање и обраду површине под једним кровом. Пре него што је било који метал резан, инжењери Диплинка су провели преглед пројектовања за производњу (ДФМ) на 2Д цртежима и 3Д моделима купца. Проверили су однос за завлачење, танчење зида, позиције пруга и функције како би потврдили да се кућа може формирати у ограниченом броју фаза завлачења, а затим закључили размер празног места и тонажу штампе. Материјал који је изабран био је SUS316L пожељан је у односу на СУС304 због своје веће отпорности на корозију у клиничком и дезинфекционом окружењу. Свака намотачка је стигла са сертификатом материјала и прошла је приходну инспекцију хемијског састава и стања површине. Упутства за избор одговарајуће сировине, види који материјали су најбољи за прилагођене делове за штампање метала . Кућа је формирана са вишестационарски прогресивни штампач на прецизним пресима: пражњавање, прво извлачење, прецртање, резање и пирсирање се обављају у једној континуираној линији, тако да је сваки хоусинг идентичан и без завариваних шваба. Дебљина зида се контролише глађивањем између фаза; подмазивање и управљање односма за повуцивање спречавају пуцање и повърхне дефекте; а критичне димензије држе до ± 0,05 mm - Да ли је то истина? Пошто је тело извучено из једног празног слоја, резултат је безшивна, непролазна љуска са бољом чврстоћом и трајношћу од завариваних зглобова. Сврзано читање: метални темељи дубокоцртања и кључне предности високопрецизних детаља за дубоко вучење - Да ли је то истина? Истражите наше прецизни дубоко извучени делови способност. Влакна ласерска сечење створио монтаже рупе, вентилације и резања са уколико је потребно, док ЦНЦ обрада додати дубоке рупе, главе и запечатање лица које дубоко цртање не може произвести. Последњи пролаз за дебурирање и кондиционирање ивица у комбинацији са оштрим алатима и контролисаним пролазом 610% дебљине материјала уклоњен микроскопски ивице ивица тако да је готови део сигуран за руковање и монтажу. Такође погледајте: технологија прецизног ласерског сечења . Делови су били са више од 50 м2 : електрополирање уклања микро-обуке и уграђене честице, смањује грубост површине до Ra ≤ 0,4 μm и повећава отпорност на корозију; пасивација обнавља заштитни слој хром оксида. Затим су корпуси прошли тест са неутралним прскањем соли за 72 сата без видљиве корозије. Довршени делови су били чишћени, индивидуално заштићени и паковани како би се избегли огребови током транзита. Наше водич за обраду површине метала детаљније објашњава доступне опције. Ланци снабдевања медицинским уређајима не толеришу изненађења квалитета. Диеплинк води документован систем квалитета у складу са ИСО 9001 са 39 Проверке КВ у сваком пројекту исти режим који се користи за ОЕМ-ове у аутомобилима, електроници и енергији: Свака серија је тражива: сертификат материјала → производња партије → инспекција записи → превоз , тако да се један хоусинг може пратити до његове намотачке и притиска. Ова документација је дизајнирана да се уклопи у сопствене системе квалитета медицинских ОЕМ-а и подржава тражевност и очекивања историје уређаја ФДА 21 ЦФР 820 и Добављање компоненти у складу са ИСО 13485 . На крају пројекта, купац је добио кућишта која су испуњавала све захтеве у спецификацији и, критично, документацију која је то доказала: Осим овог пројекта, произвођачи медицинских уређаја раде са Диплинком јер фабрика комбинује дубину специјалисте за штампање са ширином партнера за листови од једног места: Сврзано читање: прецизни прилагођени плочични корпуси за електронску опрему , високопрецизна дубока цртања и ЦНЦ обрада , и производња од нержавећег челика 304 за храну - Да ли је то истина? Погледајте све пројекте на нашем случај перформанси страница, или научите како метал штампање подржава ОЕМ прилагођавање . Најчешћи избор су SUS304 и SUS316L нерђајући челик, плус алуминијумске легуре када је тежина важна. Диеплинк препоручује СУС316Л за кућишта која су изложена соларном раствору, дезинфекционим средствима или понављању чишћења, јер њен већи садржај молибдена даје супериорну отпорност на јару и корозију. Сви материјали се шаљу са сертификатима и пролазе приходну инспекцију. Диеплинк рутински држи ± 0,05 мм на критичним формацијама и ± 0,03 мм на ласерском резању рупа, са још чврстијим вредностима могућим на ЦНЦ-машинираним карактеристикама. Тачна толеранција зависи од материјала, дебљине и геометрије делова преглед ДФМ-а у фази цитирања га закључава. Диеплинк управља документованим системом управљања квалитетом ИСО 9001 са 39 провера КА по пројекту, инхаус инспекцијом и пуном тражебилношћу партије. За медицинске клијенте, Диеплинк пружа сертификате материјала, извештаје о димензији и тражимост партије који подржавају усаглашеност са ИСО 13485 и ФДА 21 ЦФР 820. Ако вам је потребна одређена сертификација или ревизија, подигнете је током RFQ-а како би се могла потврдити. Контрола бура почиње у алату: оштре ивице и прозор у штампи одржаван на 610% дебљине материјала. Делови затим пролазе кроз дебуринг, услов ребра и, где је наведено, електрополирање, које уклања микро-бурице на молекуларном нивоу. Навршене ивице се визуелно и димензионално прегледавају пре паковања. Да, ја сам. Диеплинк подржава развој прототипа и производњу у великој количини од истог инжењерског тима. За многе делове, узорци се могу испоручити у року од 3 дана; када се узорц одобри, прогресивни штампачи и аутоматизоване линије се скалирају на велику количину, доследну производњу. Пошаљи свој цртање да добије ДФМ преглед и цитат. Пошаљите своје 2Д цртеже или 3Д моделе Диеплинкови инжењери ће прегледати производњу, толеранцију и трошкове, и вратити цитат са временском линијом узорака. Нови на ОЕМ снабдевању? Прочитајте наше водич за пружање црта за брзу, тачну цитату .
Метални корпуси медицинских уређаја: студија случаја 316Л нерђајућег челика без никаквих дефеката
Метални корпуси медицинских уређаја: студија случаја 316Л нерђајућег челика без никаквих дефеката

Дубоко извучени корпуси медицинских уређаја од нерђајућег челика 316Л са електрополираном завршном оцјеном Диеплинк прецизна метална израда.
01Снимка случаја
02Проблем Шта је захтевао медицински ОЕМ
03Инжењерско решење
3.1 Преглед ДФМ-а и избор материјала
3.2 Прогресивно мачење и дубоко цртање једноделни безшивни обликовање

Прогресивна дубока линија за цртање која производи беспрекорно кутије од нерђајућег челика у работионици за штампање Диплинк. 3.3 Ласерско сечење и ЦНЦ завршна обработка Прецизне карактеристике
3.4 Површински третман и чистота
04Системи квалитета и тражимост 39 провера КА по пројекту

Димензионална верификација медицинског корпуса од нерђајућег челика током финалне инспекторе Диплинка.
05Резултати
06Зашто глобални медицински ОЕМ-ови бирају Диеплинк
07Често постављене питања
Који се материјали користе за металне кутије медицинских уређаја?
Које толеранције може Диеплинк да држи на металним деловима медицинских уређаја?
Да ли је Диеплинк сертификована за производњу медицинских уређаја?
Како Диеплинк осигурава нула бура на деловима од нерђајућег челика?
Да ли Диеплинк може да подржава и прототипе и производњу у великој количини?
Добијте ДФМ преглед и цитат за ваше медицинске уређаје металне делове
Препоручени производи