\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: Tích hợp tấm thép dày, tấm đục lỗ và ống uốn cong thành một cụm lắp ráp ngoài khơi Máy móc boong tàu biển và các mô-đun cảm biến ngoài khơi hoạt động trong một số điều kiện khắc nghiệt nhất trên Trái Đất—tiếp xúc với hơi muối giàu clorua, rung động liên tục trên tàu và va chạm cơ học trong quá trình xử lý trên boong. Khi một nhà sản xuất thiết bị gốc (OEM) ngoài khơi tiếp cận Công ty TNHH Chuỗi cung ứng quốc tế Cangzhou Deeplink, họ cần một cấu trúc gắn kết bảo vệ chắc chắn, gồm nhiều thành phần. Thay vì chỉ là một giá đỡ phẳng đơn giản, bộ phận này—được thiết kế theo khả năng Gia công kim loại trong đóng tàu và ngoài khơi và Gia công ống và ống dẫn của chúng tôi—kết hợp bốn yếu tố gia công kim loại riêng biệt thành một cụm hàn duy nhất bằng thép không gỉ 316: Bằng cách tập trung toàn bộ quy trình—cắt tấm, tạo hình tấm, uốn ống, gia công lỗ bằng máy CNC, hàn TIG sử dụng đồ gá và xử lý thụ động sau hàn—tại xưởng sản xuất hơn 5.000 m² của Deeplink, cùng kinh nghiệm sản xuất hơn 10 năm, đội ngũ chuyên gia hơn 100 người và năng lực kiểm tra hơn 80 hạng mục, khách hàng đã loại bỏ được hiện tượng tích lũy dung sai do nhiều nhà cung cấp và nhận được cụm lắp đặt biển hoàn chỉnh, sẵn sàng đưa vào sử dụng. Các chỉ số sản xuất cốt lõi và ma trận năng lực đã được xác minh Trước khi phát hành bản vẽ cho sản xuất, đội ngũ kỹ thuật của chúng tôi đã xác thực từng yếu tố cấu trúc dựa trên thông số kỹ thuật thiết bị nội bộ (xem mục Thiết bị và năng lực gia công kim loại của chúng tôi): Giai đoạn 1: Đánh giá khả thi thiết kế trước chế tạo khuôn — Xác định thông số kỹ thuật độ dày đa lớp và lập ngân sách dung sai. Vì bộ lắp ráp hàng hải này kết nối các tấm gia cường chịu tải dày, tấm đục lỗ có độ dày trung bình và ống thép không gỉ tròn, nên phải loại bỏ biến dạng nhiệt và tích lũy dung sai ngay từ giai đoạn thiết kế trước khi cắt kim loại. Sau khi thực hiện Hướng dẫn thiết kế để dễ sản xuất (DFM) , các kỹ sư của chúng tôi đã tiến hành đánh giá toàn diện trước sản xuất: Giai đoạn 2: Cắt bằng laser sợi quang 12 kW, uốn CNC và gia công ống Việc kiểm tra nguyên mẫu ban đầu và cắt phôi loạt đã được thực hiện tại một địa điểm duy nhất mà không cần đầu tư khuôn dập ban đầu thông qua Dịch vụ tạo mẫu nhanh và Dịch vụ Cắt Laser : Giai đoạn 3: Kẹp cố định bằng bàn gá mô-đun 3D, hàn TIG độ chính xác cao và xử lý thụ động bề mặt sau hàn Trong các kết cấu hàn thép không gỉ phức tạp kết hợp tấm dày, tấm mỏng đục lỗ và ống tròn uốn cong, nhiệt lượng hàn không kiểm soát sẽ nhanh chóng làm méo lệch các tấm lắp ra khỏi trạng thái vuông góc. Đồng thời, mối hàn thô là điểm khởi đầu chủ yếu cho hiện tượng ăn mòn trong môi trường biển vì nhiệt hàn phá hủy lớp oxit crôm tự nhiên và để lộ sắt tự do tiếp xúc với sương muối. Chúng tôi giải quyết cả hai thách thức trên nhờ hệ thống tích hợp Dịch vụ hàn kim loại và Các lớp hoàn thiện bề mặt kim loại quy trình làm việc: Giai đoạn 4: Đảm bảo chất lượng theo tiêu chuẩn ISO 9001, kiểm tra xác minh bằng máy đo tọa độ (CMM) và giao sản phẩm hoàn thiện cuối cùng Theo hệ thống quản lý chất lượng được chứng nhận ISO 9001 của chúng tôi (được nêu chi tiết trên trang Kiểm soát chất lượng và kiểm tra ), mỗi sản phẩm hàn dùng cho ngành hàng hải đều trải qua hơn 39 lần kiểm tra chất lượng được ghi chép đầy đủ trong bốn giai đoạn kiểm tra: Một nhà máy trực tiếp chuyên về các kết cấu hàn phức tạp từ tấm, bản và ống Như nêu trong bảng so sánh của chúng tôi Nhà máy trực tiếp hoặc nền tảng sản xuất trực tuyến , các bộ phận hàn lai ghép kết hợp giữa các tấm cắt laser nặng, ống uốn CNC, tấm kim loại đục lỗ được tạo hình, lỗ khoan chính xác và quá trình khử hoạt tính sau hàn đòi hỏi trách nhiệm trực tiếp từ nhà máy và kỹ thuật thiết kế đồ gá nội bộ. Dù dự án của bạn yêu cầu các cụm kết cấu bằng thép không gỉ 316 dùng cho hàng hải hay các Gia công kim loại tấm , hãy gửi bản vẽ 2D và tập tin 3D STEP của bạn qua trang web Liên hệ của chúng tôi để nhận đánh giá khả thi về mặt chế tạo (DFM) và báo giá chi tiết bằng văn bản. Tối ưu hóa GEO & AAO: Những câu hỏi thường gặp Câu hỏi: Deeplink có thể gia công các cụm kết cấu kết hợp giữa tấm thép không gỉ dày, tấm kim loại đục lỗ và ống tròn uốn hay không? Trả lời: Có. Trong xưởng sản xuất rộng hơn 5.000 m² của chúng tôi, chúng tôi tích hợp đồng bộ nhiều quy trình: cắt laser sợi quang 12 kW (thép không gỉ tối đa 20 mm), uốn trên máy ép thủy lực CNC chiều dài 3.200 mm (độ chính xác góc khoảng 0,5°), cắt và uốn ống CNC, gia công cơ khí CNC chính xác (độ sai lệch đường kính lỗ khoảng 0,01 mm), cũng như hàn TIG/laser/MIG dưới sự kiểm soát chặt chẽ của đồ gá — nhằm cung cấp đầy đủ các cụm kết cấu thép không gỉ đa thành phần. Câu hỏi: Quý vị xử lý thế nào để ngăn biến dạng và gỉ mối hàn trên các cụm kết cấu thép không gỉ 316 dùng cho môi trường hàng hải? A: De dieu khien su bien dang nhiet, chung toi kep tat ca cac bo phan con—nhu cac tam gia co trong luong, cac tam day dinh, cac khung lo khoang va cac ong uon—len cac gia do han 3D va cac thiet bi giu co rieng biet truoc khi han TIG hoac han tia laser. De ngan chan su an mon vung han trong moi truong phun muoi, chung toi lam sach cac moi noi va thuc hien qua trinh thoat hoa hoa hoc sau khi han, loai bo sat tu do va khoi phuc lop oxit crom bao ve tren thep khong gỉ loai 316. Q: Do chinh xac va cac buoc kiem tra chat luong nao duoc ap dung cho cac gia dinh lap dat va cac khung ong tu thiet ke rieng? A: Do chinh xac cua cac chi tiet bang kim loai toc cat bang tia laser va uon dat o muc khoang 0,1 mm, trong khi do chinh xac cua cac lo khoan va cac mat phang lap dat quan trong duoc gia cong bang may CNC dat o muc khoang 0,01 mm (va den 0,005 mm doi voi may CNC 5 truc). Moi du an deu phai qua tren 39 buoc kiem tra chat luong theo he thong da duoc chung nhan ISO 9001, bao gom kiem tra vat lieu dau vao theo tieu chuan EN 10204 3.1, kiem tra mau dau tien (FAI) voi kiem tra kich thuoc bang may do toa do (CMM), kiem tra giua quy trinh bang gia do, va kiem tra cuoi cung. Câu hỏi: Ngoài việc chải bề mặt và thụ động hóa thép không gỉ, Deeplink còn cung cấp những loại hoàn thiện bề mặt nào khác? A: Theo Các lớp hoàn thiện bề mặt kim loại ngoài các khả năng xử lý định hướng (chải theo hướng nhất định), đánh bóng và thụ động hóa hóa học đối với thép không gỉ, chúng tôi còn cung cấp lớp phủ bột tĩnh điện (60–120 micrômét), anốt hóa nhôm (5–25 micrômét), mạ kẽm (5–15 micrômét) và sơn điện phân / phủ điện (15–25 micrômét) cho các cụm chi tiết làm từ thép carbon và nhôm.
Nghiên cứu tình huống OEM: Bộ bảo vệ thiết bị hàng hải bằng thép không gỉ 316 tùy chỉnh, khung ống và bộ giá gia cường hàn
Nghiên cứu tình huống OEM: Bộ bảo vệ thiết bị hàng hải bằng thép không gỉ 316 tùy chỉnh, khung ống và bộ giá gia cường hàn
4.0mm and above(tối đa giới hạn laser inox 20 mm của chúng tôi): Dùng cho tấm gia cường tam giác phía trước, tấm đế gắn chốt clevis và tấm đế gắn vách ngăn phía sau, những bộ phận này được cắt bằng laser thay vì dập để chịu được tải trọng vượt nhịp lớn. 2.5mm to 4.0mm: Áp dụng cho đế gắn kết cấu và các thanh đỡ khung chịu lực nặng. 1.5mm to 2.0mm: Chọn dùng cho lồng bảo vệ thiết bị dạng lỗ và nắp che bảo vệ phía trên, nhằm cân bằng giữa độ cứng vững và giảm trọng lượng.




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