\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); } }); })();Case StudyAgricultural Machinery
Agricultural machinery metal parts — guards, shields, mounting plates and frames — work outdoors, under load, in dust and mud, and they are bought on cost per unit as much as on quality. In this case study, Deeplink — an ISO 9001 certified sheet metal fabrication and stamping OEM — shows how an agricultural equipment manufacturer sourced 10,000 heavy-duty machinery guards and shields for tractors, harvesters and tillage equipment, combining heavy gauge laser cutting, press brake forming, progressive die stamping for volume fittings, jig-based MIG welding and powder-coated outdoor finishes. The project delivered ±0.1 mm laser-cut hole positioning, ±0.5 mm formed and welded assembly features, a 500-hour salt spray validation on coated samples, and a documented unit-cost reduction from the same DFM discipline that cut an EV battery bracket programme by 35%.

| Application | Guards, shields and mounting plates for tractors, harvesters, mowers and tillage equipment — [confirm application & machine type] |
|---|---|
| Material | Q235 carbon steel (2.0–4.0 mm); alternatives: SGCC galvanized / 304 stainless / aluminum |
| Sheet thickness | 2.0–4.0 mm heavy gauge |
| Key tolerances | ±0.1 mm laser-cut holes; ±0.5 mm formed & welded assembly features |
| Surface finish | Powder coating (outdoor grade), zinc plating, electropainting |
| Core processes | Heavy gauge laser cutting, press brake forming, progressive die stamping, MIG welding, CNC machining |
| Quality control | 39 QA checks per project: incoming, first article, in-process, final |
| Corrosion validation | 500-hour neutral salt spray test (ASTM B117) on coated samples — [confirm test hours] |
| Outcome | 100% inspected, powder-coated, on-time delivery with documented unit-cost saving — [confirm order volume, PPM & cost saving] |
The customer — an OEM supplying tractor and harvester manufacturers — needed guards and shields that survive impact, vibration, dust, mud and weather, protect rotating components, and fit the same bolt pattern every time across a production run. Five requirements drove the specification:
Deeplink's answer was a four-stage workflow built around one principle: design the process before the tooling. Every stage is part of our one-stop sheet metal fabrication service, which covers laser cutting, stamping, bending, welding, CNC machining and surface treatment under one roof.
Before any plate was cut, our engineers ran a design-for-manufacturability (DFM) review on the customer's drawings: nesting, material thickness, tolerances and die design were checked, and avoidable cost was reported in writing — the same method that cut unit cost by 35% on an EV battery bracket programme. Q235 carbon steel was confirmed as the base grade for cost-effective strength; SGCC galvanized and 304 stainless were specified only where humidity, slurry or coastal exposure demanded them. For a full comparison of grades and gauges, see our metal materials guide and fabrication tolerances guide.
Heavy gauge laser cutting produced blanks, vents and mounting holes in 2.0–4.0 mm plate with ±0.1 mm positioning, then CNC press brake forming held bend angles and flange heights to ±0.5 mm on the assembled feature. Parts with repetitive hole patterns and fittings were run as custom metal stamping parts on in-house progressive dies to cut unit cost at volume — the same high-volume approach that delivered 20,000 motorcycle side mount brackets with CNC tube bending.

Thick carbon steel structures were MIG-welded on jigs and fixtures, so mounting points and interfaces stayed aligned across the batch and weld distortion was controlled before it reached assembly. Welds on guards and shields were ground and dressed where specified to remove spatter and sharp edges, protecting operators and cables in the field. See how welding is controlled across our shop in our welding and riveting parts capability.
Guards and frames were powder-coated in outdoor grade (with zinc plating or electropainting on smaller steel fittings), and coated samples ran a 500-hour neutral salt spray test per ASTM B117 with no red rust on exposed surfaces. Finished parts were protected before packing so the coating arrived unmarked. Our metal surface finishes guide compares powder coating, anodizing, zinc plating and electropainting in detail.

Agricultural supply chains do not tolerate field failures, and every guard in this programme ran through the same documented ISO 9001 quality system used for our automotive, medical and energy customers — 39+ QA checks per project:
Every batch is traceable: material certificate → production lot → inspection records → salt spray report → shipment, so a single guard can be traced back to its coil and press stroke.
| Dimensional tolerance | ±0.1 mm achieved on laser-cut holes; ±0.5 mm on formed & welded assembly features |
|---|---|
| Structural integrity | Heavy gauge (2.0–4.0 mm) guards, jig-welded with controlled distortion |
| Surface finish | Outdoor-grade powder coating; zinc plating / electropainting on fittings |
| Corrosion resistance | Passed 500-hour neutral salt spray test (ASTM B117) |
| Unit cost | Reduced via DFM nesting and progressive die tooling — [confirm saving %] |
| Inspection | 100% of critical features measured; full reports issued |
| Delivery | On time with complete documentation — [confirm volume, PPM & lead time] |
Beyond this project, farm machinery OEMs and dealers work with Deeplink because the factory combines a stamping specialist's depth with the breadth of a one-stop metal fabrication partner:

Related reading: our EV battery bracket cost-reduction case study, 20,000-piece motorcycle bracket programme, and all performance cases. For the industry specifically, start from our agricultural machinery metal parts page.
Carbon steel (Q235 / SPHC) is the cost-effective default for guards, shields, plates and frames; galvanized steel or 304 stainless is specified where humidity, slurry or coastal exposure demands more corrosion resistance, and aluminum when weight matters. The DFM review at quotation stage confirms the grade for each environment.
Yes. Guards, frames and plates are produced by heavy gauge laser cutting and press brake forming in 2.0–4.0 mm carbon steel, then MIG welded on fixtures so mounting points stay aligned across the run. Volume fittings move to progressive die stamping with in-house tooling.
DFM review before tooling checks nesting, material thickness, tolerances and die design for avoidable cost and reports the options in writing — the same method that cut unit cost by 35% on an EV battery bracket programme while holding tolerance. High-volume parts then run on in-house progressive dies.
Zinc plating for smaller steel parts, powder coating or electropainting for frames and guards, and 304/316 stainless for high humidity, coastal or slurry exposure. Coated samples are validated by salt spray testing (ASTM B117) with reports issued per lot.
Deeplink holds ±0.1 mm on laser-cut hole positioning, ±0.5 mm on formed and welded assembly features, and ±0.02 mm on CNC-machined pins, bushings and precise fits — verified by CMM and calibrated gauges under the 39-step inspection regime.
Send your 2D drawings or 3D models — Deeplink's engineers will review manufacturability, material grade, tolerance and unit cost, and return a quotation with a sample timeline.
Contact Deeplink