\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);
}
});
})();
Саласы: су сүзгілеу / өнеркәсіптік жабдықтар | Жылдық көлемі: 5 000 дана | Өндіруші: Цанчжоу Дилинк (ISO 9001) Бұл жағдай бойынша зерттеу жылдық өндіріс сериясын құжаттайды. 5 000 қызыл тозымдылыққа төзімді болаттан жасалған терең тартылған ыдыс, тісті шығыс орны мен дәнекерленген L-тәрізді орнату кронштейні бар , Guangzhou Deeplink International Supply Chain Co., Ltd. компаниясымен Еуропалық су сүзгісінің OEM-і үшін шығарылған. Қоршау қабырғасы 1,5 мм SPCC салқындатылған болаттан терең тартылған , жоғарғы бөлігінде тарылтылған және сыртқы тістері бар, лазермен кесілген орнату кронштейніне дәнекерленген және RAL 3002 қызыл тозымдылыққа төзімді қаптама (60–80 мкм) қабатымен аяқталған. Әрбір бұйым жинауға дейін 1,5 бар ауа сіңіру сынағынан өтеді. Құрал-жабдықтар, пішімдеу, дәнекерлеу және жабдықтау Cangzhou, Қытайдағы 5 000 м² ауданы бар ISO 9001 сертификатталған цехта ішкі өндірісте орындалады. Тапсырыс берушінің сызбасында газ және су өткізбейтін екі бөліктен тұратын цилиндрлік резервуар салу қажет болды, оған үш қатты талап қойылды: (a) газ және су өткізбейтін дәнекерлеулер ортасындағы қосылу жері мен кронштейн қосылуында, (b) бір дәл домалақталған сыртқы тісті жоғарғы бөлігінде стандартты еркек қосылысын шайбаларсыз қабылдауы керек және (c) жылтыр қызыл косметикалық жабыны жабыннан кейін көрінетін апельсин қабығы тәрізді бет, ағып кетулер мен дәнекерлеу шашырауларынан бос. Қабырға панеліне орнатылған бүйірлі L-тәрізді кронштейн толтырылған ыдысты ұстап тұруы керек, сондықтан кронштейндегі жазықтық пен тесіктердің орны жинақтау үшін маңызды. Әрбір өндірістік партиясы Deeplink-тің құжатталған тексеру тізбегінен өтеді: Сұрақ 1. Терең тарту деген не және оны айналдыру немесе дәнекерлеуге қарағанда қашан таңдау керек? Сұрақ 2. Дәнекерленген болат резервуарға салынған қызыл порошкалы бояудың тұрақтылығы қандай? Сұрақ 3. Осы бөлшекті 304 немесе 316 коррозияға төзімді болаттан жасауға бола ма? Сұрақ 4. Осындай терең тартылған ыдыс үшін ең аз тапсырыс мөлшері қандай? Сұрақ 5. Құрал-жабдық жасау мен үлгілерді дайындау қанша уақыт алады? Сұрақ 6. Қандай CAD файлдарын қабылдайсыздар? Бұл қызыл тозаңды боялған резервуардан басқа, Deeplink бір ғана орыннан индивидуалды металл бөлшектерді жеткізеді: терең тартылған штайнс болат бөлшектер , прогрессивті қабырғалы салмау , лазерлі кесу және профильді өңдеу , CNC өңделген компоненттер , дәнекерлендірілген жасау және жинақтар және қосымша табақты металл қораптар — әлем бойынша автомобиль, электроника, медицина, өндірістік машина-жабдық, жаңа энергия және тамақ өнеркәсібінің OEM-дерін қызметтendirеді. Суретіңізді, материалды, санын және жабылу талаптарын жіберіңіз. Біздің инженерлеріміз Жазбаша DFM қайта қарау жүргізеді — суреттің орындалу мүмкіндігін, дәлдікке қойылатын талаптардың қаупін, тегіс немесе мойын түріндегі тісті бұрандалардың нұсқаларын және жабылу таңдауын қамтиды — және 24 сағат ішінде баға ұсынады. Прототиптерден 20 000 данаға дейінгі сериялық өндіріске дейінгі тапсырыстар қабылданады.
Қызыл түсті порошкалық боялған терең тартылған болат резервуар және тісті шығыс — OEM жағдайы бойынша зерттеу.
Қызыл түсті порошкалық боялған терең тартылған болат резервуар және тісті шығыс — OEM жағдайы бойынша зерттеу.
1. Бөлшекке шолу
Өзгерткіш
Сипаттама
Компонент Аты
Тісті шығыс орны бар терең тартылған болат резервуары / сүзгі корпусы
Материалы
SPCC салқындатылған болат, 1,5 мм қабырға қалыңдығы (талап етілген жағдайда 304 SS қолжетімді)
Қалыптастыру
Екі сатылы терең тарту + тарылту + тістерді домалақтау
Шығыс тегісі
Сыртқы оралымды резьба, G 3/4″ (тапсырыс берушінің сызбасы бойынша)
Орнату қасиеті
Лазермен кесілген L-тәрізді кронштейн, екі өткізгіш тесігі бар, денеға MIG-дің көмегімен дәнекерленген
Тауып отыру
Темір фосфатты алдын-ала өңдеу + RAL 3002 қызыл жарқырағыш порошокты қаптау, 60–80 мкм
Ағып кету тесті
1,5 бар ауа су астында, 100% тексерілу
Жылдық көлем
5 000 дана/жыл (қайта тапсырыс беру партиялары)
Заманауи мезгіл
Құрал-жабдықтар мен үлгілер — 25 күн; партия — 30–35 күн

