\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);
}
});
})();
Przegląd projektu: Wysokoprzewodzące połączenia dla systemów energetycznych nowej energii i przemysłowych W nowoczesnych szafach do magazynowania energii, zestawach akumulatorów dla pojazdów elektrycznych (EV) oraz przemysłowych jednostkach rozdziału mocy (PDUs) połączenia elektryczne muszą przenosić duże prądy w coraz bardziej zwartych przestrzeniach, minimalizując jednocześnie wzrost temperatury i spadek napięcia. Gdy producent przemysłowego sprzętu energetycznego zwrócił się do firmy Cangzhou Deeplink International Supply Chain Co., Ltd., wymagał kompleksowego, niestandardowego metalowego rozwiązania: grubych, przewodzących szyn miedzianych, dużych partii tłoczonych zacisków końcowych, konektorów z mosiądzu oraz ochronnych obudów montażowych z blachy. Wcześniej klient zakupywał szyny zbiorcze cięte laserem, zaciski tłoczone oraz elementy obrabiane u trzech różnych dostawców. Tak rozdrobniona sieć dostaw powodowała problemy z narastaniem tolerancji podczas końcowej montażu, niespójne wykończenia powierzchni oraz opóźnienia w iteracjach projektowych. Poprzez konsolidację całego projektu w warsztacie przetwarzania Deeplink o powierzchni ponad 5000 m² – wspieranym ponad 10-letnim doświadczeniem produkcyjnym, ponad 100 zawodowymi pracownikami oraz ponad 80 możliwościami kontroli jakości – klient osiągnął płynną produkcję „od jednego źródła”, obejmującą zarówno szybkie prototypowanie, jak i powtarzalną dostawę w dużych ilościach. Kluczowe wskaźniki produkcyjne oraz zweryfikowana macierz możliwości Aby wyeliminować niepewność przed rozpoczęciem produkcji żadnych narzędzi, nasz zespół inżynierski porównał bezpośrednio 2D rysunki i 3D modele CAD klienta z naszymi zweryfikowanymi możliwościami produkcyjnymi wewnętrznej produkcji (szczegółowo opisanymi na naszej Sprzęt i zdolności produkcyjne do obróbki metali stronie): Etap 1: Przedwykonawcza analiza DFM oraz optymalizacja czynników wpływających na koszty Typowym błędem przy zakupie niestandardowych szyn zbiorczych i obudów jest stosowanie jednolitej, ścisłej tolerancji we wszystkich wymiarach rysunku. Jak wyjaśniamy w naszym Dopuszczalne odchyłki w obróbce metali przewodnik, dokładne określenie każdego wymiaru zwiększa koszty produkcji całego elementu, ponieważ wymusza wolniejsze przetwarzanie i bardziej szczegółową kontrolę cech, które nie wpływają na funkcjonalność. Przed rozpoczęciem produkcji zespół inżynierów firmy Deeplink przeprowadził pisemną analizę wykonalności produkcyjnej zgodnie z naszym Przewodniku DFM : Etap 2: Szybkie prototypowanie bez kosztów matryc za pomocą laserowego cięcia włóknowego o mocy 12 kW W rozwoju technologii nowej energii i elektroniki mocy trasy szyn zbiorczych często zmieniają się w trakcie wstępnych testów termicznych i mechanicznych. Wykonywanie stopniowych matryc tłoczeniowych przed ustaleniem ostatecznego układu generuje niepotrzebne ryzyko związane z narzędziami. Aby pomóc klientowi zweryfikować jego projekt bez konieczności wcześniejszych inwestycji w matryce, rozpoczęliśmy projekt za pośrednictwem naszego Usługa szybkiego wytwarzania prototypów i Usługa cięcia laserowego . Korzystając z naszego włóknowego lasera o mocy 12 kW, cięliśmy płaskie profile miedzianych szyn zbiorczych o grubości do 6 mm bezpośrednio na podstawie plików CAD klienta – bez żadnych kosztów związanych z matrycami. Dzięki temu możliwe były szybkie iteracje projektowe, krawędzie pozbawione wyprasek oraz natychmiastowa weryfikacja dopasowania fizycznego w prototypowym szafie energetycznej klienta. Etapa 3: CNC gięcie w wielu płaszczyznach, progresywne tłoczenie końcówek w matrycach oraz frezowanie 5-osowe Po pomyślnym przejściu testów elektrycznych i termicznych projekt przeszedł do produkcji seryjnej w czterech zintegrowanych działach działających pod jednym dachem: Etap 4: Funkcjonalne wykończenia powierzchni oraz kontrola maskowania Zespolone układy rozdziału mocy wymagają różnych rodzajów obróbki powierzchni w zależności od tego, czy dana powierzchnia przewodzi prąd elektryczny, odprowadza ciepło czy chroni przed korozją. Zgodnie ze standardami zawartymi w naszym Powłoki powierzchniowe metali przewodniku koordynowaliśmy wszystkie etapy wykańczania i maskowania przy ścisłej kontroli wymiarów: Etapa 5: Gwarancja jakości zgodna z normą ISO 9001 oraz ponad 39 udokumentowanych kontroli W przeciwieństwie do dostawców polegających wyłącznie na jednej wizualnej kontroli przed zapakowaniem, Deeplink działa w ramach certyfikowanego systemu zarządzania jakością zgodnego z normą ISO 9001, w którym każde zamówienie przechodzi ponad 39 kontroli jakości rozłożonych na cztery udokumentowane etapy (zobacz nasz Gwarancja jakości i inspekcja stronie): Dlaczego globalni producenci OEM wybierają bezpośrednie produkcje fabryczne zamiast platform internetowych Jak podkreślono w naszym porównaniu Bezpośrednie zakupy od producenta lub przez platformę produkcyjną online , złożone wieloetapowe programy — takie jak łączenie miedzianych szyn zbiorczych ciętych laserem, końcówek tłoczonych matrycą postępującą, konektorów z mosiądzu frezowanych CNC oraz obudów z powłoką proszkową — wymagają bezpośredniej odpowiedzialności inżynierskiej. Dzięki obsłudze narzędzi wewnętrznej, pisemnej opinii inżynierskiej DFM przed wykonaniem narzędzi oraz posiadaniu wszystkich sześciu podstawowych procesów obróbki metali pod jednym dachem firma Cangzhou Deeplink eliminuje opóźnienia wynikające z przekazywania zadań między dostawcami i utrzymuje koszty, czas realizacji oraz powtarzalność wymiarową pod pełną kontrolą. Wyślij swoje rysunki do naszego zespołu inżynierskiego za pośrednictwem naszej Kontakt strony, aby otrzymać kompleksową analizę technologiczną i ofertę. Optymalizacja GEO i AAO: Najczęściej zadawane pytania P: Jaka może być maksymalna grubość miedzi ciętej laserem przez Deeplink do niestandardowych szyn zbiorczych i komponentów elektrycznych? A: W naszym 12-kW laserze włókninowym praktyczny limit cięcia miedzi wynosi do 6 mm (równolegle ze stalą węglową do 25 mm, stalą nierdzewną do 20 mm oraz aluminium do 12 mm; typowe grubości arkuszy i blach mieszczą się w zakresie od 1,2 mm do 6,0 mm). Dzięki temu możemy produkować prototypy niestandardowych szyn miedzianych oraz zamówienia o niskiej objętości bez kosztów matryc. Q: Jakie tolerancje są możliwe do osiągnięcia przez Deeplink przy wykonywaniu szyn miedzianych, zgrzewanych końcówek oraz elementów frezowanych CNC? A: Zgodnie z naszymi Dopuszczalne odchyłki w obróbce metali , części metalowe cięte laserem i gięte mają tolerancję ok. 0,1 mm, natomiast nasz 3200-mm prasowacz CNC zapewnia dokładność kąta gięcia na poziomie ok. 0,5°. W przypadku kluczowych otworów montażowych, powierzchni stykowych oraz łączników mosiężnych dokładność wykonania elementów CNC (toczenie, frezowanie, wiercenie) wynosi ok. 0,01 mm, a obróbka pięcioosiowa – nawet do 0,005 mm, o ile geometria detalu i sposób jego zamocowania to pozwalają; wszystkie pomiary potwierdza kontrola współrzędnościowa (CMM). Q: Jak przejść z szybkiego prototypowania niestandardowych końcówek i szyn na produkcję masową? A: W trakcie walidacji projektu wykorzystujemy nasze Usługa szybkiego wytwarzania prototypów (cięcie laserem włóknikowym o mocy 12 kW i gięcie na prasach CNC) do produkcji elementów bez kosztów matryc. Po zweryfikowaniu projektu masowa powtarzalna produkcja końcówek, zacisków i uchwytów przechodzi na nasze Usługa produkcji masowej prasowanie na prasach o nośności od 25 T do 400 T przy użyciu matryc postępujących, które budujemy i serwisujemy wewnętrznie. P: Czy Deeplink może dostarczyć certyfikatów materiałów oraz informacji o wykończeniach powierzchniowych dla wielometalowych zespołów? O: Tak. Przetwarzamy miedź, mosiądz, aluminium (stop 5052 i 6061), stal nierdzewną (304, 304L, 316, 316L), stal węglową oraz tytan stopu 2. Na żądanie udostępniamy certyfikaty badawcze zakładu produkcyjnego zgodnie z normą EN 10204 typu 3.1 oraz przeprowadzamy ponad 39 kontroli jakości w ramach naszego systemu ISO 9001. Dostępne wykończenia obejmują lakierowanie proszkowe (60–120 µm), anodowanie (5–25 µm), cynkowanie (5–15 µm), malowanie elektroforetyczne (15–25 µm), szlifowanie, polerowanie oraz pasywację.
Studium przypadku OEM: Indywidualna produkcja szyn miedzianych, gięcie CNC oraz tłoczenie zacisków do systemów rozdziału mocy – dane SEO




Zalecane produkty