. Tá sé déanta as...">
,需要通过父级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);
}
});
})();
Cur Síos ar an Táirge: Bileog Iomaireachta Fada do Leacacha Iomaireachta Déantar é as ábhar Aseki neartmhar agus éifeachtach. Cibé túsca sléibhe, cabhair i ndífhosta, ionsaí eitleánach nó túsca emergency, níl a fhios againn riamh nuair a tharlóidh cineál den scéal seo. XIEHE MEDICAL soláthraíonn sé sraith de leac iomaireachta le húsáid ag foirgnimh cuardaigh agus rescú, EMS, timpeallacht Emergency agus fhoirgnimh iompair speisialta agus beartúchán dífhosta. Ní hamháin go ndéantar iad le haghaidh faighteachais, KEMP soláthraíonn sreangaiméid freisin solúbthacht duit i gceannach éagsúla oithreacha. Éadomhach agus iniompaithe is é ceann de na gnéithe is tábhachtaí de XIEHE MEDICAL tréidlión gluaisteáin . D'fhógaradh na tréidliónna, dhá fhilleadh orthu, agus tá siad réidh le húsáid. Mar gheall ar a méid beag is féidir iad a stóráil go héasca nuair nach bhfuil i gceist, oiriúnach go beacht do eagraíochtaí bheaga le níos lú spás. Nuair a bhíonn sé ag teacht ar thitimíchthiúla éigeandála bíonn sláinte agus suaimhneas an othair ar dtús. Déanta de cháilíocht ard iad na tréidliónna gluaisteáin le XIEHE MEDICAL agus iad láidir agus taitneamhach don othar. Tá gach ábhar tógála bruite chun tacú le misinsí aisghabhála ó therrainn chorracha agus ó timpeallachtaí contúirteacha. Déan nó maraigh, déan é nó bris é, ní féidir am a chaitheamh le linn oithreach. Mar sin féin tá ár gcistiní ag teacht le haghaidh forbairt éasca agus éifeachtach. Tá dhá fhorghníomhú láidir ann agus córas coscrú slán a chinntíonn iompar othar den scoth agus go nglifir siad ón bpairc in am is giorra. Déanann na toisí simplí ar na cistiní iad a dhéanamh an-éasca chun iompar trí spásanna caite nó tréithi géar. An cistin bháis ó XIEHE MEDICAL An cistin chlasaiceach do aon fhógar Ó thosaigh a bhunfhorbhairt ag XIEHE MEDICAL , tá an leac iomaireachtáin tar éis mír thógála ríthábhachtach a bheith ann do fhoirgnimh cuardaigh agus rescú, seirbhísí tógála emergency, agus do úsáid i mbeartas freagairt ar dhífhosta. Tá na cainnte seo an-fhairsing agus neartmhar, agus iad oiriúnach do réimsí éagsúla emergency, ó thúsca cloich uisce tapa go dtí túsca sléibhte nó comhsanna. Le cáil ar cháilíocht agus ar fhidhlaise, tá na leaca tar éis sócmhar a bheith ann do dhaoine atá ag iarraidh saol a shábháil agus cúram chriticiúil a sholáthar i gcoinníollacha géarchéime nó dúshláin. Is ceannaire i ndaoine sa tionsclaíocht ina bhfuil Xiehe Medical Apparatus Instruments ag fabhrú le haghaidh tacar uirlisí sláinte ar ardchaighdeán. Tairgeann siad freisin seirbhísí sonracha. Tá siad i gceart ag leanúint le córas smachta caighdeáin ISO13485, agus tá gach táirge certaithe ag TUV, CE, FDA, srl. Le fhoireann dírithe ar streachairí spásala, is féidir leo freastal go tapa ar iarratais na gcustaiméirí agus soláthar táirgí agus seirbhísí a bheidh oiriúnach agus ina dhiaidh sin. Ní mhaith leat an streachair chun foldála, mórchathrach nó soláthair don bheanbhean, is féidir le Xiehe Medical Equipment soláthar réitigh shatisfactha do na custaiméirí. Uirlisí agus Uirlisí Leighis Xiehe: leibhéal is airde na dícheall ann chun táirgí nua a fhorbairt agus taighde agus forbaráin a dhéanamh, ag tairiscint táirgí a bhfuil pointí díolacháin comórtasacha acu. Tá líon mór patantanna agus cosaint oideachais intleachtúil acu, mar shampla an leaba leagtha le haghaidh tarrthála sa ghailearaí, táirgí chun cabhrú i dtorthaí éigeandála, mar shampla meubail ospidéil agus táirgí don bheanbhás. Tá na táirgí déanta chun leanúint leis na tréndanna nua-aimseartha agus chun freastal ar riachtanais na gcustaiméirí, agus tá siad in ard-inniú ag custaiméirí in Éirinn agus thar lear. Tugann Oiliúint Leighis Hehe tosaíocht do shásamh leis an leaba leagtha le haghaidh tarrthála sa ghailearaí agus déanann sí iarracht freastal ar riachtanais na gcustaiméirí le heagras agus le hiompar. Is féidir linn seirbhís pearsanta agus freagartha a thairiscint do ár gcustaiméirí mar gheall ar dícheall ár n-oibrithe, agus ar an teicneolaíocht chomhghabhála a úsáidimid. Is é ár sprioc ná ceangal fadtéarmach, daingean agus leasa ilchuidiúil a bhunú le ár gcustaiméirí, agus cuireann muid táirgí agus seirbhísí ar ardchaighdeán orthu. Tá Xiehe Medical Apparatus Instruments dírithe ar straitéis mhargú mara a bheith go hiomlán. Tá níos mó ná 30 dáileoir ag oibriú i níos mó ná 120 tír tar éis níos mó ná 10 bliain tacaíochta ó ár gcomhpháirtithe. Táimid ag iarraidh caidreamh fadtéarmach a bhunú le dáileoirí agus le hionchurthóirí chun an t-éadach bailiúcháin agus an leaba tarrthála a chur chun cinn le chéile sa todhchaí.Streachra scileadh scoilte
Áisiúil le Iompar agus le Stóráil - Dearadh Dian Caol le haghaidh Taistil Áisiúil agus Iompair i do Mhála Ríomhaire Poist.

Máinléir: Ar Ardchaighdeán Aimsíonn Sláinte agus Sóinseáil an Ochtair

Le haghaidh Glanúcháin Tapaidh agus Rathúlaí i gcás Éigeandála

Foirne Foirne S&R, Soláthraithe EMS & Foirne Freagairt Éigeandáil
Why choose XIEHE MEDICAL
Streachra scileadh scoilte?
Pródúictí uasleibhéal agus seirbhísí speisialta
Nuaálainn R agus D agus Pointe Sprioc Pródúict
Custaiméir-Ceartaithe Téarmaíocht faoi-mhéid mhárcháid agus tacú teicniúil
Fógairt márkéadachta domhanda agus comhpháirtithe stailte
An bhfuil tú ag iarraidh rud éigin nach bhfuil ann?
Iarratas Praghsála Anois
Déan teagmháil le ár n-eagarthóirí le haghaidh táirgí breise ar fáil.Teagmháil