\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);
}
});
})();
오늘날 자동차, 전자기기, 신에너지 분야를 아우르는 고급 제조업은 치열한 경쟁 속에서 엔지니어와 조달 관리자에게 절대적인 정밀도, 신속한 확장성, 그리고 흔들림 없는 품질 관리를 요구하고 있다. 창저우 딥링크 인터내셔널 서플라이 체인 유한공사 .데플링크(Deeplink)는 업계 경력 10년 이상, 등록 자본금 1,000만 위안(RMB)의 프리미엄 제조업체로, 맞춤형 시트 메탈 제작 . 고급 CNC 가공, 레이저 절단, OEM 심드로잉(deep drawing) 기술을 하나의 완전히 최적화된 ISO 인증 시설(5,000제곱미터 이상)에 통합함으로써, 데플링크는 꾸준히 ‘신속한 납기, 정교한 공정, 안정적인 품질’을 실현해 왔다. 본 종합 사례 연구에서는 당사 엔지니어링 팀이 설계 적합성 분석(DFM) 단계에서부터 대규모 자동화 양산에 이르기까지, 극도로 복잡한 제조 프로젝트를 어떻게 성공적으로 수행했는지를 상세히 살펴본다. 신에너지 및 자동차 전자 분야의 선도적 고객사가 고내구성 맞춤형 금속 케이스와 내부 구조 부품 일련의 종합 제조 솔루션을 필요로 했다. 지정된 소재는 산업용 등급의 304 스테인리스강, 강력한 알루미늄, 아연도금 강판이었다. 본 프로젝트는 세 가지 주요 공학적·물류적 난제를 안고 있었다. 이러한 복합적 과제를 해결하기 위해 딥링크는 기술 컨설팅, 도면 설계, 시제품 테스트, 기계 제조, 애프터세일즈 지원을 아우르는 원스톱 서비스 모델을 활용했다. 초기 평면 패턴 및 복잡한 3차원 형상 제작을 위해 당사 엔지니어는 고정밀 레이저 절단 부품 을 사용했으며, 이와 함께 첨단 CNC 가공을 병행했다. 레이저 절단 장치는 스테인리스강과 알루미늄을 간편하게 절단했고, 당사 CNC 센터는 2차 밀링 및 드릴링 작업을 통해 요구된 마이크론 수준의 허용 오차를 달성했다. 실제 생산에 착수하기 전에, 절단 경로를 최적화하고 자재 낭비를 줄이기 위해 무료 DFM(제조 용이성 설계) 분석을 수행하여 매우 비용 효율적인 제조 사이클을 달성했습니다. 완전한 외부 커버를 제작하기 위해 당사는 첨단 기술을 갖춘 Metal stamping parts 부서로 전환했습니다. 고급 연속 다이 성형 기술을 활용해 성형 전체 과정을 자동화했습니다. 당사의 심층 드로잉 전문 기술을 통해 아연 도금 강판을 구조적 손상 없이 복잡하고 연속적인 형상으로 늘릴 수 있었습니다. 이는 우수한 인장 강도를 보장할 뿐만 아니라 커버 본체에 대한 2차 용접 작업을 완전히 불필요하게 하여, 외관상 미적 품질과 구조적 완전성을 크게 향상시켰습니다. 다중 부품 구조의 최종 조립을 위해 CNC 프레스 브레이크를 사용해 정밀한 금속 굽힘을 수행했습니다. 이어 숙련된 용접 및 리벳 부품 조립. 당사의 전 산업 사슬 통합은 초기 절단부터 최종 용접까지 모든 단계를 왜곡, 산화 또는 정렬 오류를 방지하기 위해 엄격히 모니터링함을 의미합니다. 당사는 엄격한 고객 사양을 일관되게 충족시키는 능력을 구체적인 인프라와 인증된 프로세스로 뒷받침합니다. 조달 담당자와 엔지니어가 현명한 결정을 내릴 수 있도록, 당사 전문가들이 맞춤형 금속 가공 산업에서 가장 자주 묻는 질문에 답변합니다. 질문 1: CNC 가공과 레이저 절단—맞춤형 금속 부품 제작 시 적절한 가공 공정을 선택하는 방법은 무엇인가요? 질문 2: 자동차 및 전자기기 제조 분야에서 프로그레시브 다이 스탬핑의 주요 이점은 무엇인가요? Q3: DFM(제조 용이성 설계) 분석은 판금 벤딩 공정을 어떻게 개선하나요? 신에너지 프로젝트를 위한 맞춤형 프로토타이핑을 원하시든, 자동차 부품을 위한 확장 가능하고 자동화된 대량 생산을 원하시든, 창저우 딥링크는 귀하의 정확한 사양에 맞춘 개인화되고 신뢰할 수 있는 OEM/ODM 서비스를 제공합니다. 👉 당사의 전 범위 금속판 가공 서비스 둘러보기 심층 사례 연구: 맞춤형 금속 부품을 위한 고정밀 OEM 딥 드로잉 및 CNC 가공 솔루션
▍ 실행 요약
▍ 프로젝트 배경 및 핵심 과제
▍ 엔지니어링 솔루션 및 기술 공정
1. 고정밀 CNC 가공 및 맞춤형 레이저 절단

2. 연속 다이 성형 및 OEM 심층 드로잉

3. 정밀 굽힘, 용접 및 리벳 조립

▍ 데이터 기반 제조 역량 및 지표

▍ 산업 통찰
A정답은 부품의 형상, 생산량, 재료에 크게 좌우됩니다. 레이저 절단 레이저 절단은 탄소강 또는 알루미늄 시트와 같은 2차원 평면 금속 판재 프로파일 제작에 매우 빠르고 경제적입니다. 그러나 부품이 복잡한 3차원 형상, 맹공(블라인드 홀), 나사 가공, 또는 다축에 걸친 마이크론 단위의 엄격한 허용오차를 요구할 경우 CNC 가공 cNC 가공이 필수적입니다. 딥링크는 종종 비용 효율성과 고정밀도를 동시에 달성하기 위해 두 기술을 병행 활용합니다.
A진행형 다이 스탬핑은 대량 생산을 위한 최고의 솔루션입니다. 금속 스트립을 단일 다이 내에서 연속적인 공정 역(펀칭, 코이닝, 벤딩, 딥 드로잉)을 통해 이동시킴으로써, 일관된 품질, 극도로 엄격한 허용 오차, 그리고 단위당 비용의 상당한 절감 효과를 달성합니다. 복잡한 Metal stamping parts 신속히
AdFM 분석을 통해 당사 엔지니어는 양산 시작 전에 고객의 CAD 도면을 평가할 수 있습니다. CNC 프레스 브레이크를 이용한 판금 벤딩의 경우, DFM은 잠재적 충돌 지점을 식별하고, 정확한 벤드 허용량(K-팩터)을 계산하며, 최적의 공구를 선정하는 데 도움을 줍니다. 이러한 사전 대응 방식은 소재 균열을 방지하고, 정밀한 각도를 보장하며, 시제품 제작에서 양산으로의 전환을 가속화합니다. 
▍ 행동 유도 문구 및 OEM/ODM 파트너십
👉 무료 DFM 분석 및 맞춤 견적을 위해 지금 바로 문의하세요 추천 제품