\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);
}
});
})();
Trường hợp tùy chỉnh tủ lưu trữ năng lượng mới: DEEPLINK giải quyết ba thách thức cốt lõi Khi một công ty công nghệ năng lượng mới tiếp cận DEEPLINK, các yêu cầu cốt lõi của họ rất rõ ràng: tùy chỉnh tủ kim loại cho hệ thống lưu trữ năng lượng thế hệ mới, đáp ứng ba tiêu chí bắt buộc — "lắp ráp độ chính xác cao, khả năng chống ăn mòn vượt trội và giao hàng hàng loạt trong 30 ngày". Các tủ này phải chứa được việc lắp đặt dày đặc các module pin lưu trữ năng lượng đồng thời chịu được điều kiện vận hành ngoài trời khắc nghiệt. Yêu cầu này không chỉ kiểm tra độ chính xác của các quy trình sản xuất mà còn đặt ra tiêu chuẩn cực kỳ cao đối với sự hợp tác xuyên suốt toàn bộ chuỗi ngành công nghiệp. Các điểm khó cốt lõi của dự án: Ba thách thức sản xuất quan trọng Kiểm soát độ chính xác nghiêm ngặt : Tủ cần có 12 vị trí lắp đặt dự phòng cho các module pin, với dung sai đường kính lỗ là ±0,1mm và độ lệch thẳng đứng khung ≤0,3mm. Các quy trình sản xuất truyền thống dễ bị lỗi tích lũy, dẫn đến kẹt khi lắp ráp module; Yêu cầu cao về khả năng chống ăn mòn : Dành cho các trạm năng lượng lưu trữ ngoài trời, sản phẩm phải vượt qua bài kiểm tra phun muối trong 48 giờ và chịu được các chu kỳ nhiệt độ từ -30℃ đến 60℃ sau xử lý bề mặt để ngăn ngừa rỉ sét trong quá trình sử dụng dài hạn; Tiến độ giao hàng khẩn : Khách hàng cần gấp lô tủ đầu tiên gồm 500 cái để đảm bảo kết nối dự án vào lưới điện, với thời gian chỉ 30 ngày tính từ khi chốt thiết kế đến khi giao sản phẩm hoàn chỉnh — ngắn hơn nhiều so với chu kỳ sản xuất tiêu chuẩn trong ngành. Giải pháp tùy chỉnh: Tích hợp quy trình + Hợp tác toàn chuỗi để tháo gỡ điểm nghẽn 1. Phân tích DFM trước sản xuất: Tối ưu cấu trúc để giảm độ phức tạp chế tạo Ngay sau khi nhận được yêu cầu, đội ngũ kỹ thuật của DEEPLINK đã lập tức tiến hành phân tích Thiết kế nhằm Đạt hiệu quả Sản xuất (DFM). Bằng cách tích hợp bản vẽ 3D do khách hàng cung cấp, cấu trúc tủ nguyên khối ban đầu đã được thiết kế lại thành một "thiết kế lắp ráp mô-đun", chia nhỏ thành ba thành phần chính (khung, tấm và giá đỡ lắp đặt). Thay đổi này không chỉ giảm thiểu rủi ro liên quan đến việc sản xuất các cấu trúc phức tạp mà còn nâng cao hiệu suất lắp ráp. Ngoài ra, tận dụng các thiết bị đo lường chính xác bao gồm hơn 80 khả năng kiểm tra, nhóm đã thiết lập trước các tiêu chuẩn kiểm tra kích thước then chốt để đảm bảo mỗi bước sản xuất đều có mốc chất lượng rõ ràng. 2. Tổ hợp Quy trình Cốt lõi: Cân bằng giữa Độ chính xác và Khả năng Chống ăn mòn Quy trình cắt laser : Các máy cắt laser sợi quang độ chính xác cao được sử dụng để cắt tấm thép không gỉ 304, đạt độ chính xác cắt ±0,05mm — hoàn toàn đáp ứng yêu cầu về đường kính lỗ và độ phẳng cạnh tấm. So với cắt plasma truyền thống, quy trình này tạo ra các đường cắt không ba via và không biến dạng nhiệt, loại bỏ nhu cầu mài thêm và rút ngắn đáng kể chu kỳ sản xuất; Quy Trình Uốn CNC : Các máy uốn thủy lực CNC độ chính xác cao kết hợp với khuôn uốn tùy chỉnh được sử dụng để tạo hình khung tủ theo nhiều chiều. Hệ thống giám sát góc thời gian thực kiểm soát độ lệch thẳng đứng của khung trong phạm vi 0,2mm, đảm bảo vị trí lắp module được căn chỉnh chính xác; Quy Trình Hàn Robot : Hàn robot sáu trục được áp dụng cho các mối nối tủ. So với hàn thủ công, phương pháp này tạo ra các mối hàn đều, đầy đủ với mức giảm 60% biến dạng hàn. Kiểm tra không phá hủy (NDT) sau hàn loại bỏ các lỗi hàn không hoàn chỉnh hoặc thiếu hàn, đảm bảo độ bền kết cấu; Quy Trình Xử Lý Bề Mặt Kép : Dựa trên khả năng chống ăn mòn vốn có vượt trội của thép không gỉ 304, quy trình bắt đầu bằng việc đánh bóng điện hóa để loại bỏ các tạp chất bề mặt và lớp oxit—cải thiện độ hoàn thiện bề mặt đồng thời tăng cường khả năng chống ăn mòn của vật liệu nền. Tiếp theo, xử lý thụ động tạo thành một lớp màng thụ động chống ăn mòn dày đặc và ổn định (phù hợp với tiêu chuẩn môi trường ROHS). Sản phẩm cuối cùng không xuất hiện rỉ sét hay bong tróc sau bài kiểm tra phun muối trong 48 giờ, do đó hoàn toàn phù hợp với các môi trường khắc nghiệt ngoài trời. 3. Sản Xuất Tự Động Hóa + Hợp Tác Toàn Chuỗi: Rút Ngắn Chu Kỳ Giao Hàng Với sự hỗ trợ từ 6 dây chuyền sản xuất tự động hóa (mức độ tự động hóa 80%) của DEEPLINK, toàn bộ quy trình sản xuất—từ cắt, uốn, hàn đến xử lý bề mặt, lắp ráp và kiểm tra—được tích hợp liền mạch. Trong quá trình sản xuất, Hệ thống Thực thi Sản xuất (MES) cung cấp giám sát thời gian thực về tiến độ sản xuất, đồng thời các luồng xanh được kích hoạt cho các công đoạn then chốt. Nguồn lực chuỗi cung ứng cũng được tích hợp để dự trữ trước nguyên liệu thô inox 304, tránh chậm trễ về vật liệu. Cuối cùng, việc sản xuất trọn gói 500 tủ đã hoàn thành trong 30 ngày—sớm hơn 2 ngày so với tiến độ của khách hàng. Phản hồi của Khách hàng và Hợp tác Dài hạn Sau giao hàng, khách hàng đã thực hiện kiểm tra nghiệm thu toàn diện thông qua một cơ quan kiểm định độc lập và uy tín. Các chỉ số bao gồm độ chính xác, khả năng chống ăn mòn và độ bền cấu trúc đều đạt tiêu chuẩn ngay từ lần đầu tiên, với tỷ lệ lắp ráp module thành công 100%. Giám đốc mua hàng của công ty công nghệ năng lượng mới cho biết: "Độ chính xác quy trình và hiệu suất giao hàng của DEEPLINK vượt quá kỳ vọng của chúng tôi. Khả năng chuyên môn của họ trong sản xuất cấu trúc phức tạp và thích ứng với môi trường khắc nghiệt củng cố niềm tin của chúng tôi đối với các dự án hợp tác trong tương lai." Hiện tại, hai bên đã ký kết thỏa thuận hợp tác chiến lược hàng năm, xác lập DEEPLINK là nhà cung cấp lõi cho các tủ lưu trữ năng lượng. Tại Sao Chọn DEEPLINK? Năng Lực Dịch Vụ Từ Đầu Đến Cuối : Cung cấp giải pháp gia công kim loại trọn gói—từ thiết kế bản vẽ, thử nghiệm mẫu đến sản xuất hàng loạt, đóng gói và vận chuyển—loại bỏ nhu cầu phải phối hợp với nhiều nhà cung cấp khác nhau; Chứng nhận chất lượng nghiêm ngặt : Sở hữu các chứng nhận uy tín bao gồm ISO9001/14001/45001, SGS và ROHS. Mỗi sản phẩm trải qua hơn 39 bước kiểm tra chất lượng, đảm bảo truy xuất nguồn gốc chất lượng toàn diện; Phản hồi Đơn đặt hàng linh hoạt : Hỗ trợ dịch vụ OEM/ODM với đội ngũ chăm sóc khách hàng làm việc 24/7 để giải đáp nhanh chóng các thắc mắc kỹ thuật. Các giải pháp quy trình có thể được tối ưu hóa cho điều kiện vận hành đặc biệt; Tự động hóa + Công nghệ Chính xác : Kết hợp 80% tự động hóa với các công đoạn cốt lõi như cắt laser, uốn CNC và hàn robot nhằm cân bằng giữa độ chính xác và hiệu suất. Nếu bạn có nhu cầu tùy chỉnh khung kim loại, tủ điện hoặc các sản phẩm gia công kim loại khác—dù đang đối mặt với thách thức về độ chính xác, thích nghi môi trường hay tiến độ giao hàng—DEEPLINK có thể cung cấp các giải pháp được thiết kế riêng cho bạn.
Trường hợp tùy chỉnh tủ lưu trữ năng lượng mới: DEEPLINK giải quyết ba thách thức cốt lõi







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