is a special kind of stretcher that helps move injured people safely. This stretcher comes in two parts...">
,需要通过父级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);
}
});
})();
Medicus curvatura Lati est un genre spécial de brancard qui aide à déplacer en toute sécurité des personnes blessées. Ce brancard se compose de deux parties qui s’assemblent autour de la personne. Cela s’avère très utile en cas d’urgence, lorsque la personne ne peut pas bouger, car elle pourrait être gravement blessée. Le brancard à cuillère est conçu pour maintenir la stabilité de la personne et éviter toute lésion supplémentaire pendant son déplacement. Chez XIEHE MEDICAL, nous veillons à ce que nos brancards à cuillère soient solides et fiables, afin qu’ils puissent être utilisés dans diverses situations, comme des accidents ou des urgences médicales. Aliud praecipuum praerogativum est possibilitas adiustandi lecticam. Quidam lecticae parum adiustari possunt, ut aptentur ad personas diversas magnitudinis. Haec differentia magnopere interest, quoniam non omnes eadem magnitudine sunt. Lectica etiam facile purgari debet. In casibus urgentibus res turbidae fieri possunt, ideo bonum est habere lecticam quae cito tergi possit. Praeterea, inspice an lectica in angustis locis capi possit. Interdum enim opus est personis e locis exiguis extrahendis, et lectica quae facile capiatur valde utilis est. Praeterea, apud XIEHE MEDICAL, varia offerimus Mobilia Hospitalia quae lecticas nostras scoop complectuntur, ut solutionem integram pro casibus urgentibus praebeamus. Est etiam prudens quaerere recensiones aut alia servitia de auxilio urgenti de experientiis suis interrogare. Possunt narrare quid eis prospere cessit et quid non. Cum paucas optiones inveneris, conare eas, si fieri potest, personaliter inspicere. Sic tibi facultas datur ut experiaris quam facile uti eas possis et quam solidae videantur. Apud XIEHE MEDICAL, diversa fercula effossoria praebemus quae necessitatibus diversorum utentium satisfaciunt. Intentio nostra est ut omne ferculum quod fabricamus ad vitam servandam efficacissime iuvet. Ferulae medicinales ad transportandum aegrotos sunt instrumenta specialia quae a medicis et auxiliatoribus in casibus urgentibus utuntur, ut aegrotos tuto portent. Haec instrumenta ita construuntur ut in casibus ut in collisionibus automobilium aut cum quis laesus est et non potest moveri, adiuvent. Unum ex optimis proprietatibus ferularum est quod in duas partes dividi possunt. Hoc significat auxiliatores medicinales ferulam sub aegroto glissare posse sine magnopere eum movendo. Movendo aegrotum laesum interdum vulnus gravius fieri potest, sed per ferulam hoc periculum minuitur. Praeterea, ferula est valde levis, quod auxiliatoribus in casibus urgentibus portandam facit. Commoditas est altera pars importantissima usus scoop stretcher. Cum aliquis laesus est, timere aut dolere potest. Cuspidatio mollis in stretcher adiuvat ut se commodius sentiat. Hoc est importante, quia eum placare potest. Stretcher etiam patientem tenet immotum, ne nimis moveatur dum transportatur. Hoc adiuvat ut ulteriores laesionis praeventae sint. Apud XIEHE MEDICAL, nos in scoop stretchers fabricandis versamur quae non solum sunt securae sed etiam commodae pro patientibus. Scimus quod patientes qui se securum sentiunt magis probabile est ut cum personis medicis cooperentur, quod eos cito ad curam necessariam perducere potest. Designatio nostrorum scoop stretchers permittit aequipe medica ut in valetudine patientis concentrate, scientes eum secure et commoditer ad hospitale vel alias areas curae translatum esse. Cum ad instrumenta medica venit, securitas valde importat. Necesse est ut scutum sublevatorium tuum omnia necessaria securitatis normativa impleat. Id significat ut scutum sublevatorium sufficiens robur habeat ad patientem portandum sine fractura. Apud XIEHE MEDICAL, scuta sublevatoria nostra ita designamus ut altissimis securitatis regulis satisfaciant. Unus modus ut scutum sublevatorium tutum esse comprobetur est certificata et signa ab organisationibus sanitariis quaerere. Haec certificata demonstrant scutum sublevatorium esse probatum et ut tutum ad usum iudicatum. Alius factor importantissimus est ut regulariter inspiciatur lectulus ad quaslibet offensiones. Hoc significat quaerere rimas, lacerationes, aut quidquid aliud possit lectulum insecuro reddere. Si quae pars lectuli offensa est, non debet uti donec restituatur vel substituatur. Etiam importante est ut lectulus cochleatus mundus servetur. Bacteriae et germens diffundi possunt si lectulus non bene mundatur, quod patientes aegros facere potest. Utentes tergentia disinficientia aut pulveres disinficientes adiuvare possunt ut lectulus pro patientibus securus sit. Staff etiam debent institui de modo recto utendi lectulo. Scientia de modo levandi et ponendi eum iuste adiuvat ut accidens et laesionis vitentur. Omnes hi gradus sunt necessarii ut certificetur quod vester lectulus medicus cochleatus securus est et paratus ad usum cum maxime opus est. Xiehe Medical Apparatus Instruments devotum fuit globali marketing venditionisque strategia. Habemus super 30 distributores operandos in super 120 nationibus post plus quam 10 annos supportus et conatus a sociis nostris. Studeamus stabilire longa relationes cum distributores et integratores ut ambulance scoop lectica futurum simul aedificemus. Hehe Instrumenta Medica clientium satisfactionem praecipue spectat, ut exigentias clientium summa peritia et fide dignitate implere studeat. Dediti adfectus et collaborans technologia nos adiuvant, ut proximos servitios in curatione aeris (Air splint kit) clientibus praebere possimus, ita ut necessitates clientium efficaciter explerentur. Conamur diuturnam et firmam societatem cum clientibus nostris aedificare, eisque producta et servitia optima offerre. Ut fabricator peritus instrumentorum medicorum, Xiehe Medical Apparatus Instruments praebet producta altae qualitatis et servitia specialia. Systema controlis qualitatis ISO13485 rigide adimplemus, et omnia nostra producta certificantur a TUV, CE, FDA, et multis aliis. Habemus turmam Air splints quae celeriter ad petitiones clientium respondere potest, suppeditans producta altae qualitatis et stabilia. Cum opus est tibi lectica ambulanti aut lectica plicatili pro aedificiis hospitalium aut rebus funebribus, Xiehe Medical Equipment solutionem praebet. Xiehe Medical Apparatus Instruments continuo in studiis creativis R&D versatur, dedicata productis praebendis quae praecipuos commercales habent. Patenta et proprietates intellectuales tutae sunt in lecticis Air splints, in instrumentis primae auxilii, in mobilibus pro aedificiis hospitalium, in rebus funebribus. Producta ita sunt concinnata ut cum praesentibus modis congruant et necessitatibus clientium nostrorum satisfaciant. A clientibus tam domesticis quam externis laudantur.feretrum medicalis
What to Look for in a High-Quality Medical Scoop Stretcher

How to Choose the Best Medical Scoop Stretcher for Emergency Situations

How Medical Scoop Stretchers Improve Patient Safety and Comfort

How to Ensure Your Medical Scoop Stretcher Meets Safety Standards
Why choose XIEHE MEDICAL
feretrum medicalis?
Universale marketing rete et stabiles partneri
Velocitas Post-Venditionis Servitium et Technicum Sustentaculum Centratum in Clientibus
Alta qualitas producta et specializata servitia
Inventiva R et D Et Venditionis Puncta
Non invenis quod quaeris?
Nunc Quotationem Petas
Consulentes nostros contacta pro productis amplioribus.Adloquere Nos