2. Сызбада қандай талап қойылған
3. Біз шешкен инженерлік қиындықтар

4. Өндіріс процесінің ағысы

5. Сапаны бақылау — 39+ СА кезеңі, ISO 9001
Кезең
Нені тексереді
Түсетін материал
Металлургиялық сертификат, қалыңдығы, SPCC рулонның беті
Бірінші мақала
Топ шығарылмайынша сызбаға сәйкес толық өлшемдік есеп.
Технологиялық
Сызба өлшемдері, тістің қалыңдығы, пішін бойынша дәлме-дәл келуі, әр сменадағы дәнекерленген беттің көрінісі
Ағып кету тесті
1,5 бар ауа су астында — барлық бірліктердің 100%
Жабын
Фильм қалыңдығы — 60–80 мкм, кесінділер бойынша жабысу, RAL үлгісімен салыстырғандағы түс
Соңғы қаптау
Көрініс бойынша бағалау, кронштейн тесігінің орны, түсу кезінде зақымданбауға арналған қаптау
6. Тұтынушы үшін нәтижелер
7. Жиі қойылатын сұрақтар
Терең тарту – бұл тақтайшаны қысымдық сақина астында қалыпқа тартатын тақтайшаларды өңдеу процесі. Ол цилиндрлі немесе тіктөртбұрышты жабық денелі бөлшектер (резервуарлар, стакандар, қапшықтар) үшін қолданылады, мұнда біркелкі қабырға қалыңдығы, денеде бойлық дәнекерлердің болмауы және орташа-жоғары көлемдерде жақсы экономикалық тиімділік қажет.
60–80 мкм қалыңдықта темір-фосфатты алдын-ала өңдеуден кейін қолданылатын RAL 3002 қызыл тозаңды бояу ішкі орындарда немесе жабық жабдықтарда қолданғанда әдетте 500–1 000 сағат тұз шашыратуға төзімділік көрсетеді және сұйық бояуларға қарағанда шашырауға төзімдірек. Сыртқы орындарда немесе суға батырып қолдану үшін біз 304/316 коррозияға төзімді болатқа немесе теңіз деңгейіндегі полиэфирлі тозаңға ауысамыз.
Иә. Терең тартылған коррозияға төзімді болаттан жасалған ыдыстар Deeplink компаниясының стандартты өнімдерінің бірі. Ескерту: коррозияға төзімді болатты тарту үшін жоғары күш керек, жылдамдық төмен болуы керек және қалып ішінде майлау қажет; сонымен қатар 304 маркалы болатта резьба домалағаннан кейін пластиктілікті қамтамасыз ету үшін кернеуді босату қадамын орындау керек. Қалып SPCC нұсқасынан бөлек дайындалады.
Біз прототиптар мен көлемді өндіруді қолдаймыз. Бұл сияқты индивидуалды терең тартылған резервуар үшін экономикалық тиімді көлем — прогрессивті калыпқа кететін инвестицияларға байланысты жылына 1000 данадан астам. Кіші партиялар үшін жеке станциялық құрал-жабдық немесе парақтан дәнекерленген альтернативалар негізінде баға берілуі мүмкін. DFM-ті қарағаннан кейін біз СМТ және құрал-жабдық құнын жазбаша хабарлаймыз.
Жұмсақ құрал-жабдық үлгілері үшін әдетте 20–25 күн, қатты өндірістік құрал-жабдық үшін — 25–35 күн; бұл бөлшектің күрделілігі мен тісті беттің пішінделуіне байланысты. Растаудан кейін сериялық өндірудің алдын-ала белгіленген мерзімі — 25–35 күн.
STEP, IGES, DXF, DWG және PDF сызбалары стандартты форматтар. Материал, қалыңдық, сан және жабылу талаптары көрсетілген файлды жіберіңіз; біздің инженерлік тобымыз баға берілмеден бұрын орындалу мүмкіндігін растайды. 8. Байланысты қабілеттер мен ұзақ мерзімді қызметтер
9. Өзіңіздің резервуарыңыз немесе корпусыңызға жоба бастаңыз
Ұсынылатын өнімдер