\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); } }); })();

Alle Kategorieë
Agter

Geval van Aanpasbare Nuwe Energie-bergingkabinet: DEEPLINK Takel Drie Kernuitdagings

Geval van Aanpasbare Nuwe Energie-bergingkabinet: DEEPLINK Takel Drie Kernuitdagings

Wanneer 'n nuwe energietegnologie-virage DEEPLINK benader het, was die kernvereistes duidelik: pas metaalkasse aan vir 'n volgende-generasie energie-bergingstelsel, deur drie onverhandelbare kriteria te ontmoet – "hoë-presisie-montering, uitstekende korrosieweerstand en massale lewering binne 30 dae". Die kasse moes digte installasie van energie-berging batterymodules kan hanteer terwyl dit ook bestand is teen harde buitebedryfsomstandighede. Hierdie vereiste het nie net die presisie van vervaardigingsprosesse getoets nie, maar ook uiterst hoogstaande standaarde vir volle bedryfsketting-samewerking opgelewer.

Kernprojek-pynpunte: Drie kritieke vervaardigingsuitdagings

Streng presisiebeheer : Die kas het 12 gereserveerde montageposisies vir batterymodule benodig, met 'n gaatjiediameter-toleransie van ±0,1 mm en 'n raam vertikale afwyking van ≤0,3 mm. Tradisionele vervaardigingsprosesse is vatbaar vir kumulatiewe foute, wat lei tot modulemonteringsblokkades;

Hoë korrosieweerstandvereistes : Bedoel vir buite-energiebergingkragstasies, moet die produk 'n 48-uur soutneveltoets oorleef en temperatuursiklusse van -30℃ tot 60℃ na oppervlakbehandeling weerstaan om roes tydens langtermyngebruik te voorkom;

Strakte leweringstydlyn : Die kliënt het dringend die eerste aanvoer van 500 kabinette benodig om projekverbinding aan die net te verseker, met slegs 30 dae toegewys vanaf ontwerpvindis tot afleweringsklaarproduk—veel korter as die industrie se standaardproduksiesiklus.

Aangepaste Oplossings: Prosesintegrasie + Volledige Ketting-samewerking om Bottelnekke te Verbreek

1. Voor-produksie DFM-analise: Optimaliseer struktuur om vervaardigingskompleksiteit te verminder

Na die ontvangs van die versoek, het DEEPLINK se ingenieursspan onmiddellik 'n Ontwerp vir Vervaardigbaarheid (DFM)-analise begin. Deur die 3D-tekeninge wat deur die kliënt verskaf is, te integreer, is die oorspronklike eenstukkabinstruktuur omskep na 'n "modulêre saamvoegontwerp"—wat dit in drie kerndele (raam, paneel en montagebeugel) verdeel. Hierdie wysiging verminder nie net risiko's wat verband hou met die vervaardiging van ingewikkelde strukture nie, maar verbeter ook die monteerdoeltreffendheid. Daarbenewens het die span, deur gebruik te maak van presisie-instrumente wat meer as 80 toetsvermoëns dek, reeds vooraf sleutelafmetings-inspeksiestandaarde opgestel om te verseker dat elke vervaardigingsfase 'n duidelike gehalte-aanduiding het.

2. Kernaamproseskombinasie: Balansering van Presisie en Korrosieweerstand

Laser-snyproses : Hoë-presisie vesellaser sny masjiene word gebruik vir 304 roestvrye staalplate, wat 'n snyakkuraatheid van ±0,05 mm bereik—volledig voldoen aan vereistes vir gatdeursnee en plaatrandvlakheid. In vergelyking met tradisionele plasmasny, lewer die proses snywerk sonder brûe en sonder hittevervorming, wat die behoefte aan addisionele sliperwerk elimineer en die produksieproses aansienlik verkort;

CNC Buigproses : Hoë-presisie CNC-persbukkels in kombinasie met spesiaal ontwerpte buigmalse word gebruik vir multidimensionele vorming van die kabinetraam. 'n Regstydse hoekmonstoringstelsel beheer die vertikale afwyking van die raam binne 0,2 mm, wat akkurate uitlyning van module-monteringsposisies verseker;

