\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ất Cả Danh Mục

TIN TỨC

Trang chủ&gt;TIN TỨC

Kiểm soát chất lượng và kiểm tra

Sep 17, 2026

Chất lượng là chuỗi các quyết định được thực hiện trong suốt quy trình sản xuất, chứ không phải là bước kiểm tra cuối cùng được bổ sung vào cuối quy trình. Mỗi đơn hàng tại Cangzhou Deeplink đều trải qua hơn 39 lần kiểm tra chất lượng, bao gồm kiểm tra vật liệu đầu vào, kiểm tra mẫu đầu tiên, kiểm tra trong quá trình sản xuất và kiểm tra cuối cùng, dưới hệ thống quản lý chất lượng được chứng nhận ISO 9001; đồng thời lưu trữ hồ sơ đầy đủ để đơn hàng lặp lại có thể được so sánh với đơn hàng gốc.

Các bước kiểm tra mà mỗi đơn hàng đều phải trải qua

  • Vật liệu đầu vào: kiểm tra cấp độ, độ dày và tình trạng trước khi vật liệu được đưa vào sản xuất
  • Kiểm tra mẫu đầu tiên: chi tiết đầu tiên được đo đạc theo bản vẽ và phê duyệt trước khi bắt đầu loạt sản xuất
  • Kiểm tra trong quá trình sản xuất: giám sát kích thước và bề mặt trong suốt quá trình sản xuất nhằm phát hiện sớm các sai lệch
  • Kiểm tra cuối cùng: các chi tiết hoàn thành được kiểm tra theo bản vẽ và so sánh với mẫu đầu tiên đã được phê duyệt
  • Đóng gói và tài liệu: bảo vệ chi tiết và hoàn tất hồ sơ cho đơn hàng

Tại sao kiểm tra mẫu đầu tiên là quan trọng nhất

Bài viết đầu tiên là nơi một bản vẽ được kiểm tra so với thực tế. Việc phê duyệt bài viết này trước khi bắt đầu chạy sản xuất sẽ ngăn chặn việc phát hiện vấn đề dung sai trên mười nghìn chi tiết. Đồng thời, bài viết này cũng tạo ra cơ sở tham chiếu để đo lường các đơn hàng lặp lại, vì vậy chúng tôi coi việc phê duyệt bài viết đầu tiên như một bước kiểm soát bắt buộc chứ không chỉ là thủ tục hình thức.

Kiểm soát quy trình đằng sau công tác kiểm tra

Công tác kiểm tra chỉ phát hiện những gì quy trình sản xuất tạo ra, do đó bản thân quy trình cũng được kiểm soát: khuôn và bộ dập tiến trình được thiết kế và bảo trì tại chỗ; các giá đỡ và đồ gá hàn đảm bảo độ chính xác về hình học trong suốt quá trình sản xuất; và đánh giá khả thi về thiết kế (DFM) xác định các rủi ro liên quan đến dung sai trước khi gia công khuôn, chứ không phải sau đó. Hơn 10 năm sản xuất trong xưởng rộng trên 5.000 m² với hơn 100 nhân sự.

Hồ sơ và khả năng truy xuất nguồn gốc

Các đơn đặt hàng sản xuất lưu giữ hồ sơ từ các kiểm tra nêu trên, và giấy chứng nhận vật liệu có thể cung cấp theo yêu cầu. Hồ sơ là yếu tố giúp đơn hàng lặp lại trở nên dự báo được: mẫu đầu tiên đã được phê duyệt, phiên bản bản vẽ và kết quả kiểm tra đều được lưu kèm theo đơn hàng, nhờ đó lần sản xuất tiếp theo có cơ sở cụ thể để đối chiếu.

Những thông tin bạn cần cung cấp khi đặt hàng

  • Các kích thước nào mang tính then chốt đối với chức năng và lắp ráp — những kích thước này sẽ được ưu tiên kiểm tra; các kích thước còn lại có thể được báo giá một cách hợp lý.
  • Bất kỳ yêu cầu thẩm mỹ nào, bao gồm các bề mặt nào sẽ nhìn thấy và bề mặt nào sẽ được che khuất trong quá trình hoàn thiện.
  • Tài liệu bạn cần đi kèm các chi tiết, cũng như định dạng tài liệu phù hợp với hồ sơ chất lượng nội bộ của bạn.
  • Yêu cầu về bao bì và nhãn mác, bao gồm cả cách thức trình bày chi tiết trên dây chuyền sản xuất của bạn.

Các câu hỏi thường gặp

Quý công ty có chứng nhận ISO 9001 không?

Đúng vậy. Cangzhou Deeplink vận hành hệ thống quản lý chất lượng được chứng nhận ISO 9001, và mỗi đơn hàng sản xuất đều trải qua hơn 39 bước kiểm tra chất lượng với hồ sơ được lưu đầy đủ nhằm đảm bảo khả năng truy xuất nguồn gốc.

Tôi có nhận được hồ sơ kiểm tra cùng đơn hàng của mình không?

Các hồ sơ từ hơn 39 lần kiểm tra chất lượng được lưu giữ cho từng đơn hàng sản xuất, và giấy chứng nhận vật liệu có thể cung cấp theo yêu cầu. Vui lòng thông báo cho chúng tôi ngay từ giai đoạn đặt hàng nếu quý khách cần định dạng cụ thể cho tài liệu kiểm soát chất lượng nội bộ.

Điều gì xảy ra nếu một chi tiết không đáp ứng bản vẽ?

Chi tiết đó sẽ được xác định dựa trên bản vẽ và mẫu đầu tiên đã được phê duyệt, sau đó được điều chỉnh ngay tại bước quy trình trước khi tiếp tục chạy sản xuất, nhằm khắc phục nguyên nhân gốc rễ thay vì chỉ sửa riêng lẻ từng chi tiết.

Quý khách làm thế nào để đảm bảo tính nhất quán giữa các đơn hàng lặp lại với đơn hàng đầu tiên?

Mẫu đầu tiên đã được phê duyệt, phiên bản bản vẽ đã được phát hành và hồ sơ kiểm tra đều được lưu kèm theo đơn hàng. Đơn hàng lặp lại sẽ được đo kiểm tra dựa trên hồ sơ đó và sản xuất bằng cùng bộ khuôn/máy móc, vốn được bảo trì tại chỗ.

Quý khách có thể yêu cầu kiểm tra các kích thước then chốt theo tiêu chuẩn riêng của mình không?

Có. Đánh dấu các kích thước quan trọng trên bản vẽ và chúng sẽ được kiểm tra khi sản xuất mẫu đầu tiên cũng như trong quá trình sản xuất. Nếu dung sai yêu cầu khắt khe hơn khả năng lặp lại ổn định của quy trình, chúng tôi sẽ thông báo cho quý khách trong buổi rà soát khả thi về thiết kế (DFM) thay vì chấp nhận đơn hàng mà chúng tôi không thể đáp ứng.

Đọc thêm: độ chính xác trong gia công kim loại ,Hướng dẫn DFM và gia công kim loại tấm .