virtuvės...">
,需要通过父级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 || node.innerHTML || '');
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;
var fatherDom = trimText(node.parentNode.innerHTML || '');
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
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);
}
});
})();
Ar norėtumėte pirkti aukštos kokybės <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> virtuvės vežimėlį didmenine prekyba? XIEHE MEDICAL siūlo tokius vežimėlius jūsų masiniam pirkimui ir naudojimui. Šie vežimėliai puikiai tinka visų rūšių komercinėms virtuvėms, maisto paruošimo įstaigoms ir maisto paslaugų teikimui. <a href="/Stainless-trolley"><strong>Nerūdijančiojo plieno</strong></a> vežimėlis yra pakankamai tvirtas, kad ištvertų kasdieninį visų virtuvės prietaisų naudojimą. Naudodami XIEHE MEDICAL nerūdijančiojo plieno vežimėlį, galėsite lengvai perstatyti savo virtuvę ir dirbti efektyviau. Aukštos kokybės <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> virtuvės vežimėlis didmenine prekyba: kaip minėta, mūsų <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> virtuvės vežimėlio kokybė yra puiki. Tai tvirta konstrukcija, skirta intensyviam naudojimui komercinėse virtuvėse. Mūsų aukštos kokybės medžiaga daro nerūdijantįjį plieną atspariu korozijai ir rūdijimui. Naudokite mūsų vežimėlį patogiam produktų, indų ir virtuvės reikmenų vežimui po virtuvę su puikiai sukasiomis ratukais. Ar jums reikia darbo vietos ant ratukų, ar sandėliavimo vietos, ar greito pasiekimo darbo paviršiaus – XIEHE MEDICAL nerūdijančiojo plieno vežimėlis gali būti jums tinkamas sprendimas. Universalus ir ilgaamžis nerūdijančiojo plieno vežimėlis visoms jūsų virtuvės reikmėms Nors XIEHE MEDICAL nerūdijančiojo plieno virtuvės vežimėlis yra labai tvirtas, jis taip pat yra daugfunkcis. Jį galima naudoti ruošiant maistą, padėliojant, pateikiant arba saugant. Vežimėlis turi blizgančią nerūdijančiojo plieno konstrukciją, kuri suteikia jam šiuolaikišką ir profesionalų išvaizdą jūsų virtuvėje, o lengvai valomą išorinę paviršių – kad būtų užtikrinta higiena maisto apdorojimui. Nepriklausomai nuo to, ar veikiate restorane, kateringų paslaugų vežimėlyje ar bendrovės valgykloje, XIEHE MEDICAL nerūdijančiojo plieno vežimėlis yra greitas ir patikimas sprendimas, padedantis jums išlaikyti virtuves tvarkingas ir efektyvias. Padarykite protingą investiciją jau dabar. Įsigykite XIEHE MEDICAL nerūdijančiojo plieno vežimėlį ir paspartinkite darbą. Kuriant komercinę virtuvę, būtina turėti pagrindinę ir tinkamą įrangą; tokia įranga yra laikiklis, o jei norite, kad jūsų įmonė veiktų gerai ir tenkintų klientus, viena svarbiausių įrangos rūšių, į kurią reikėtų investuoti, yra nerūdijančiojo plieno vežimėlis. Šioje diskusijoje aptarsime, kaip pasirinkti tinkamą nerūdijančiojo plieno vežimėlį savo komercinei virtuvei, geriausius komerciniais tikslais skirtus nerūdijančiojo plieno vežimėlius bei įprastas problemas, su kuriomis galite susidurti naudodami nerūdijančiojo plieno vežimėlius, ir kaip jas išspręsti. Kaip pasirinkti geriausią <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> krepšinį savo komercinėje virtuvėje: Pasirinkdami nerūdijančiojo plieno vežimėlį savo komercinėje virtuvėje, turėtumėte atsižvelgti į keletą pagrindinių veiksnių. Pirma, turėtumėte apsvarstyti vežimėlio dydį ir kiek vietos jums reikia. Atsižvelkite į savo virtuvės išdėstymą ir į tai, kaip vežimėlis veiks. Antra, taip pat turėtumėte apsvarstyti vežimėlio naudingosios apkrovos talpą. Įsitikinkite, kad daiktai, kuriuos planuojate dėti į vežimėlį, gerai telpa į jo naudingosios apkrovos ribas. XIEHE MEDICAL didžiuojasi siūlydama <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> vežimėlius įvairių dydžių ir konfigūracijų, kad atitiktų jūsų poreikius. Kokie yra geriausiai veikiantys <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> vežimėliai, tinkami komerciniam naudojimui? Aukščiausios vertinimo <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> vežimėliai apima įvairius produktus, surūšiuotus pagal jūsų pageidavimus. Tarp jų – nerūdijančiojo plieno naudingumo vežimėlis ir nerūdijančiojo plieno judamasis vežimėlis. Šie du produktai yra CICAP produktų padaliniai. <a href="/Stainless-trolley"><strong>Nešiukai iš nerūdijančiojo plieno</strong></a> yra puikūs ir patikimi, tačiau jų naudojimo metu gali kilti keletas dažnų problemų. Pirmoji iš jų – nešiukas gali pradėti rūdyti. Tai gali įvykti, jei nepaisykite valymo ir priežiūros. Visada valykite prietaisą švelniu plovikliu ir vandeniu, o po to kruopščiai išdžiovinkite. Kitas dažnas poblemos – nešiukas gali sukibti arba tapti nestabilus. Tai gali reikšti, kad prietaise nėra vienodos svorio pasiskirstymo. Norėdami tai ištaisyti, bandykite visą svorį vienodai paskirstyti lentynose ir įsitikinkite, kad nešiukas stovi lygioje paviršiuje. Šis aukštos kokybės <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> nešiukas puikiai padės virtuvėje ir ilgai tarnaus, jei tinkamai prižiūrėsite. XIEHE MEDICAL siūlo daugybę <a href="/Stainless-trolley"><strong>nerūdijančiojo plieno</strong></a> nešiukų, idealiai tinkamų komerciniam naudojimui; jie taip pat naudojami praktinėse veiklose. Priklausomai nuo nešiuko paskirties, galite pasirinkti tam tikro dydžio ir apkrovos talpos modelius. Visada atsiminkite, kad reguliari priežiūra yra pagrindinis ilgaamžiškumo raktas.</p> Xiehe Medical Apparatus Instruments nuolat dalyvauja pažangiose tyrimų ir plėtojimo veiklose ir deda visas pastangas, kad užtikrintų konkurencingus produktų pardavimo privalumus. Patentai ir intelektinės nuosavybės teisės apsaugoti medicininiai nešėjai, pirmosios pagalbos įranga, tokia kaip ligoninių baldai, taip pat laidotuvių produktai. Produktai sukurti atitikti šiuolaikinius trendus ir klientų reikalavimus. Jie yra puikiai vertinami tiek vietinių, tiek užsienio rinkų vartotojų, įskaitant nerūdijančiojo plieno virtuvės vežimėlių klientus. „Hehe Medical Equipment“ vertina klientų pasitenkinimą ir stengiasi patenkinti jų poreikius dėl virtuvės iš nerūdijančiojo plieno vežimėlių aukščiausiu lygiu, užtikrindama puikią kokybę ir patikimumą. Mes galime suteikti klientams asmeninę ir patikimą aptarnavimą dėl mūsų darbuotojų įsipareigojimo bei naudojamos bendradarbiavimo technologijos. Mūsų tikslas – sukurti ilgalaikį, stabilų ir abipusiškai naudingą ryšį su klientais bei teikti jiems aukščiausios kokybės produktus ir paslaugas. „Xiehe Medical Apparatus Instruments“ įsipareigojo įgyvendinti globalizacijos strategiją rinkodaroje ir pardavimuose. Turime daugiau kaip 30 platintojų, išsisklaidžiusių 120 šalių teritorijoje, kurie per daugiau nei dešimtmetį kartu su mūsų partneriais padėjo mums stiprinti pozicijas. Virtuvės iš nerūdijančiojo plieno vežimėlių srityje mes siekiame sukurti ilgalaikius partnerystės santykius su platintojais ir integratoriais, kad kartu kurtume ateitį. Kaip autoritetinė medicinos įrangos gamintoja, „Xiehe Medical Apparatus Instruments“ teikia aukštos kokybės produktus bei specializuotas paslaugas. Mes griežtai laikomės ISO13485 kokybės valdymo standarto, o visi mūsų produktai patvirtinti TÜV, CE, FDA ir kt. Turime ekspertą, specializuotą virtuvės nešiojamoms nerūdijančiojo plieno vežimėliams, kuris greitai reaguoja į klientų poreikius ir tiekia stabilius bei patikimus produktus. Jei reikia greitosios pagalbos nešėjų, suskleidžiamų nešėjų, ligoninės baldų ar laidotuvių prekių, „Xiehe Medical Equipment“ gali suteikti savo klientams tenkinančius sprendimus.virtuvės nerūdijančio plieno krepšelis
Aukštos kokybės nerūdijančio plieno virtuvės vežimėlis didmenine prekyba

Universalus ir ilgaamžis nerūdijančio plieno vežimėlis visoms jūsų virtuvės reikmėms

Kaip pasirinkti geriausią nerūdijančio plieno vežimėlį savo komercinei virtuvei

Kokie yra aukščiausiai įvertinti nerūdijančio plieno vežimėliai komerciniam naudojimui?
Why choose XIEHE MEDICAL
virtuvės nerūdijančio plieno krepšelis?
Inovacinis tyrimas ir plėtra bei produktų prekybos taškai
Klientų orientuota greita po pardavimo paslauga ir techninė palaika
Pasaulinis marketingo tinklas ir stabili partneriai
Aukštos kokybės produktai ir specializuoti paslaugos
Susijusios produktų kategorijos
Nerandate ko ieškote?
Prašykite kainos pasiūlymą dabar
Susisiekite su mūsų konsultantais dėl daugiau galimų produktų.SUJUNKITE SU MUMIS