Robotiese Lassingsproses : Sesas-robotiese laswerk word gebruik vir kabinetverbindinge. In vergelyking met handmatige las, produseer dit eenvormige, volledige lase met 'n 60% vermindering in lastoestande. Nie-destruktiewe toetsing (NDT) na die laswerk elimineer onvolledige of gemiste lase, wat strukturele integriteit waarborg;

Dubbele Oppervlakbehandelingproses : Deur voort te bou op die inherente uitstekende korrosieweerstand van 304 roestvrye staal, begin die proses met elektropolering om oppervlakverontreiniging en oksiedlae te verwyder—waardeur die oppervlakafwerking verbeter word en die korrosieweerstand van die basismateriaal versterk word. 'n Daaropvolgende passiveringsbehandeling vorm 'n digte, stabiele antikorrosie-passiveringsfilm (wat voldoen aan ROOS omgewingsnorme). Die finale produk toon geen roes of afblaaiering na 'n 48-uur seutoets nie, wat dit volledig geskik maak vir harde buiteomgewings.

3. Geoutomatiseerde Produksie + Volledige Ketting-samewerking: Verkorting van leweringssiklusse

Aangedryf deur DEEPLINK se 6 geoutomatiseerde produksielyne (80% outomatiseringsvlak), word die hele vervaardigingsproses—van sny, buig en las tot oppervlakbehandeling, samestelling en inspeksie—naatloos geïntegreer. Tydens produksie bied 'n Vervaardigingsuitvoeringstelsel (MES) werklike tyd produksievoortgangsmonitering, terwyl groen kanale vir kritieke prosesse geaktiveer word. Versorgingskettinghulpbronne word ook geïntegreer om 304 roestvrye staal grondstowwe voorraad te hou, om materiaalvertragings te vermy. Uiteindelik is die volledige prosesvervaardiging van 500 kabinette in 30 dae voltooi—2 dae vroeger as die kliënt se skedule.

Kliënteterugvoer en Langtermynsamenwerking

Na aflewering het die kliënt omvattende aanvaardingstoetsing uitgevoer deur 'n derdeparty outoritatiewe inspeksieagentskap. Indikators insluitend presisie, korrosiebestandheid en strukturele sterkte het almal op die eerste poging aan standaarde voldoen, met 'n 100% module-assemlage sukseskoers. Die aankoopdirekteur van die nuwe-energietegnologie-onderneming het gesê: "DEEPLINK se prosespresisie en afleweringseffektiwiteit het ons verwagtinge oortref. Hul professionele vermoëns in die vervaardiging van komplekse strukture en aanpassing by harde omgewings, versterk ons vertroue in toekomstige projek-samewerkings." Tans het die twee partye 'n jaarlikse strategiese samewerkingsooreenkoms onderteken, waardeur DEEPLINK as kernverskaffer vir energie-bergingkaste gevestig is.

Waarom DEEPLINK Kies?

Ein-deur Diensvermoëns : Lewer eenstop-metaalverwerkingsoplossings—van tekenontwerp en monster-toetsing tot massaproduksie, verpakking en versending—en elimineer die behoefte vir kliënte om met verskeie verskaffers saam te werk;

Streng Kwaliteitsakkreditering : Het outoritatiewe sertifikasies insluitend ISO9001/14001/45001, SGS, en ROHS. Elke produk ondergaan 39+ KQ-inspeksie-stappe, wat volledige gehalte-trekkbaarheid verseker;

Flexibele Aanpassingrespons : Ondersteun OEM/ODM-dienste met 'n 24/7 naverkope-span wat tegniese navrae vinnig hanteer. Prosesoplossings kan geoptimeer word vir spesiale bedryfsomstandighede;

Outomatisering + Presisietechnologie : Kombineer 80% outomatisering met kernprosesse soos lasersny, CNC-boë, en robotiese laswerk om presisie en doeltreffendheid te balanseer.

As u aanpassingsbehoeftes het vir metaalstelle, kabinette of ander metaalverwerking—of dit nou uitdagings is in presisie, omgewingsaanpassing of leweringstermyne—kan DEEPLINK aangepaste oplossings vir u bied.

Vorige

Presisieplaatmetaalvervaardigingsoplossing: Presisiesnitting en sinkplatering van koolstofstaalbeugels

ALLES

Geen

Volgende
Aanbevole produkte