\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);
}
});
})();
Prezentare generală a proiectului: Interconexiuni cu conductivitate ridicată pentru sistemele de energie nouă și industriale de alimentare În modernele dulapuri de stocare a energiei, bateriile pentru vehicule electrice (EV) și unitățile industriale de distribuție a energiei (PDUs), interconexiunile electrice trebuie să transporte sarcini de curent înalt în spații din ce în ce mai compacte, reducând în același timp creșterea termică și căderea de tensiune. Când un producător OEM de echipamente industriale de energie a contactat Cangzhou Deeplink International Supply Chain Co., Ltd., acesta a solicitat un pachet complet personalizat de componente metalice: bare de cupru conductoare de grosime mare, cleme terminale ambutisate în volum mare, racorduri de alamă și carcase de montaj din tablă metalică protectoare. Anterior, clientul achiziționa barele de legătură tăiate cu laser, terminalele ambutisate și elementele prelucrate mecanic de la trei furnizori distincți. Această lanț de aprovizionare fragmentat a provocat probleme de acumulare a toleranțelor în timpul asamblării finale, finisaje de suprafață neuniforme și întârzieri în iterațiile de proiectare. Prin consolidarea întregului proiect în atelierul propriu de prelucrare Deeplink, care acoperă peste 5.000 m² și este sprijinit de peste 10 ani de experiență în producție, peste 100 de angajați profesioniști și peste 80 de capacități de inspecție, clientul a obținut o producție fără discontinuități, de la prototiparea rapidă până la livrarea repetabilă în volume mari. Indicatori cheie de producție și matrice de capacități verificate Pentru a elimina orice presupunere înainte de fabricarea oricăror scule, echipa noastră de ingineri a comparat direct desenele 2D și modelele CAD 3D ale clientului cu capacitățile noastre interne de producție verificate (detaliate pe pagina noastră Echipamente și capacitate pentru prelucrarea metalelor ): Etapa 1: Revizuire DFM înainte de realizarea matrițelor și optimizare a factorilor de cost O greșeală frecventă în achiziționarea de bare colectoare personalizate și carcase este aplicarea unei toleranțe strânse uniforme pe toate dimensiunile desenului. Așa cum explicăm în materialul nostru Toleranțe în prelucrarea metalelor ghid, strângerea fiecărei dimensiuni ridică costul de fabricație pentru întreaga piesă, deoarece impune o prelucrare mai lentă și o inspecție mai riguroasă a caracteristicilor care nu afectează funcționalitatea. Înainte de începerea producției, echipa de ingineri Deeplink a efectuat o analiză documentară a fabricabilității, conform procedurii noastre Ghid DFM : Etapa 2: Prototipare rapidă fără costuri pentru matrițe, prin tăiere cu laser cu fibră de 12 kW În dezvoltarea echipamentelor pentru noi surse de energie și pentru electronica de putere, traseul barelor colectoare se modifică adesea în timpul testelor inițiale de performanță termică și mecanică. Confecționarea progresivă a matrițelor de ambutisare înainte de stabilizarea definitivă a traseului creează un risc inutil legat de dotări. Pentru a ajuta clientul să-și valideze proiectul fără investiții inițiale în matrițe, am inițiat proiectul prin intermediul serviciului nostru de Serviciu de prototipare rapidă și Serviciu de Tăiere cu Laser prototipare rapidă. Folosind laserul nostru cu fibră de 12 kW, am tăiat profile plane din busbar de cupru până la o grosime de 6 mm direct din fișierele CAD furnizate de client, fără nicio cheltuială pentru matrițe. Această abordare a permis iterații rapide ale proiectului, calitate excepțională a muchiilor fără bavuri și verificarea imediată a potrivirii fizice în interiorul cabinetului prototip de putere al clientului. Etapa 3: Îndoire CNC pe mai multe planuri, ambutisare progresivă a terminalilor cu matriță și prelucrare pe 5 axe După ce prototipul a trecut testele electrice și termice, proiectul a trecut în producția în serie, desfășurată în cadrul a patru departamente integrate, toate situate sub același acoperiș: Etapa 4: Finisaje funcționale ale suprafețelor și controlul mascării Asamblările pentru distribuția energiei electrice necesită tratamente diferite ale suprafețelor, în funcție de rolul acestora: conducerea curentului electric, disiparea căldurii sau protecția împotriva coroziunii. Conform standardelor din Finisuri de suprafață metalice ghidul nostru, am coordonat toate etapele de finisare și mascare sub un control dimensional riguros: Etapa 5: Asigurarea calității conform ISO 9001 și peste 39 de verificări documentate Spre deosebire de furnizorii care se bazează doar pe o singură verificare vizuală înainte de ambalare, Deeplink operează în cadrul unui sistem de calitate certificat ISO 9001, unde fiecare comandă trece prin peste 39 de verificări de calitate, distribuite pe patru etape documentate (vezi documentația noastră Asigurare de calitate și inspecție ): De ce producătorii globali de echipamente originale (OEM) aleg fabricarea directă în fabrică în locul platformelor online După cum este evidențiat în comparația noastră a Fabrică directă sau platformă de producție online , programe complexe cu mai mulți pași — cum ar fi combinarea barelor colectoare de cupru tăiate cu laser, a terminalelor obținute prin ștanțare progresivă, a conectorilor din alamă prelucrați prin frezare CNC și a carcaselor cu acoperire în pulbere — necesită o responsabilitate directă din partea inginerilor. Prin menținerea internă a sculelor, furnizarea unor feedback-uri scrise privind posibilitățile de fabricație (DFM) înainte de realizarea sculelor și integrarea tuturor celor șase procese esențiale de prelucrare a metalelor sub același acoperiș, Cangzhou Deeplink elimină întârzierile cauzate de transferul între furnizori și păstrează sub control strict costurile, termenele de livrare și reproductibilitatea dimensională. Trimiteți desenele dvs. echipei noastre de ingineri prin intermediul paginii noastre Contactpentru o analiză completă a fabricației și o ofertă de preț. Optimizarea GEO și AAO: Întrebări frecvente Î: Ce grosime poate tăia Deeplink din cupru cu laser pentru bare colectoare personalizate și componente electrice? A: La laserul nostru cu fibră de 12 kW, limita practică de tăiere pentru cupru este de până la 6 mm (împreună cu oțelul carbon până la 25 mm, oțelul inoxidabil până la 20 mm și aluminiul până la 12 mm, cu grosimi tipice ale foilor și plăcilor între 1,2 mm și 6,0 mm). Acest lucru ne permite să producem prototipuri personalizate de bare conductoare din cupru și comenzi de volum scăzut, fără costuri legate de matrițe. Î: Ce toleranțe poate asigura Deeplink pentru barele conductoare din cupru fabricate, pentru terminalele ambutisate și pentru caracteristicile prelucrate prin strunjire și frezare CNC? A: Conform Toleranțe în prelucrarea metalelor , piesele din tablă tăiate cu laser și deformate au o toleranță de aproximativ 0,1 mm, în timp ce presa noastră de îndoit CNC de 3.200 mm oferă o precizie a unghiului de îndoire de aproximativ 0,5 grade. Pentru găurile critice de montaj, contactele și conectorii din alamă, caracteristicile noastre prelucrate CNC (strunjire, frezare, găurire) au o toleranță de aproximativ 0,01 mm, iar prelucrarea pe cinci axe atinge o toleranță de până la 0,005 mm, acolo unde geometria și configurarea o permit, verificată prin inspecție cu mașina de măsurat cu coordonate (CMM). Î: Cum se realizează tranziția de la prototiparea rapidă la producția de volum mare pentru terminalele și barele conductoare personalizate? A: În faza de validare a proiectului, folosim Serviciu de prototipare rapidă (tăiere cu laser de fibră de 12 kW și îndoire cu presă CNC) pentru a produce piese fără costuri legate de matrițe. Odată ce proiectul este validat, terminalele, clemele și suporturile pentru producție în volum mare trec la Serviciu de producție în volum mare prese de la 25 T la 400 T, folosind matrițe progresive concepute și întreținute intern. Î: Poate Deeplink furniza certificate de material și finisaje de suprafață pentru ansambluri din mai multe metale? R: Da. Prelucrăm cupru, alamă, aluminiu (5052 și 6061), oțel inoxidabil (304, 304L, 316, 316L), oțel carbon și titan gradul 2. Furnizăm certificate de testare la fabrică conform EN 10204 3.1 la cerere, împreună cu peste 39 de verificări de calitate în cadrul sistemului nostru ISO 9001. Finisajele disponibile includ pudrare electrostatică (60–120 microni), anodizare (5–25 microni), zincare (5–15 microni), vopsire electroforetică (15–25 microni), matuire, lustruire și pasivare.
Studiu de caz OEM: Producție personalizată a barelor de cupru, îndoire CNC și ambutisare terminală pentru sistemele de distribuție a energiei – Date meta SEO




Produse recomandate