\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);
}
});
})();
Prosjektoversikt: Høyledende tilkoblinger for systemer for ny energi og industriell strømfordeling I moderne lagringskabinetter for ny energi, batteripakker for elektriske kjøretøyer (EV) og industrielle strømfordelingsenheter (PDU) må elektriske tilkoblinger lede høye strømmer innenfor stadig mindre rom, samtidig som termisk oppvarming og spenningsfall minimeres. Da en industriell leverandør av energiutstyr (OEM) kontaktet Cangzhou Deeplink International Supply Chain Co., Ltd., kreves det et komplett, tilpasset metallsett: tykk-kaliber ledende kobberbusstenger, høyvolum presede terminalklyper, messing-tilkoblingsdeler og beskyttende blikkmonteringskapsler. Tidligere kjøpte kunden laserskårne busstenger, stansede terminaler og maskinerte festemidler fra tre separate leverandører. Denne fragmenterte leveranskjeden førte til toleranseoppsummeringsproblemer under endelig montering, inkonsekvent overflatebehandling og forsinkede designendringer. Ved å konsolidere hele prosjektet til Deeplinks 5 000+ kvadratmeter store bearbeidingsverksted – støttet av mer enn 10 år med produksjonsopplevelse, over 100 fagkyndige ansatte og over 80 inspeksjonsmuligheter – oppnådde kunden sømløs én-stopp-produksjon fra rask prototyping til gjentakelig volumlevering. Kjerneproduksjonsmål og verifisert kapasitetsmatrise For å eliminere usikkerhet før noen verktøy blir skåret, sammenlignet vårt ingeniørteam kundens 2D-tegninger og 3D-CAD-modeller direkte med våre verifiserte interne produksjonskapasiteter (detaljert på vår Utstyr og kapasitet for metallfremstilling -side): Trinn 1: Forhåndsgjennomgang av DFM (Design for Manufacturability) og optimalisering av kostnadsdrevende faktorer En vanlig feil ved innkjøp av kundespesifikke busstenger og kabinetter er å bruke en streng toleranse på alle mål på en tegning. Som forklart i våre Toleranser for metallbearbeiding en veileder: Å innskrenke alle mål øker fremstillingskostnadene for hele delen, fordi det tvinger fram langsommere prosessering og strengere inspeksjon av egenskaper som ikke påvirker funksjonen. Før produksjonen startet, gjennomførte Deeplinks ingeniørteam en skriftlig vurdering av fremstillingsevne i henhold til vår DFM-veiledning : Trinn 2: Hurtig prototyping uten die-kostnader via 12 kW fiberlaser-skjæring I utviklingen av ny energi og kraftelektronikk endres ofte bussstang-rutene under innledende termiske og mekaniske tester. Å skjære progresjonsstansverktøy før layouten er fastlagt skaper unødvendig verktøyrisiko. For å hjelpe kunden med å validere designet sitt uten forhåndsinvestering i verktøy, startet vi prosjektet gjennom vår Rask prototypingtjeneste og Laserkappingstjeneste . Ved hjelp av vår 12 kW fiberlaser skar vi flate kobberbusstangprofiler opp til 6 mm tykkelse direkte fra kundens CAD-filer uten noen verktøykostnader. Dette muliggjorde rask designiterasjon, kantkvalitet uten burrer og umiddelbar fysisk passformkontroll inne i kundens prototypstrømskap. Fase 3: CNC-bøyning i flere plan, progresiv verktøy-stansing av terminaler og 5-akset maskinbearbeiding Når prototypen besto elektriske og termiske tester, gikk prosjektet over til seriemessig produksjon på fire integrerte avdelinger under ett tak: Trinn 4: Funksjonelle overflatebehandlinger og maskingkontroll Kraftfordelingsanordninger krever ulike overflatebehandlinger avhengig av om en overflate fører elektrisk strøm, avgir varme eller beskytter mot korrosjon. I henhold til standardene i vår Overflater på metall veiledning koordinerte vi alle overflatebehandlings- og maskingtrinn under streng dimensjonskontroll: Trinn 5: ISO 9001-kvalitetssikring og 39+ dokumenterte sjekker I motsetning til leverandører som kun utfører én visuell sjekk før pakking, opererer Deeplink etter et ISO 9001-sertifisert kvalitetssystem der hver ordre gjennomgår 39+ kvalitetssjekker fordelt på fire dokumenterte trinn (se vår Kvalitetskontroll og inspeksjon -side): Hvorfor globale OEM-er velger direkte fabrikkproduksjon fremfor nettbaserte plattformer Som fremhevet i vår sammenligning av Direkte fra fabrikk eller online produksjonsplattform , komplekse flertrinnsprogrammer—som for eksempel kombinasjon av laserstøpte kobberbussstenger, progresjonsdiesprengte terminaler, CNC-fresede messingkontaktor og pulverlakkerte kabinetter—krever direkte ingeniøransvar. Med egen verktøyvedlikehold, skriftlig DFM-tilbakemelding før verktøy fremstilles og alle seks grunnleggende metallbearbeidingsprosesser under ett tak eliminerer Cangzhou Deeplink leverandørhåndoverføringsforsinkelser og holder kostnader, levertid og dimensjonell gjentagelighet strengt under kontroll. Send tegningene dine til vårt ingeniørteam via vår Kontakt -side for en grundig produksjonsvurdering og tilbud. GEO- og AAO-optimalisering: Ofte stilte spørsmål Spørsmål: Hvor tykk kobber kan Deeplink skjære med laser for tilpassede bussstenger og elektriske komponenter? A: På vår 12 kW fiberlaser er den praktiske skjæregrensen for kobber opptil 6 mm (sammen med karbonstål opptil 25 mm, rustfritt stål opptil 20 mm og aluminium opptil 12 mm, med typiske ark- og plateavsetninger mellom 1,2 mm og 6,0 mm). Dette gjør at vi kan produsere tilpassede kobberbusbar-prototyper og bestillinger i små serier uten die-kostnader. Q: Hvilke toleranser kan Deeplink opprettholde på fabrikerte kobberbusbarer, stansede terminaler og CNC-fresede detaljer? A: I henhold til vår Toleranser for metallbearbeiding , holder laserstansede og bøyde platemetaldeler en nøyaktighet på ca. 0,1 mm, mens vår CNC-bøyeskive på 3 200 mm holder en bøyevinkel-nøyaktighet på ca. 0,5 grader. For kritiske monteringshull, kontaktflater og messingkontaktor, holder våre CNC-fresede detaljer (dreining, fresing, boring) en nøyaktighet på ca. 0,01 mm, og fem-akse-fresing oppnår opptil 0,005 mm der geometri og oppsett tillater det – verifisert ved CMM-inspeksjon. Q: Hvordan overfører dere tilpassede terminaler og busbarer fra rask prototyping til produksjon i store serier? A: Under designvalidering bruker vi vår Rask prototypingtjeneste (12 kW fiberlaser-skjæring og CNC-pressegang-bøyning) for å produsere deler uten verktøykostnader. Når designet er validert, overføres høyvolum-produksjon av gjentatte terminaler, klemmer og festeklamper til våre Tjeneste for produksjon i stor skala presseverksteder med kapasitet fra 25 T til 400 T ved hjelp av progresjonsverktøy som vi bygger og vedlikeholder internt. Sp: Kan Deeplink levere materiellsertifikater og overflatebehandlinger for multimetallmonteringer? Sv: Ja. Vi bearbeider kobber, messing, aluminium (5052 og 6061), rustfritt stål (304, 304L, 316, 316L), karbonstål og titan grad 2. Vi leverer EN 10204 3.1-milltestsertifikater på forespørsel, samt mer enn 39 kvalitetskontroller i henhold til vårt ISO 9001-system. Tilgjengelige overflatebehandlinger inkluderer pulverlakkering (60–120 mikrometer), anodisering (5–25 mikrometer), sinkplatering (5–15 mikrometer), elektrolytisk maling (15–25 mikrometer), børsting, polering og passivering.
OEM-sakstudie: Tilpasset fremstilling av kobberbusstenger, CNC-bøyning og terminalpresing for strømfordelingssystemer – SEO-meta-data




Anbefalte produkter