taikymo sritis skubioje pagalboje. Wh...">
,需要通过父级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);
}
});
})();
Sužinokite apie taikymo sritis XIEHE MEDICAL keturių kojų neštuvai ypatingai svarbus avarinės situacijos metu. Reaguojant į medicininę nelaimę ar tiesiog vykdant paieškos ir gelbėjimo procedūrą, Reach & Rescue reikšmė gelbėti gyvybes ir palaikyti ją tampa akivaizdi, kai jis naudojamas pacientų išvežimui iš pastato. Pradėkite nagrinėti būtinas šios įrangos naudą ir savybes šiukšlių krepšelio išskleidimas kuriais turėtų naudotis pirmasis reaguotojas. Kadangi jis pagamintas iš aukštos kokybės medžiagos, yra ilgaamžis ir saugus naudoti. XIEHE MEDICAL šiukšlių krepšelio išskleidimas pagamintas iš aukštos kokybės medžiagų ilgalaikiam naudojimui. Patvarus konstrukcijos darbas gali išlaikyti intensyvų naudojimą ir sudėtingą reljefą, todėl idealiai tinka įvairioms skubiosios pagalbos situacijoms. Mūsų neštuvai yra išbandyti, kad užtikrintų saugą ir ilgaamžiškumą visiems jūsų poreikiams, kaip tai daroma kai kuriose šalies ligoninėse. Patogiam naudojimui tiek pacientams, tiek gelbėtojams, kiekvienas AED sukurtas lengvam tvarkymui ir naudojimui. Mūsų šiukšlių krepšelio išskleidimas pagamintas iš stipraus aliuminio ir suprojektuotas pagal paciento bei gelbėtojo poreikius, turintis ergonomišką dizainą. Minkštas pagalvėlis ir patikimas diržas užtikrina būtiną paciento komfortą ir saugumą saugiai bei lengvai pervežti. Be to, lengvas ir paprastas naudoti dizainas leidžia atsakovo komandos nariams ar gelbėtojams lengvai valdyti neštuvus, išvengiant įtampos ar nuovargio ilgalaikiam naudojimui. Patogus dizainas Neštuvų krepšys turi praktišką ir ergonomišką konstrukciją, kurios nauda jaučiama tiek pacientui, tiek operatoriui. Sujunkite jo daugiafunkciškumą, ir tai padės pirmosios pagalbos teikėjui. Daugiafunkciškumas: be pacientų perkėlimo, XIEHE MEDICAL šiukšlių krepšelio išskleidimas turi begalinį kitų taikymo būdų skaičių, kurie padidina jo naudingumą įvykus avarinei situacijai. Mūsų šiukšlių krepšelio išskleidimas galima reguliuoti diržus, neštuvų šonai gali būti sulankstyti, kad neštuvus būtų galima lengvai įstumti ir saugoti greitosios pagalbos automobilyje. Dėl nuimamų priedų ir papildomų komplektų šis universalumas leidžia derinti ir pritaikyti įvairioms skubios pagalbos situacijoms. Teikiant visapusišką ir lankstią gydymo parinktį mūsų šiukšlių krepšelio išskleidimas įrodo esant vertinga investicija pirmosios pagalbos darbuotojams, susiduriantiems su įvairiomis situacijomis. Nuostabi kaina didmeninėms užsakymams aukščiausios reitingo šiukšlių krepšelio išskleidimas xIEHE MEDICAL. Grupėms ir įmonėms, kurios nori suteikti aukštos kokybės skubios pagalbos galimybes savo komandoms, XIEHE MEDICAL siūlo pelningus didmeninės prekybos sandorius mūsų aukštai vertinamu neštuvų krepšeliu. Ekonomiški variantai: pirkdami dideliais kiekiais galite gauti nebrangias, tačiau kokybiškas ir efektyvias sprendimus. Mūsų patyrusi pardavimų komanda padės jums rasti idealų sprendimą jūsų tikslams, pasiūlys individualias konfigūracijas ir užtikrins geriausią klientų aptarnavimą visą bendradarbiavimo laikotarpį – nuo pradžios iki pabaigos. Siūlome didmeninę prekybą produktais, atitinkančiais bet kokius skubių gelbėjimo operacijų poreikius, kad jūsų skubios pagalbos komanda visada būtų pasiruošusi naujo kartos našumo standartais šiukšlių krepšelio išskleidimas iš XIEHE MEDICAL. Xiehe Medical Apparatus Instruments – aukščiausios kokybės medicinos įrangos gamintojas. Taip pat teikia specialius paslaugų pasiūlymus. Griežtai taiko ISO13485 kokybės valdymo sistemą, o visi jos gaminiai yra sertifikuoti TÜV, CE, FDA ir daugelio kitų institucijų. Dedikuoti darbuotojai, kurie dirba su mažomis krepšinėmis nešėjais, geba greitai patenkinti klientų poreikius, užtikrindami patikimą ir saugią produkciją bei paslaugas. Ar jums reikia nešėjo ambulansoje, suskleidžiamojo nešėjo ligoninėms ar laidotuvių prekių – Xiehe Medical Equipment turi atsakymą. Hehe medicinos įranga dėmesį skiria klientų pasitenkinimui ir siekia tenkinti savo klientų reikalavimus aukščiausiu lygiu, užtikrindama puikią kokybę ir patikimumą. Pasišventusių darbuotojų komanda ir mūsų šiukšlių krepšelio nešiklio technologija leidžia mums teikti aukščiausios kokybės, individualizuotą paslaugą klientams, užtikrinant, kad jų poreikiai būtų tinkamai aptarnauti. Mūsų tikslas – sukurti nuolatinį, stabilų ir abipusiškai naudingą ryšį su klientais bei siūlyti jiems aukščiausios kokybės produktus ir paslaugas. Xiehe medicinos prietaisai ir įranga siekia globalizacijos strategijos rinkodaros ir pardavimų srityse. Daugiau kaip dešimt metų veikdami remdamiesi tiekėjų parama, turime daugiau nei 30 pasaulinių platintojų. Mūsų produktai paskirstomi daugiau kaip 120 šalių. Mes sutelkiame dėmesį į ilgalaikių partnerystės santykių su šiukšlių krepšelio nešikliais ir integratoriais kūrimą, kad kartu su partneriais kurtume ateitį. Xiehe Medical Apparatus rodo nezvilgžtinį įsipareigojimą naujovėms ir tyrimams/plenkimui, taip pat siūlo produktais, turinčiais konkurencingus pardavimo momentus. Yra užtikrintos patentų ir intelektinės nuosavybės medikininėms lentynoms, skubios pagalbos produktams bei ligoniniams ir kremacijos produktams. Produktai kuriami, kad atitiktų klientų reikalavimus ir būtų tinkami dabartiniam modos trendui. Šie produktai yra populiariai tiek tarptautinėse, tiek vietos rinkose.šiukšlių krepšelio išskleidimas
Aukštos kokybės medžiagos užtikrina ilgaamžiškumą ir saugą kiekvieno naudojimo metu

Ergonominis dizainas užtikrina patogumą tiek pacientams, tiek gelbėtojams

Daugiafunkcinės savybės padaro jį vertinga priemonėmis pirmosios pagalbos teikėjams

Gaukite geriausią pasiūlymą didmeninėms užsakymams iš mūsų aukščiausios reitingo neštuvų krepšių
Why choose XIEHE MEDICAL
šiukšlių krepšelio išskleidimas?
Aukštos kokybės produktai ir specializuoti paslaugos
Klientų orientuota greita po pardavimo paslauga ir techninė palaika
Pasaulinis marketingo tinklas ir stabili partneriai
Inovacinis tyrimas ir plėtra bei produktų prekybos taškai
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