\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);
}
});
})();
Tổng quan dự án: Bảo vệ kỹ thuật cho thiết bị điện tử tiên tiến Trong ngành công nghiệp điện tử năng động và cạnh tranh khốc liệt, việc bảo vệ các thành phần nội bộ nhạy cảm quan trọng không kém chính bản thân phần cứng. Nếu thiếu một vỏ bọc được thiết kế chính xác và bền bỉ, các bo mạch in (PCB), vi xử lý và nguồn điện dễ bị tổn thương do va đập cơ học, quá tải nhiệt và nhiễm bẩn môi trường. Cangzhou Deeplink International Supply Chain Co., Ltd. vừa hợp tác với một khách hàng OEM công nghệ hàng đầu để sản xuất các vỏ bọc kim loại tấm tùy chỉnh độ chính xác cao cho dòng thiết bị điện tử tiên tiến mới của họ. Những vỏ bọc này yêu cầu độ chính xác kích thước nghiêm ngặt nhằm đảm bảo việc lắp đặt bên trong trơn tru, khả năng tản nhiệt xuất sắc để vận hành liên tục và bề mặt hoàn thiện bằng lớp phủ bột không tì vết nhằm đáp ứng các yêu cầu thẩm mỹ khắt khe ở phân khúc tiêu dùng. Hơn nữa, các vỏ bọc cần cung cấp khả năng chắn nhiễu EMI/RFI (nhiễu điện từ và tần số vô tuyến) đáng tin cậy để tuân thủ các tiêu chuẩn an toàn điện tử quốc tế. Các chỉ số sản xuất cốt lõi và quy trình sản xuất Tận dụng kinh nghiệm sản xuất theo yêu cầu hơn 10 năm và xưởng gia công rộng hơn 5.000 m² của chúng tôi, đội ngũ kỹ sư đã chủ động triển khai một cách tiếp cận toàn diện. Chúng tôi tiến hành đánh giá DFM (Thiết kế nhằm thuận tiện cho sản xuất) chi tiết ngay từ giai đoạn đầu, trước khi bắt đầu chế tạo bất kỳ khuôn mẫu nào. Bằng cách tối ưu bán kính uốn, chuẩn hóa kích thước lỗ và tinh chỉnh việc tích lũy dung sai, chúng tôi giảm thiểu rủi ro sản xuất, tối ưu hiệu suất sử dụng vật liệu và cắt giảm đáng kể chi phí trên mỗi đơn vị. Xử lý bề mặt: Độ phẳng cao, chắn nhiễu điện từ (EMI) và kiểm soát độ hoàn thiện Các vỏ điện tử không chỉ yêu cầu độ bền cơ học mà còn cần một lớp vỏ ngoài vừa bền bỉ vừa thẩm mỹ, phản ánh đúng bản sắc thương hiệu. Sau giai đoạn đầu Gia công kim loại tấm theo yêu cầu và các quy trình uốn, các vỏ bọc đã trải qua công đoạn chuẩn bị bề mặt tỉ mỉ. Đầu tiên, một số điểm tiếp xúc bên trong cụ thể được che khuất để đảm bảo tiếp xúc kim loại–kim loại sạch, điều này rất quan trọng nhằm duy trì tiếp đất điện và chắn nhiễu điện từ (EMI) hiệu quả. Sau đó, chúng tôi áp dụng quy trình phủ bột cao cấp có kết cấu mịn. Lớp hoàn thiện này mang lại khả năng chống ăn mòn, độ ẩm môi trường, trầy xước hàng ngày và mài mòn vượt trội. Điều quan trọng nhất là đội ngũ gia công của chúng tôi duy trì kiểm soát độ phẳng nghiêm ngặt trong suốt các giai đoạn hàn, mài và xử lý nhiệt ở nhiệt độ cao. Biến dạng do nhiệt trong quá trình hàn hoặc xử lý nhiệt khi phủ bột có thể gây cong vênh các tấm, dẫn đến lệch vị trí khi lắp ráp cuối cùng. Bằng cách kiểm soát chặt chẽ lượng nhiệt đưa vào, chúng tôi đảm bảo các vỏ bọc hoàn thành lắp ráp liền mạch với các bo mạch in (PCB) nội bộ, viền màn hình và nắp ngoài của khách hàng, không để lại khe hở nào mất thẩm mỹ. Đảm bảo chất lượng và truy xuất nguồn gốc đạt chứng nhận ISO 9001 Sự nhất quán trong sản xuất hàng loạt là nền tảng cốt lõi của dịch vụ OEM do chúng tôi cung cấp. Khác với các thực tiễn phổ biến trên thị trường, vốn có thể chỉ thực hiện các kiểm tra trực quan sơ bộ trước khi đóng gói, Deeplink vận hành theo hệ thống quản lý chất lượng được chứng nhận ISO 9001 một cách nghiêm ngặt. Mỗi đợt sản xuất đều phải trải qua hơn 39 kiểm tra đảm bảo chất lượng (QA) cụ thể và được ghi chép đầy đủ. Đối với những vỏ bọc điện tử nhạy cảm này, quy trình kiểm tra nghiêm ngặt của chúng tôi bao gồm: Các câu hỏi thường gặp Câu hỏi: Deeplink sử dụng những quy trình sản xuất nào để chế tạo vỏ bọc điện tử chính xác? Trả lời: Cangzhou Deeplink áp dụng phương pháp sản xuất toàn diện, kết hợp cắt laser sợi quang công suất 12 kW để tạo các lỗ cổng chi tiết, uốn bằng máy ép CNC để đạt độ chính xác cao và dập kim loại bằng khuôn tiến bộ nhằm sản xuất hàng loạt các thanh đỡ cấu trúc. Các vỏ bọc được hoàn thiện với kiểm soát độ phẳng nghiêm ngặt và lớp phủ bột bền vững. Câu hỏi: Deeplink xử lý các yêu cầu về chắn nhiễu EMI/RFI trong các vỏ kim loại tấm như thế nào? A: Trong các giai đoạn chế tạo và hoàn thiện, Deeplink sử dụng các kỹ thuật che chắn chính xác trước khi phủ bột để đảm bảo các điểm tiếp xúc kim loại–kim loại trần vẫn sạch sẽ. Điều này đảm bảo việc nối đất điện đúng cách và khả năng chắn nhiễu EMI/RFI liên tục cho các thiết bị điện tử nhạy cảm. C: Các tiêu chuẩn kiểm soát chất lượng nào được áp dụng cho các vỏ kim loại tùy chỉnh? A: Deeplink hoạt động theo hệ thống quản lý chất lượng được chứng nhận ISO 9001, thực hiện hơn 39 lần kiểm tra QA trên mỗi dự án. Quy trình toàn diện này bao gồm việc xác minh vật liệu đầu vào, kiểm tra mẫu đầu tiên (FAI), giám sát kích thước trong quá trình sản xuất và đánh giá độ dày lớp phủ cuối cùng trước khi giao hàng. C: Deeplink có cung cấp hỗ trợ kỹ thuật cho việc gia công tấm kim loại không? A: Vâng, đội ngũ kỹ sư của chúng tôi thực hiện đánh giá DFM (Thiết kế nhằm thuận tiện cho sản xuất) một cách toàn diện trước khi chế tạo khuôn. Chúng tôi phân tích bản vẽ của khách hàng để xác định các rủi ro về dung sai, tối ưu hóa việc sử dụng vật liệu và đề xuất các cải tiến quy trình nhằm giảm chi phí đơn vị đồng thời nâng cao độ tin cậy của sản phẩm.
Nghiên Cứu Trường Hợp OEM: Vỏ Bọc Kim Loại Tấm Đúng Kích Thước Chính Xác Cho Thiết Bị Điện Tử





Các sản phẩm đề xuất