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

Бардык категориялар
Артка

Deeplink компаниясы немец азыктануу тармагындагы окурулардын өндүрүшү үчүн айлыгына 50 000 талап кылынган тактыкта 304-нүн коррозияга төзүмдүү болотунан жасалган штампталган байланыштарды таап берди

Проекттун фону жана чындыгы

Автоматташтырылган тамак-аштык орнотмалардын немец производителі Deeplink компаниясына сатып алуу боюнча ишти тез өткөрүүнү талап кылды. Компания өзүнүн жогорку ылдамдыктагы тамак-аштыкты бекемдөө жана толтуруу машиналарында колдонулган 304 нержелей болгон тайгактар — машиналардын автоматташтырылган тамак-аштыкты орнотуу сызыгындагы модулдар менен толугу менен ылдам бириктирилүүсү үчүн маанилүү компоненттер.

Проектте үч талап коюлду:

  • Жогорку көлөм: айлыгына 50 000 дана, партиядан партияга сапаты турганда.
  • Талаа толеранттуулугу: бардык бириктирилүүчү беттерде ±0,05 мм — автоматташтырылган тамак-аштыкты орнотуу сызыгындагы модулдар менен толугу менен ылдам бириктирилүүсү үчүн.
  • Тамак-аш үчүн жарамдуулук: Бардык бөлүктөр сертификатталган SUS304 эсилдик болоттон жасалышы керек, бетинде токтогон ластыкчылык жана чыбыкчылык болбошу керек, азыктар менен туранда түшпөгөн түзмөктөрдүн чөйрөсүнө ыңгайлуу.

Немец сатып алуучусу ирээсінде эки башка поставщикти сыноо үчүн таандашкан. Биринчи поставщик биринчи 3000 бөлүктөн кийин толеранттуулукту сактай алган эмес; экинчиси беттин биртектүүлүгүнүн жетишпеси из-изге таасир эткен микроконтаминация куркуясын тудурган клиенттердин аудиттеринде.

«Бизге ±0,05 мм толеранттуулукту максат деп эмес, негизги деңгээл деп кабыл алуучу партнёр керек болгон. Deeplink бул маселени биринчи күндөн баштап түшүнгөн.» — Немис азыктарды оролгоочу жабдууларынын OEM компаниясынын долбоор жетээси

metal stamping parts1.png

Deeplinkтын өзүнчө металл штамптоо чечими

Deeplinkта биз бул долбоорду жөнөкөй штамптоо буйруусу катары эмес, башкача айтканда толук тизмелик тактыкта жасалуу маселеси катары каршылык көрсөттүк. Биздин инженерлер командасы биринчи калып кесилгенге чейин комплекстүү DFM (Иштеп чыгууга ыңгайлуулук үчүн дизайн) талдоосун өткөрдү, жетишүүнүн негизги үч чекитин аныктады.

Фаза 1: Прогрессивдүү калыптын дизайны жана материалдын тандалышы

Коннектордун геометриясында бир нече ийилүүлөр, дырнатуулар жана эки татаал тактага ылайык келген орнотуу тескектери бар. 9-станциялуу прогрессивдүү калып 304-нүн иштеген катуулануу өзгөчөлүктөрүнө ылайыкташтырылган:

  • Материал: JIS G4304 SUS304 коррозияга чыдамдуу болоттун орундуу катушкасы, 1,2 мм калыңдыкта, БАОСТЕЛ сертификатталган заводунан түзүлгөн, материалдын толук издөө сертификаттары менен кошо.
  • Калыптын материали: SKD11 инструменталдык болот, TiCN жапмасы менен капталган, коррозияга чыдамдуу болоттун үстүнөн 2 миллиондон ашык калыптоо цикли үчүн калыптын жашын узартуу үчүн.
  • Кайра түзүлүү компенсациясы: FEA моделирование аркылуу эсептелген ашыкча ийилүү бурчтары, кайра түзүлүү айыгын 0,02 мм ден аз сейрек кылып, ±0,05 мм тактага ылайык келүүчү терезеге жетиштүү деңгээлде.

Фаза 2: Тактага ылайык келген калыптоо өндүрүшү

