eskaintzen dizu. Gure produktuek... ">
,需要通过父级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);
}
});
})();
XIEHE MEDICAL-ek kalitate handikoak eskaintzen dizkizu eskuarketa bultzagailua . Gure produktuek ezaugarri modernoak dituzte eta edozein egoera kritikoetan erabilgarritasuna, errendimendua eta fidagarritasuna eskaintzen dituzten material kalitate handiz egina da. Irtete-hamak gureak aukera senda eta fidagarria dira zuretzat, ospitale bat izan behar duzu, erreakzio azkarreko taldea edo hornidura medikoa banatzen duen enpresa. Irtete-hamak garatu egin dira berrikuntzarako. Horrek, altueran doikuntza egiteko ahalmenarekin eta biltegiratzeko xurgagailu moduan tolesten den egiturarekin batera, erabilera anitzeko estalki hau eskaintzen du merkatuan. Gure entzikloa -ren eraikuntza sendoa errendimendu fidagarria eskaintzen du, EGOS inguruneetan eguneroko erabileraren eskakizunak jasateko prestatuta dagoela. Gainera, gure askapen gradualeko oihalak blokeo-segurtasun mekanismoekin eta beteta daude pazientearen transferentzia areago lasaiagoa izan dadin. Gure oihalak ondo diseinatuta daude erruletak erraz biratzen dituzten eta argitasuna duten ezaugarri aurreratuekin, hainbat espazio mugatuan edo egoera larrialdietan erraz mugitzeko. Horrez gain, gure evakuazio oihalak eredu eta tamaina desberdinetan daude, aplikazio guztietarako egokia dena izatea bermatzeko. Behar duzun estandarra den edo gehiago aurreratua den, XIEHE MEDICAL-ek horietako guztiak ditu. Kalitatearekiko eta bezeroaren konfiantzarekiko dedikazioak zure erosketari laguntzen dio produktu eraginkorra delako. XIEHE MEDICAL Iraupidea Oihalak XIEHE MEDICAL-en iraupideak ambulantzia-hedapenak erosteko aukera onenetariko bat dira, amaitasun eta eraikuntza kalitate handia, diseinu berria eta material sendoaz egina duelako. Kontatu gure markarekin zure instalazio medikorako edo erantzun taldearentzat iraupide kalitate handiko aukerak ekartzeko. Hainbat gauza kontuan hartu behar dira ihesaldi oihal bat erostean. Oihalaren pisu-muga kontuan hartzeko garrantzitsuena da. Ziurtatu ihes egiten ari den pertsonaren pisua eta eramateko beharrezkoa den bestelako ekipamendu gehigarria ere arintzeko gai den oihal bat aukeratzen duzula. Gainera, oihalaren tamaina eta dimentsioak ere kontuan hartu beharreko faktoreak dira. Espazio estuetan mugitzeko nahikoa txikia izan behar du, baina maila-aldaketak eta salbatu beharreko pertsonak okupatzeko leku nahikoa izan behar du, ez sentitzeko zapaldua. Horrez gain, materiala eta iraunkortasun handia oso garrantzitsuak dira. Bilatu bizitza azkarrean izan daitekeen jazarpenari aurre egiteko gai diren material sendoekin eraikitako oihal bat. Azkenik, pentsatu nola erabiltzen den oihala eta non gorde. Aukeratu diseinu bat laster ateratzeko eta zabaltzeko, erraztasunez erabili ahal izateko larrialdietan. Kalitate handiko ihesaldi oihalen bilduma osatu bat eskaintzen du oihalak merkatuan eskuragarri, XIEHE MEDICAL-ek EMTentzat eta ospitaleko langileen artean erabilerraza eta onena da! Gure eredu ezagunenetariko bat, aluminiozko marko sendoarekin eta niloizko material indartsuaz egindako ukipenak dituen tolesgarri den istiriketa da, biak bultzatuz eta egonkortasuna bultzatuz. Istiriketa hau arina, trinkoa eta erabileraren artean eramatea erraza da. Gure beste istiriketa erregulagarrira ere fidatzen dira, erabilera kasuaren arabera pertsonalizatu daitezkeen aukerak ematen dituena. Hanken eta buruko atzeko atal erregulagarriak eta pazientearen segurtasun-uhintxak barne hartzen ditu, garraiatzerakoan finkatzeko. Istiriketa horiek biak pazienteak oihalak bizkarreko istiriketek zorioneko eta seguruagoa izatea bermatzeko diseinatuta daude larrialdietan erabiltzeko. Hehe Medical Equipment-ek bezeroen asarpena lehenetsi eta erreskate-oholen kalitate, eginkizun eta fidagarritasun handia lortzea helburu du. Gure langile pasionalak eta teknologia lankidetzaileak ahalbidetzen digu bezeroei hurbil eta arduratsua den zerbitzua ematea, beraien beharrak ongi betetzeko. Helburu gisa dugu bezeroekin harreman luze-terminoko eta egonkorra ezartzea, eta talde-lanaren eta euskarri teknikoaren bidez produktu eta zerbitzu kalitate handikoak eskaintzea. Xiehe Medical, medikuntzako tresneriaren buru den ekoizle gisa, erabilera-erabilgarriak diren erreskate-oholkorren tresneria eta beste zerbitzu espezializatuak eskaintzen ditu. ISO13485 kalitate-kontrol-sistema zorrotzki aplikatzen dugu, eta produktu guztiak TÜV, CE, FDA, etab. erakundeek ziurtatuta daude. Bezeroen beharrei azkar erantzuteko gai den talde dedikatu batek produktu egonkor eta fidagarriak hornitzen ditu. Oholkor foldagarriak izan, ospitaleko mobiliak edo hilobi-hornidurak, Xiehe Medikuntzako Tresneriak bezeroei konponbide egokiak eskaintzen ditu. Xiehe Medical Apparatus Instruments globalizazio estrategian arduraduna izan da evakuazio arkuen bultzaketan eta eskualdean. bai banaketa kanpoko 120 herrialde desberdinetan banatutako 30 banaketa punturen gainean joan dira, etorkizunean laguntzaileak emandako hamar urte baino gehiagotan. helburu nagusia zortzikuntza sistemak eta banaketa puntuekin harreman luzeak sortzea da, etorkizunean lagundu eta lotura berriak sortzeko. Xiehe Medical Apparatus Instruments enpresea ikerketa-garapen aurreratuan (R&D) jarraitzen du, eta lehiakorrak diren produktuen salmenta-puntuak eskaintzea helburu du. Oholkor medikoak, lehen laguntzako artikuluak, ospitaleko mobiliak eta erreskate-oholkorren produktuak bezalako produktuen patentak eta jabetza intelektuala babestuta daude. Gure produktuak bezeroen beharrei erantzuteko diseinatuta daude eta uneko joerak jarraitzen dituzte. Produktu hauek nazioarteko eta nazionalen artean ongi hartuak izan dira.eskuarketa bultzagailua
Evakuazio-olarra kalitate handikoa saltzea erosteko

Diseinu berria eta material iraunkorrak egiten dute gure evakuazio-olarrak bereizten

Evakuazio-olarra erosten duzunean kontuan hartu beharreko arazo ohikoenak

Egunerako merkatuko evakuazio-olarririk baloratuak
Why choose XIEHE MEDICAL
eskuarketa bultzagailua?
Bezero-zentratua Bilaketa-ontzi arina eta teknikoa onartze laguntza
Altokoberako produktuak eta zerbitzu espzializatuak
Marketing globalko sare eta baliabide estabilak
Inovazioaren I+D eta Produktuak Seme-harrien Puntuak
Zer bilatzen zaude ez duzula aurkitzen?
Eskaeratu Quote Orain
Kontaktatu konzultantek gainerako eskuragarriagoak diren produktu gehiagorako.Jarri Harremanetan