...">
,需要通过父级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)) {
_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)) {
_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)) {
_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')) {
_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)) {
_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)) {
_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);
}
});
})();
Tungkol sa Pabahuhulugan na Stretcher ng XIEHE MEDICAL na May Gulong Kailangan mo ba ng magaan at portable Mga Patakbo na Maaaring Magtahi ? Ang saging na ito ay ginawa para sa mataas na lakas at kaligtasan at nagbibigay ng mabilis na paggalaw at transportasyon sa isang medikal na emerhensiya. Dahil sa disenyo nitong nakakatipid sa espasyo at madaling imbakan, ang mga ospital at mga serbisyong EMS ay magkakaroon ng komportableng paraan upang imbak at ilipat ang mga saging na ito. Higit pa rito, napakaganda ng presyo namin para sa saging na may gulong at tape kaya ang XIEHE MEDICAL ang pinakamainam na pagpipilian ng Mga Patakbo na Maaaring Magtahi na may mga sinturon. Paglalarawan: Materyal: bakal, kanvas Mga Tampok: may gulong, madaling gamitin at ilipat; matibay, madaling dalhin ~~~ Magandang kalidad Saging na mabilis buksan, maaring i-fold nang pahaba para makatipid sa espasyo sa imbakan at transportasyon Kasama ang dalawang strap para sa pasyente na mabilis tanggalin (mula sa matibay na nilon na hindi madaling basagin, may metal na buckle) Mga pocket na pwedeng i-flip para ilagay ang mga strap ng pasyente Mga hawakan sa bahaging ulo at paa para dala ang saging mula sa 2 panig * Kasama ang bag para dalhin. Sukat ng Cart: 72" L x 22" W. Nakapoldadong Haba. Ang aming stretcher na may gulong ay pinalawak at napakagaan kaya madaling dalhin, perpekto para sa mga emerhensiyang medikal. Portable ang stretcher upang mabilis at madaling mailipat ng EMS staff ang GE patients. Matibay at mapagkakatiwalaan ang mga gulong at maayos ang pagtakbo ng dolly kahit sa matatarik na terreno. Dahil sa disenyo nitong patabingi, madaling dalhin at itago kapag hindi ginagamit—nakakatipid ng espasyo, praktikal para sa mga ospital at ambulansya. Ang XIEHE MEDICAL Foldable stretcher with wheels ay isang makabagong inobasyon sa merkado ng kagamitang medikal. PINAKAMAGANDANG URI NG MATERYAL-- 150g Lemon Citron Yellow Shimmer ECO SOLVENT Pantone 3D color printing Gumagamit ng pinakamataas na uri ng malinaw na vinyl material Gawa sa de-kalidad na vinyl. Tumutagal sa lahat ng uri ng panahon, Mataas ang Pamantayan sa Kalidad. Sa XIEHE MEDICAL, ang kaligtasan at tibay ay aming pangunahing isinusulong sa lahat ng aming ginagawang produkto, kabilang ang aming mga stretcher na may gulong. Gawa ito mula sa de-kalidad na materyales, at idinisenyo para sa mga emerhensiyang medikal. Dahil sa matibay nitong konstruksyon, masigla at ligtas na maililipat ang pasyente nang hindi nasusugatan. Dahil de-kalidad ang aming collapsible stretcher na may gulong, maaari kang umasa dito upang maisakatuparan ang mahahalagang gawain sa tamang panahon. Ang bawat segundo ay mahalaga sa mga medikal na emerhensiya, at dito napapasok ang foldable stretcher na may gulong ng XIEHE MEDICAL. Ang mga caster nito ay lubhang magaan at madaling mapapagana, na nagbibigay-daan sa anumang medic na madaling lumipat sa makitid na espasyo at sa gitna ng malalaking tao. Ang matibay na hawakan ay nagpapadali sa pag-angat at paggalaw ng stretcher upang mabilis at ligtas na mailipat ang pasyente. Kapag ang oras ay kritikal, mananatili kang umaasa sa wheel stretcher ng XIEHE MEDICAL upang mabilis na maisakatuparan ang gawain. Para sa mga opisina at klinika, mahirap sukatin ang espasyo para sa imbakan, kaya ang paghem ng espasyo ay isang napakalaking gawain; dahil dito, natuklasan ng XIEHE MEDICAL ang uri ng stretcher na pabahuhulugan na may malaking tulong—madaling dalhin at naglalaan ng karagdagang espasyo para sa iba. Ang disenyo nitong pabahuhulugan ay nagbibigay-daan upang maiimbak ito sa maliit na espasyo at madaling mailipat sa masikip na ospital. Nangangahulugan din ito ng disenyo na nakahemat ng espasyo, na nagbibigay sa mga ospital at serbisyong EMS ng kakayahang ma-maximize ang kanilang lugar para sa imbakan ng stretcher, na nag-iiwan ng mga stretcher na handa gamitin kapag dumating ang tawag. PANGANGALAGA AT IMBAKAN: Alam ng XIEHE MEDICAL na kailangan mo ng stretcher na madaling ma-access, kaya inilabas namin ang aming pabahuhulugan na stretcher na may gulong, na perpekto para sa anumang medikal na paligid. Ang Xiehe Medical Apparatus Instruments ay bahagi na ng mga estratehiya sa pagsasapaligang pangmerkado para sa foldable stretcher na may gulong. Mayroon kaming higit sa 30 na distributor sa higit sa 120 bansa, batay sa higit sa 10 taon ng pakikipagtulungan at suporta mula sa aming mga kasosyo. Nakatuon kami sa paglikha ng matatag na ugnayan sa mga integrator, gayundin sa mga distributor, upang tulungan ang isa't isa sa pagbuo ng kinabukasan. Bilang nangungunang tagagawa ng kagamitang pang-medikal, ang Xiehe Medical Apparatus Instruments ay nagbibigay ng mga de-kalidad na produkto at espesyalisadong serbisyo. Ang mga produkto nito ay sertipikado ng TUV, CE, at FDA. Sumusunod ito sa sistema ng quality control na ISO 13485. Kasama ang isang koponan ng dedikadong mga empleyado, kayang tumugon nang mabilis sa mga pangangailangan ng mga customer at magbigay ng matatag at maaasahang mga produkto at serbisyo. Kung kailangan mo ng isang ambulansyang foldable stretcher na may gulong, folding stretcher para sa hospital furniture, o mga gamit sa libing, ang Xiehe Medical Equipment ay kayang magbigay ng isang solusyon na kasiya-siya para sa mga customer. Ang Hehe Medical Equipment ay nagpapriyoridad sa kasiyahan ng customer at umaasam na tupdin ang mga kinakailangan ng mga customer nang may mataas na antas ng kahusayan at pagkamaaasahan. Ang dedikadong mga empleyado at ang pakikipagtulungan sa makabagong teknolohiya ay nagpapahintulot sa amin na magbigay ng malapit at foldable stretcher na may gulong para sa mga customer, na tiyak na natutugunan nang epektibo ang kanilang mga pangangailangan. Layunin naming itatag ang isang matagalang at matibay na samahan sa pakikipagtulungan kasama ang aming mga customer at magbigay sa kanila ng mga de-kalidad na produkto at serbisyo. Ang Xiehe Medical Apparatus Instruments ay nagpapakita ng pinakamataas na antas ng dedikasyon sa pag-unlad ng mga bagong produkto at sa pananaliksik at pagpapaunlad (R&D), na nag-aalok ng mga produkto na may kompetitibong mga punto ng benta. Mayroon itong maraming patent at proteksyon sa karapatang intelektuwal, tulad ng medikal na foldable stretcher na may gulong at mga produkto para sa unang tulong, kagaya ng kasangkapan sa ospital at mga produkto para sa libing. Ang mga produkto ay ginagawa upang sumabay sa mga modernong uso at tugunan ang mga pangangailangan ng mga customer, kaya naman mataas ang pagtingin sa kanila ng mga lokal at pandaigdigang customer.hugis puwesto na maaaring magkumpak na may mga basa
Mataas na Kalidad na Materyales para sa Pinakamataas na Tibay at Kaligtasan

Madaling Maniobra at Transportasyon para sa Mga Medikal na Emergency

Maginhawang Imbakan at Disenyo na Hem ng Espasyo para sa mga Hospital at EMS

Mapagkumpitensyang Presyo para sa Malalaking Order ng Natitiklop na Stretcher na May Gulong
Why choose XIEHE MEDICAL
hugis puwesto na maaaring magkumpak na may mga basa?
Global na network ng marketing at matatag na mga partner
Mataas na kalidad ng mga produkto at espesyal na mga serbisyo
Nakatuon sa Mga Kliyente na Bilis na serbisyo pagkatapos ng benta at suporta sa teknikal
Mapanuring R at D at Produkong Benta ng Points
Mga kaugnay na kategorya ng produkto
Hindi makahanap ng hinahanap?
Humiling ng Quote Ngayon
Makipag-ugnay sa aming mga konsultant para sa iba pang mga produkto.Makipag-ugnayan