Өндүрүш биздин жогорку тездиктеги постептүү штамптоочу пресс (200 тонналык куаттуулук, 60–120 СПМ чыгышында түзөтүлүүчү) төмөндөгү технологиялык башкаруу функциялары менен:

Башкаруу чекити Тәсир Техникалык өлчөм
Өлчөмдүк тактук Сызыктагы лазердик микрометр Чыныгы убакытта баалоо, ±0,02 мм чаканыгы
Четки жылдызча (бурр) башкаруу Талаа арасындагы так иштеген калып (материалдын калыңдыгынын 6%) Четки жылдызча (бурр) бийиктиги ≤ 0,03 мм
Таңдоо ырмактын сапы Туура жабык майлануу системасы Көпүрөлүүлүк (галинг) жок, бирдиктүү жөнөтүлүш
Партиялык изилдөө Ар бир бөлүккө лазер менен белгиленип коюлган партия коддору Толук материалдан жеткирүүгө чейинки иштетүүнүн иштетүүсү

9-станциялуу прогрессивдүү калып чыгаруу → тескелөө → формалоо → монеталоо → кырларды тегиздөө баш бир пресс токтотуу циклында, 45–55 дана/минута таза чыгымды ишке ашыруу. Айлык 50 000 дана көлөмү прессинин капаситетинин ~20% га барабар болуп, көлөмдү кеңейтүү үчүн жетиштүү орун калдырып койду

metal stamping2.jpg3-фаза: Иштетүүнүн ичинде сапатты текшерүү

DeepLink-ин 39 пункттуу сапатты текшерүү системасы үч этапта ишке ашырылды:

  1. Биринчи үлгүнү текшерүү (FAI): 2D сызмасына карата толук өлчөмдүк долбоор, CMM менен функционалдык мааниге ээ болгон бардык өлчөмдөрдүн текшерилүүсү. Толеранциянын 60% тан ашып кеткен өлчөмдүн аныкталышы автоматтык калыпты түзөтүүнү ишке ашырат.
  2. Иштеп жатканда үлгү алуу: Ар бир 500 буюмдан кийин 10 үлгү алынат; алар өтөт/өтпөйт өлчөгүчтөр менен текшерилет жана беттин тегиздиги өлчөнөт (Ra ≤ 0,8 мкм талап кылынат, иштелип чыгарылган Ra 0,4–0,6 мкм).
  3. Колдонууга даярдоо алдында акыркы текшерүү: AQL 1,0, ISO 2859-1 боюнча II деңгээлдеги үлгү алуу; өлчөмдөр, 10× күчөтүүдө чекиттерди текшерүү жана беттин көрүнүштүк сапатын текшерүү камтылат.

4-фаза: Тамак-аш өнөрлүгүнүн стандарттарына ылайык тазалоо жана ороп-сарычталоо

Тамак-аштын ороп-сарычталоо жабдууларында колдонулуучу максатын эске алып, Deeplink стандарттуу өнөрлүк ороп-сарычталоодон тышкары кошумча штамптоодон кийинки протоколдорду ишке ашырды:

  • Ультраңгыс тазалоо: Штамптоо мацелеринин калдыктарын тамак-аш өнөрлүгүнүн тазалык стандарттарына ылайык алып салат.
  • Пассивдештирүү иштетүү: 304 маркалык коррозияга төзүмдүү болоттун табигый коррозияга төзүмдүүлүгүн жогорулатат; бул тамак-аш өнөрлүгүндөгү суу менен жуулуучу шарттар үчүн өтө маанилүү.
  • Загрязнунун алдын алуу үчүн оролгоо: Бөлүктөр ным тарткычы бар герметик ПЭ пакеттерге салынат, андан кийин күчөтүлгөн экспорттук картондорго жайгаштырылат. Ар бир картондун үстүндө цифровой текшерүү долбооруна шилтеме берген уникалдуу QR-код бар.

Долбоордун натыйжалары

