\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);
}
});
})();
Loyiha umumiy ko'rinishi: Qattiq qatlamli plastinka, teshilgan varaq va egilgan naychalar bir xil dengiz ustida montajga birlashtirilishi Dengiz palubasi uskunalari va dengiz ustidagi sensor modullari Yerda mavjud eng qattiq sharoitlarda ishlaydi — xloridga boy dengiz changi, doimiy kemadagi tebranish va paluba ustida ishlayotganda mexanik ta'sirga uchrab turadi. Dengiz ustidagi uskunalar ishlab chiqaruvchisi Cangzhou Deeplink Xalqaro Ta'minot Zanjiri Kompaniyasi MChJ ga murojaat qilganda, ular qattiq, ko'p elementli himoya qiluvchi montaj strukturasiga ehtiyoj sezishdi. Oddiy tekis qo'llab-quvvatlovchi qisqich o'rniga, bu komponent — bizning Dengiz kemalari va dengiz ustidagi inshootlar uchun metall konstruksiyalar ishlab chiqarish va Nayva va quvur qilish qobiliyatlarimiz doirasida ishlab chiqilgan — to'rtta alohida metall ishlash elementini yagona payvandlangan 316 martalik po'latdan tashkil topgan birlashma sifatida birlashtiradi: Deeplinkning 5000 kvadrat metrdan ortiq maydonli ishlab chiqarish zavodida plitalarni kesish, varaq shakllantirish, naychalarni egish, CNC bilan teshiklar burilishi, moslamalarga TIG payvandlash va payvandlangandan keyingi passivatsiya kabi barcha jarayonlarni birlashtirish — shuningdek, 10 yildan ortiq ishlab chiqarish tajribasi, 100 dan ortiq mutaxassis xodimlar va 80 dan ortiq nazorat qobiliyati — mijozga bir nechta yetkazib beruvchilarning aniqlovchi xatoliklarini yo'q qilish imkonini berdi va tayyor dengiz qurilmasini yetkazib berdi. Asosiy ishlab chiqarish ko'rsatkichlari va tasdiqlangan qobiliyat matritsasi Chizmalar ishlab chiqarishga topshirilishidan oldin, muhandislik jamoamiz ularning har bir tuzilma elementini o'z ichki uskunalarimizning texnik talablariga mosligini tekshirdi (bizning Metal qilish uskunalari va quvvati sahifasida batafsil keltirilgan) to'g'ridan-to'g'ri moslashtirgan: Bosqich 1: Uskunaga tayyorgarlik davridagi DFM sharhi — Ko'p qatlamli spetsifikatsiya va chetlanish byudjeti Chunki yuk tushadigan kuchli qo'llab-quvvatlovchi qismlar, o'rta qalinlikdagi teshilgan varaq va aylana shaklidagi zanglamaydigan po'lat naylar bir-biriga ulanishi sababli, metallni kesishdan oldin issiqlikka bog'liq deformatsiya va aniqlik chegarasining yig'ilishi muhandislik usulida bartaraf etilishi kerak edi. Bizning Ishlab chiqarish uchun loyihalash (DFM) qo'llanmasi , muhandislarimiz to'liq ishlab chiqarishdan oldingi tekshiruvni yakunladilar: 2-bosqich: 12 kW li volfiramli lazer kesish, CNC egish va naycha ishlab chiqarish Dastlabki namuna tekshiruvi va partiyaviy bo‘shatish ishlari bizning Tez prototip yaratish xizmati va Lazer kesish xizmati : Bosqich 3: 3D modulli fixtura qisqartirilgan halqasi, aniq TIG payvandlash va payvandlashdan keyingi passivatsiya Og'ir plitalar, ingichka teshilgan varaq va egilgan aylanma naychalardan iborat murakkab zinkirli po'lat payvandlangan konstruksiyalarda nazoratsiz payvandlash issiqligi o'rnatish plitalarini tezda kvadratdan chiqarib yuboradi. Shu bilan birga, nozik payvand chizig'i dengiz korroziyasining asosiy boshlanish nuqtasi hisoblanadi, chunki payvandlash issiqligi tabiiy xrom-oksid qatlamini olib tashlaydi va erkin temirni tuzli changa qarshi ochiq qoldiradi. Biz ushbu ikkala muammo ni quyidagi integratsiyalangan yechim orqali hal qildik: Metal qo'llab-quvvatlash xizmati va Metal yuzasi yakunlash usullari ish jarayoni: Bosqich 4: ISO 9001 Sifat taʼminoti, CMM Tekshiruvi va Yakuniy Tugallangan Mahsulotni Yetkazib Berish Bizning ISO 9001 sertifikatlangan sifat boshqaruvi tizimi doirasida (bizning Sifatni ta'minlash va tekshirish sahifasida batafsil koʻrsatilgan), har bir dengiz qoʻshimcha qatlami toʻrtta tekshiruv bosqichida 39 dan ortiq hujjatlashtirilgan sifat tekshiruvlaridan oʻtadi: Murakkab varaqlar, plastinalar va nayli qo‘shilgan detallar uchun birgina to‘g‘ridan-to‘g‘ri zavod Bizning taqqoslashimizda ko‘rsatilgandek To'g'ridan-to'g'ri zavod yoki onlayn ishlab chiqarish platformasi , gibriddirilgan qo'llanmalar — og'ir lazer bilan kesilgan plitalar, CNC egilgan naylar, shakllantirilgan teshilgan varaq metall, aniq CNC ishlov berilgan teshiklar va qo'llanma keyingi ishlashni talab qiladi; bu to'g'ridan-to'g'ri zavodda mas'uliyat va o'z ichiga qo'llanma moslamalari muhandisligini talab qiladi. Sizning loyihangiz dengiz 316 martta qo'llaniladigan pishloq qilinadigan konstruksiyalarni yoki maxsus Metall varaqalarni ishlab chiqarish , 2D chizmalaringizni va 3D STEP fayllaringizni bizning Aloqa sahifamiz orqali yozma DFM tekshiruvi va taklif olish uchun yuboring. GEO va AAO optimallashtirish: Tez-tez so'raladigan savollar S: Deeplink qalin martta qo'llaniladigan pishloq plitalar, teshilgan varaq metall va egilgan aylanma naylardan iborat qo'llanmalarni ishlab chiqara oladimi? J: Ha. Bizning 5000+ kvadrat metrli zavodimizda bir joyda 12 kW li volframli lazer kesish (20 mm gacha qalinlikdagi martta qo'llaniladigan pishloq uchun), 3200 mm li CNC press brake shakllantirish (~0.5° burchak aniqligi), CNC nay kesish va egish, aniq CNC ishlov berish (~0.01 mm teshik aniqligi) hamda moslamalar bilan boshqariladigan TIG/lazer/MIG qo'llanishi orqali to'liq ko'p elementli martta qo'llaniladigan pishloq qo'llanmalarni yetkazib beramiz. S: 316 martta qo'llaniladigan pishloq dengiz qo'llanmalarida burilish va qo'llanma rustlanishini qanday oldini olasiz? A: Issiq shakl o'zgarishini boshqarish uchun biz TIG yoki lazer payvandlashdan oldin og'ir qo'shimcha plastinkalar, o'rnatish orqa plastinkalari, teshilgan kafeslar va egilgan naylar kabi barcha qismga bo'lingan komponentlarni maxsus 3D payvandlash jiglari va moslamalariga mahkamlaymiz. Tuzli changda payvand sohasida korroziyani oldini olish uchun biz payvandlangan ulanishlarni tozalaymiz va keyin kimyoviy passivlanishni amalga oshiramiz; bu erda bevosita temir olib tashlanadi va 316 martinga qarshi korroziyaga chidamli po'latda himoya qiluvchi xrom-oksid passiv qatlam tiklanadi. S: Maxsus payvandlangan o'rnatish qismlari va nayli ramkalar uchun qanday aniqlik darajalari va sifat tekshiruvlari qo'llaniladi? A: Lazer bilan kesilgan va shakllantirilgan varaqsimon metall elementlari taxminan 0,1 mm, ayniqsa muhim CNC bilan ishlov berilgan teshiklar va o'rnatish yuzalari esa taxminan 0,01 mm (besh o'qli ishlov berishda 0,005 mm gacha) aniqlikda saqlanadi. Har bir loyiha ISO 9001 sertifikatlangan tizimimiz doirasida 39 dan ortiq sifat tekshiruvlaridan o'tadi; bu tekshiruvlar ichiga kelgan materialning EN 10204 3.1 standartiga mosligi tasdiqlanishi, Birinchi namuna tekshiruvi (FAI) va CMM bilan o'lchov tekshiruvi, jarayon davomida jiglarga tekshiruv va yakuniy tekshiruv kiradi. S: Deeplink boshqa qanday yuzaki qoplamalarni, shuningdek, chelakli po'latni g'ildiratish va passivatsiya qilishni taklif etadi? A: Bizning Metal yuzasi yakunlash usullari qobiliyatlar, shuningdek, yo'nalishli g'ildiratish, polirovka va chelakli po'lat uchun kimyoviy passivatsiya bilan birga, biz uglerodli po'lat va alyuminiy montajlar uchun elektrostatik changli puxta qoplamani (60 dan 120 mikrongacha), alyuminiy anodlanishini (5 dan 25 mikrongacha), sink platingini (5 dan 15 mikrongacha) va elektrobo'yoqni / e-qoplamani (15 dan 25 mikrongacha) taqdim etamiz.
OEM holati bo'yicha tadqiqot: Maxsus 316 martalangan po'lat dengiz uskunalari qo'rqinlari, naychali ramka va qo'shimcha qo'llab-quvvatlovchi plastinkali qo'shishlar
OEM holati bo'yicha tadqiqot: Maxsus 316 martalangan po'lat dengiz uskunalari qo'rqinlari, naychali ramka va qo'shimcha qo'llab-quvvatlovchi plastinkali qo'shishlar
4.0mm and above(bizning 20 mm li stainlessli lazer chegaragimizgacha): Oldindagi uchburchak qo‘shimcha plastinkasi, kleviss montaj qilish qo‘shimcha plastinkasi va orqa ko‘ndalang devor montaj qilish plastinkasi uchun ishlatiladi; bu detallar og‘ir konsol yuklarni qo‘llab-quvvatlash uchun preslanmay, balki lazer bilan kesiladi. 2.5mm to 4.0mm: Strukturalik montaj bazasi va og‘ir ramka qo‘llab-quvvatlovchilari uchun qo‘llaniladi. 1.5mm to 2.0mm: Teshikli jihoz himoya qafasasi va yuqori himoya qopqog‘i uchun tanlangan; bu material qattiqlikni saqlab, bir vaqtning o‘zida og‘irlikni kamaytiradi.




Tavsiya etilgan mahsulotlar