управо је.
,需要通过父级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);
}
});
})();
Производња високопрецизних металних корпуса за електронску опрему ДЕЛ 1: СЕВЕРНА СЕВЕРНА СЕВЕРНА И СТРАЖБНА НАПОТРАЖБА У секторима индустријске аутоматизације, телекомуникација и високотехнолошке електронике који се брзо развијају, структурни интегритет кућишта опреме више није само последујућа идеја, већ је критична компонента поузданости производа. Продукт који се приказује у овој студији случаја је прилагођени оквир за лимен метал. Митохолно је дизајниран да смести осетљиве електронске збирке, компоненте ПЦ шасије и јединице за напајање. За овај специфичан пројекат, клијент је захтевао шаси индустријског рачунара за тешке послове који би могао да издржи оштре оперативне окружења, задржавајући тачне димензијске толеранције за монтажу унутрашње мајчинске плоче. Осим тога, производ је захтевао снажну структурну чврстоћу, одличне путеве распршивања топлоте и безупречну козметичку завршну косицу како би испунио строге међународне индустријске стандарде. ДЕЛ 2: СУСТАНОВИ ПРОЦЕС ПРОДЕЛЕНИЦЕ И ТЕХНОЛОГИЈА Да би се преобразио сирови карбонски челик у овај сложен, вишедимензионалан електронски корпус од ОЕМ листа, наши инжењерски и производни тимови су имплементирали строго контролисани, вишестепени производњи. Фаза 1: Избор материјала и анализа ДФМ Пре него што је производња почела, наши инжењери су обавили темељну анализу дизајна за производњу (ДФМ). Изаберили смо висококвалитетни хладно ваљан угљенски челик (СПЦЦ) због његове одличне формабилности и структурне крутости. Оптимизовавши распоред равних обрасца, ми смо минимизирали отпад материјала и предвидели потенцијалне тачке стреса током процеса формирања. Фаза 2: Високопрецизно ласерско сечење Производња почиње са нашим напредним прилагођавањем услуге за ласерско сечење - Да ли је то истина? Користили смо ласерске машине са високом снагом за резање почетних плоских празнота. Овај критичан корак осигурава да се све сложене резке, мале рупе за монтажу и сложени вентилациони слотови обраде са прецизношћу на микронивулу. Добивање глатких и безбожних ивица у овој фази је од виталног значаја за безбедност осетљивих жица и каблова који ће на крају проћи кроз кутију. Фаза 3: ЦНЦ метално савијање и формирање Многоугаона, тродимензионална геометрија овог прилагођеног мрежа превратача рак монтажа загртача захтева веома прецизне операције преса. Наша напредна технологија за савијање на ЦНЦ-у гарантује тачне угле савијања. Користећи прилагођене алате и динамичку компензацију за крунирање, ефикасно смо минимизирали повратак материјала, осигуравши да све паралелне и перпендикуларне површине за монтажу постигну савршену линију за коначну монтажу. Фаза 4: Скупљање конструкције заваривањем и реветирањем Да би се постигла потребна структурна крутост без деформисања танког метала, запослили смо специјализоване за заваривање и за репчање технике монтаже. Наши искусни техничари су локално заваривали и користили прилагођене монтажне уређаје како би брзо распршили топлоту. Ово прецизно топлотно управљање спречава искривљење, осигуравајући да кућиште електронске контролне панеле одржава апсолутну равнаст и беспрекорно зглобове. Фаза 5: Површински третман и слој црног праха Последњи, али једнако важан корак је завршна површина. Довршена метална залога подвргнута је строгом вишестепном претратману и чишћењу, након чега следи наношење премијерног матног црног прашна премаза. Ова специфична завршна боја пружа врхунску отпорност на корозију, одлична антистатичка својства и издржљиву, уједначену естетику која се не огреба током инсталације опреме. ДЕЛ 3: Превазилажење инжењерских изазова Приликом производње прецизне плоче за телекомуникације и индустријску употребу, потребно је превазићи неколико техничких препрека: Проблем А: Толеранција накупљања преко више крива У шасију са бројним преклопима, чак и грешка од 0,5 мм на првом завоју може се појачати у 2 мм погрешну линију на коначној тачки монтаже. Наше решење: ослањали смо се на нашу снажну производња листова метала стручност за пројектовање процеса савијања специфичног за секвенцу. На основу високо калибрираних ЦНЦ преса и провере прве проверке на сваком кораку, задржали смо укупну кумулативну толеранцију у строгом размаку од ± 0,1 мм. Проблем Б: Балансирање вентилације са структурним интегритетом Електронски кућишта захтевају широке резке за проток ваздуха, што природно ослабљава металну структуру. Наше РЕШЕНИЕ: Наши инжењери су стратешки поставили појачавајућа ребра и оптимизовали распоред вентилационих рота. То је осигурало оптималну топлотну динамику за унутрашње компоненте без жртвовања оптерећења целог оквира. ДЕЛ 4: ПРОСПРЕДНЕ ПРОДУСТВОЛСКИЕ АПЛИКАЦИЈЕ Технологије и стандарди контроле квалитета примењени на овом карбоновом челичном праху покривеном загртачу су веома прилагодљиви. Цанцхоу Диеплинк доследно пружа сличне висококвалитетне металне компоненте у различитим високим производњима: ДЕЛ 5: Зашто партнер са дубоким линком за ваше потребе листа метала? Као поуздани произвођач сертификовани по ИСО 9001, Цанџоу Диеплинк Интернатионал Спули цејн Цо, Лтд. интегрише комплетан, комплетан приступ индустријског ланца за произвођење метала на задатке. Од почетног техничког консултовања и дизајне цртежа до тестирања узорка и масовне производње, контролишемо сваку променљиву. Да ли ваш пројекат захтева прилагођени Честице за ЦНЦ обраду , дубоко извучене компоненте, или сложене завариване збирке, испоручујемо доследан квалитет са преко 39 строгих корака инспекције КА. Поносни смо што смо брзо испоручили, да смо изврсно радни и стабилни у квалитету. Спреман да оптимизираш свој следећи пројекат са листом метала или индустријским ограђивањем? Контактирајте наш инжењерски тим данас за свеобухватну анализу ДФМ-а и брзу, економичну цитату. Истражите наш потпуни спектар услуга и добијте своје прилагођено решење данас посећујући наше Контактирајте нас страница. Производња високопрецизних металних корпуса за електронску опрему




Препоручени производи