Метрика Махсус мақсат Жетиштирилди
Айдынкы чыгаруу 50 000 дана 50 000–55 000 дана
Өлчөмдүк толеранс ±0.05mm Cpk = 1,67 (99,99% ченгелден ичинде)
Биринчи өтүштөгү чыгарылыш ≥ 98% 99.2%
Убакытында жеткирүү 100% 100% (6 ай убакытта үзбөлөк)
Клиенттин текшерүү натыйжасы Тасуу Туура эмес ыңгайланууларсыз өттү

Узак мөөнөттүү өндүрүштүн алгачкы алты айынан кийин немис клиенти өз тапшырмасын эки кошумча коннектордун өнүмдүүлүгүн кошуп, жалпы айлык көлөмүн үч SKU боюнча 120 000 данага чейин көтөрдү.

stamping metal4.jpg

Неге глобалдык тамак-аш жабдууларынын OEM өндүрүшчүлөрү металлдык штамптоо бөлүктөрү үчүн Deeplink тандайт

Бул долбоор Deeplinkтин негизги баалуулук ишенимдүүлүгүн көрсөтөт жогорку тактыктагы нержелей болгон челик штамптоосу үчүн регламенттелген индустрияларда:

  • ISO 9001:2015 Сертификацияланган түзүлүштүн бардык процесстеринин издөөсү мүмкүн болгон өндүрүш.
  • Иштетилген прогрессивдик калыптардын өз ишинде проектилештирилиши жана жасалышы — калыптарды сырттан тапшыруу жок, иштетилүү убактысы кыска, контролдун деңгээли жогору.
  • 6 өндүрүш сызыгында автоматташтыруу деңгээли 80% түзүлүштүн сапатын масштабда камсыз кылат.
  • DFM менен биринчи күндөн баштап ынтымакташтык: биздин инженерлер сиздин тилиңизди сүйлөйт жана өндүрүш башталганга чейин өндүрүшкө ыңгайлуу дизайндарды оптималдашат.
  • Азыктар өнөрөсүндөгү билгичтик: биз азыктар үчүн жарамдуу металл бөлүктөрдүн өзгөчөлүктөрүн — материалдын сертификатталышынан баштап, ластанбаган оролууга чейин — түшүнөбүз.

Сиздин өзгөчөлүктүү металлдык штамптоо долбооруңуз үчүн баа суроо

Сизге керек болсо 304 маркалык коррозияга чыдамдуу болот коннекторлору ,азыктар үчүн жарамдуу штампталган компоненттер , же жогорку тактыктагы металл бөлүктөр кандайдыр бир өнөрөстүн ишмерлиги үчүн Deeplink эксперттик жана жетиштүүлүккө ээ.

Бүгүн инженердик командабызга кайрылыңыз →

  • Email: [email protected]
  • Телефон/WhatsApp: +86-18617745678
  • Жайгашуу: Хэбэй провинциясы, Цанчжоу шаары, Кытай — дүйнөлүк OEM өндүрүшчүлөрүн тез халыкаралык жеткирүү менен камсыз кылат.

Цанчжоу Deeplink Эл аралык Тасмак-Түзүлүш туралы: Deeplink — Кытайда жайгашкан OEM өндүрүшчү, ал өзгөчөлөнгөн металл табактарды жасоо, так металл штамптоо, лазердик кесүү, CNC иштетүү, терең тартуу жана кайнаштыруу жана чыбыктоо үчүн маманданган. 10 жылдан ашык тажрыйбага ээ жана 5000+ квадрат метр өндүрүш мейданы бар, биз автомобиль, авиа-космос, тамак-аш жабдуулары, жаңы энергия жана өнөрөттүк автоматташтыруу салондорунда иштеген дүйнөлүк жогорку сапаттуу өндүрүштүн секторлоруна тез, так жана надеждуу металл бөлүктөрүн жеткирүүнү камсыз кылат.

Мурдакы

ЭВ аккумулятордун компоненттеринин өндүрүшүн оптималдаш: Так чапталуу боюнча ишти изилдөө

БАРДЫГЫ

DEEPLINK-түзүлгөн металл иштетүүсү: Өзгөчөлүүлүү стейнлесс темир шампань бокалдары үчүн так формалоо кыйынчылыктарын жеңүү

Кийинки
Сунуш кылынган өнүмдөр