для вашей медицинской организации...">
,需要通过父级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 уже сейчас! У нас есть большой выбор контейнеры для острых отходов чтобы соответствовать широкому спектру требований фармацевтических компаний, клиник, медицинских работников и спасателей. Наши экологичные контейнеры для острых отходов герметичны, что гарантирует безопасный сбор и экологически чистую утилизацию. Поэтому, независимо от того, нужны ли вам небольшие одиночные контейнеры или требуется поставка контейнеров в больших объемах для оптовых нужд, мы предлагаем различные размеры по исключительно выгодным ценам. Ознакомьтесь с нашими передовыми контейнер для острых предметов конструкциями с простыми в использовании функциями, разработанными для удовлетворения всех ваших потребностей. Это обязательно от XIEHE MEDICAL В XIEHE MEDICAL мы понимаем необходимость правильной утилизации отходов в больницах и медицинских центрах. Именно поэтому мы производим высококачественные контейнеров для острых отходов которые соответствуют высоким стандартам медицинской отрасли. Наши контейнеры прочные, могут использоваться без помощи тележки для перевозки контейнеров и являются надежным решением для утилизации острых отходов. Они разработаны для совершенствования управления отходами, защиты пациентов и персонала, а также минимизации воздействия на окружающую среду. Фармацевтическим дистрибьюторам и лечебным учреждениям необходим безопасный и надежный способ соблюдения законов по утилизации острых предметов и защиты своих клиентов и сотрудников. В ассортименте XIEHE MEDICAL также имеется широкий выбор контейнеров для острых отходов для этих отраслей в соответствии с конкретными требованиями. Независимо от того, нужны ли вам небольшие переносные контейнеры для клиники или аптеки, или большие контейнеры большой емкости для фармацевтической фабрики, у нас есть контейнеры, отвечающие вашим потребностям. Положитесь на XIEHE MEDICAL в обеспечении безопасных и эффективных решений для утилизации острых отходов, разработанных с учетом ваших особых требований. Для покупателей, заботящихся об окружающей среде, XIEHE MEDICAL предлагает экологически чистые контейнер для острых предметов с функцией защиты от утечек. Наши контейнеры изготавливаются с учетом охраны окружающей среды из экологически чистых переработанных материалов. Ваше безопасное контейнер для острых предметов решение: с герметичными уплотнениями, предотвращающими любые проливы, и надежно закрывающимися крышками, контейнеры XIEHE MEDICAL для острых отходов предназначены для безопасного удержания опасных острых отходов. Выберите наши экологически чистые контейнеры для острых отходов в целях экологически чистого подхода к утилизации острых отходов, отражающего ваши экологические стандарты. Ищете купить контейнеры для острых отходов оптом? XIEHE MEDICAL вас обеспечит! Дешевая выгодная покупка крупной партии контейнеры для острых отходов Ищете оптовую партию контейнеры для острых отходов по сниженным ценам? проект. Независимо от того, требуются ли вам сотни или тысячи контейнеры для острых отходов , мы можем предложить вам конкурентоспособные цены, соответствующие вашему бюджету и потребностям в поставках. Доверьтесь Value Pack OHIEHE MEDICAL для ваших оптовых контейнеры для острых отходов , и экономьте на качестве! Прочные, функциональные контейнеров для острых отходов , которые соответствуют или превышают отраслевые стандарты в области здравоохранения… Контейнер IncrementalLite Sharps для размещения на столешнице Инновационные утилизация острых предметов решения для безопасности пациентов и медицинских работников, профилактики уколов иглами и соблюдения правил безопасной утилизации острых отходов. Xiehe Medical Apparatus Instruments — компания, специализирующаяся на глобальном маркетинге и продажах. За последние 10 лет при поддержке наших партнёров мы вышли на рынок более чем в 30 странах мира, где у нас сегодня действует свыше 30 дистрибьюторов. Наши продукты поставляются более чем в 120 стран. Мы сосредоточены на сборе острых предметов (sharps bin) и выстраиваем долгосрочные партнёрские отношения с дистрибьюторами и интеграторами, чтобы вместе проектировать и создавать будущее. Xiehe Medical Apparatus Instruments — производитель высококачественного медицинского оборудования. Также предоставляет специальные услуги. Строго соблюдает систему контроля качества ISO13485, и вся продукция сертифицирована TUV, CE, FDA и многими другими. Благодаря команде преданных сотрудников, занимающихся сбором отходов в контейнеры для острых предметов, мы можем быстро удовлетворять потребности клиентов, обеспечивая надежность и безопасность продукции и услуг. Независимо от того, нужна ли вам носилки для скорой помощи, складные носилки, мебель для больниц или похоронные принадлежности, Xiehe Medical Equipment имеет решение. Компания Hehe Medical Equipment ставит удовлетворённость клиентов в приоритет и стремится отвечать их потребностям, обеспечивая высокое качество и надёжность. Благодаря энтузиазму персонала и применяемым совместным технологиям мы способны предложить клиентам персонализированный и надёжный сервис. Наша цель — выстроить с клиентами долгосрочное, стабильное и взаимовыгодное партнёрство, а также предоставлять им продукцию и услуги высочайшего качества. Компания Xiehe Medical Apparatus & Instruments постоянно занимается творческими научно-исследовательскими и опытно-конструкторскими разработками и посвятила себя созданию продукции с конкурентными торговыми преимуществами. Патенты и объекты интеллектуальной собственности охватывают носилки, контейнеры для острых предметов (sharps bin), изделия первой помощи, мебель для больниц и продукцию для ритуальных услуг. Продукция разработана с учётом современных тенденций и направлена на удовлетворение потребностей наших клиентов. Её высоко ценят как отечественные, так и зарубежные заказчики.коллекция контейнеров для острых отходов
Разнообразная подборка контейнеров для острых отходов для фармацевтических компаний и клиник, ищущих решения для безопасной утилизации

Экологически чистые контейнеры для острых отходов с защитой от протечек для покупателей, заботящихся об окружающей среде

Экономичные контейнеры для острых отходов в больших объемах для оптовой закупки

Инновационные контейнеры для острых отходов с удобными функциями для медицинских работников и спасателей
Why choose XIEHE MEDICAL
коллекция контейнеров для острых отходов?
Глобальная маркетинговая сеть и стабильные партнеры
Высококачественная продукция и специализированные услуги
Ориентированный на клиента быстрый послепродажный сервис и техническая поддержка
Инновационные исследования и разработки и преимущества продукции
Сопутствующие товарные категории
Не можете найти то, что ищете?
Запросить предложение сейчас
Свяжитесь с нашими консультантами для получения дополнительных товаров.Свяжитесь с нами