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

Toutes les catégories

Service de prototypage rapide

Oct 19, 2026
Service de prototypage rapide Service de prototypage métallique rapide
Cangzhou Deeplink International Supply Chain Co., Ltd.

Validez l’ajustement, la fonctionnalité et la fabricabilité avant la réalisation des outillages

Service de prototypage rapide

Utilisez la découpe laser, le pliage, l’usinage CNC, le soudage et l’assemblage pour tester une conception avant de vous engager dans la fabrication des outillages de production.

Envoyez votre plan pour examen Consultez les équipements et les capacités

Un prototype existe pour répondre à une seule question : le design fonctionne-t-il ? Le produire sans s’engager dans la fabrication d’outillages rend cela abordable, car une modification du design ne coûte alors qu’un nouveau programme plutôt qu’une nouvelle matrice.

Notre méthode de prototypage

  • Découpe et formage au laser, qui n’impliquent aucun coût d’outillage
  • Usinage CNC pour les caractéristiques que le formage ne peut pas garantir
  • Prototypes soudés et assemblés conformément à l’unité de production finale
  • Procédés adaptés aux besoins spécifiques de validation du prototype

Spécification technique

Élément Capacité
Coût d'outillage Aucun coût pour les prototypes découpés et formés
Procédés de prototypage Découpe au laser, formage, usinage CNC, soudage, assemblage
Tolérance Environ 0,1 mm pour les pièces découpées et formées ; environ 0,01 mm pour les caractéristiques usinées
Vérification Premier article mesuré par rapport au plan ; inspection finale avant emballage
Le transfert de production Mêmes procédés que la commande de production, donc ce qui est approuvé est ce qui sera reproduit

Ce qu’un prototype doit établir

  • Que la pièce s’ajuste correctement à ses composants associés et à l’ensemble
  • Que le matériau et l’épaisseur conviennent à l’application
  • Que les tolérances indiquées sur le plan sont bien celles qui comptent
  • Que la voie de fabrication choisie sera transférable à la production

Examen DFM avant l’outillage

Lorsqu’un design est destiné à passer en production de grande série, notre équipe d’ingénierie examine sa fabricabilité avant toute décision définitive concernant l’outillage. Les risques liés aux tolérances et les facteurs de coût sont signalés par écrit, afin que les modifications soient apportées au stade du plan plutôt qu’après découpe de la matrice.

Prototype à production

Les mêmes procédés utilisés pour fabriquer le prototype sont également appliqués à la commande de production ; ainsi, ce qui est approuvé au stade du prototype est exactement reproduit.

Contrôle qualité

Les prototypes suivent le même parcours d’inspection que les commandes de production : vérification des matières premières entrantes, mesure du premier article conformément au plan, inspection finale avant emballage.

Exemples réels de fabrication

Sheet metal prototype parts made without production tooling
Pièces prototypes en tôle réalisées sans outillage de production
Laser cutting used for tool-free metal prototypes
Découpe laser utilisée pour des prototypes métalliques sans outillage
Prototype fabricated enclosure for fit and assembly validation
Enceinte prototype fabriquée pour valider l’ajustement et l’assemblage

Comment le projet progresse dans la production

  1. 1.Définir ce que le prototype doit démontrer et identifier les interfaces critiques
  2. 2.Examiner le dessin pour une méthode de fabrication sans outillage ou à faible engagement
  3. 3.Fabriquer et inspecter les premières pièces physiques
  4. 4.Vérifier l’ajustement, la fonctionnalité et le montage par rapport à l’application prévue
  5. 5.Enregistrer les modifications approuvées et planifier le transfert vers la production en série

Applications et types de pièces

Validation de la conception en tôle
Supports et boîtiers fonctionnels
Pièces de validation fonctionnelle usinées
Ensembles prototypes soudés
Essais préliminaires des pièces embouties
Unités pilotes avant la production en série

Ce qu’il faut inclure dans votre demande de cotation (RFQ)

  • Dessin 2D et modèle 3D disponible
  • Matériau et procédé de production prévu
  • Ce que le prototype doit démontrer
  • Interfaces critiques et tolérances
  • Quantité de production attendue après validation

Un ensemble de dessins clair permet à l’équipe d’ingénierie d’évaluer la fabricabilité, le choix du procédé et les besoins en inspection avant la production. Aucun engagement relatif aux tolérances, au prix ou aux délais n’est pris tant que le dessin spécifique n’a pas été examiné.

Ressources manufacturières associées

Questions fréquemment posées

Existe-t-il une quantité minimale pour les commandes de prototypes ?

Aucun outillage n’est requis pour un prototype découpé et embouti ; il n’y a donc aucune barrière liée à l’outillage pour une première commande de petite taille. Envoyez-nous votre plan et la quantité souhaitée, nous vous confirmerons le procédé lors de l’établissement de votre devis.

Le prototype correspondra-t-il à la pièce de production ?

Les mêmes procédés utilisés pour le prototype sont appliqués à la commande de production ; ainsi, ce qui est approuvé au stade du prototype est exactement reproduit. Lorsqu’un composant passe à l’emboutissage en série pour la production en volume, cette évolution est planifiée et confirmée à l’avance.

Pouvez-vous examiner la conception avant que je ne lance la fabrication des outillages ?

Oui. Lorsqu’une conception est destinée à passer en production de série, notre équipe d’ingénierie évalue sa fabricabilité avant la validation des outillages et signale par écrit les risques liés aux tolérances ainsi que les facteurs de coût.

Un prototype nécessite-t-il la finition finale de production ?

Uniquement lorsque la finition affecte l’ajustement, la corrosion, l’apparence ou l’objectif du test. Précisez ce que le prototype doit démontrer afin que la portée appropriée puisse être examinée.

Le prototype peut-il être fabriqué sans outillage de production ?

La découpe au laser, le pliage et l’usinage CNC permettent souvent de valider une conception sans engager de matrice de production.

Comment les retours sont-ils recueillis avant la production ?

Les risques liés à la fabricabilité et aux tolérances, identifiés lors de l’examen et du premier article, sont résolus conformément au dessin avant que le processus de production ne soit validé.

Plusieurs versions de prototype peuvent-elles être comparées ?

Des révisions différentes peuvent être produites à partir de versions contrôlées des dessins. Chaque révision doit être clairement identifiée dans la demande de devis (RFQ) et les fichiers.

Comment un prototype est-il transféré vers une production à grande échelle ?

Une fois la conception approuvée, le processus de fabrication est réexaminé afin de répondre à une demande répétée. Le passage au poinçonnage ou à des outillages dédiés est planifié et confirmé, et non pas supposé.

Envoyez votre plan pour un examen manufacturier

Envoyez le plan avec la matière, la quantité et les objectifs de validation du prototype. Si une série de production est prévue par la suite, veuillez l’indiquer dès cette étape afin que le parcours de fabrication soit choisi en conséquence.

Demander un examen de fabrication