đáng tin cậy có thể tạo nên sự khác biệt hoàn toàn...">
,需要通过父级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)) {
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;
var fatherDom = trimText(node.parentNode.innerHTML || '');
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
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);
}
});
})();
Trong trường hợp khẩn cấp về y tế, một xe cấp cứu đáng tin cậy XH-7 Tay cầm gấp bằng hợp kim nhôm Xe đẩy nhà thờ có thể tạo nên sự khác biệt lớn khi nói đến việc cứu sống con người. XIEHE MEDICAL hiểu rằng một xe cấp cứu phải sẵn sàng với tất cả các công cụ cần thiết để đáp ứng các yêu cầu của cơ sở. Xe cấp cứu y tế phù hợp nhất cho cơ sở của bạn sẽ phụ thuộc vào kích thước, không gian lưu trữ, tính di động cùng các yếu tố khác. Điều cần thiết nữa ở một xe cấp cứu y tế đáng tin cậy là cấu tạo bền chắc và các ngăn được sắp xếp khoa học để dễ dàng tiếp cận, giúp lấy nhanh thuốc và vật tư. Việc chú ý đến những thành phần quan trọng này sẽ giúp các nhân viên lâm sàng sẵn sàng đối phó với tình huống khẩn cấp và cung cấp chăm sóc bệnh nhân tối ưu. Khi chọn xe đẩy cấp cứu y tế cho cơ sở của bạn, điều quan trọng là tìm được sản phẩm phù hợp nhất với môi trường chăm sóc sức khỏe. Một trong những yếu tố đầu tiên cần xem xét là kích cỡ, vì bạn cần một chiếc xe có thể chứa được mọi thứ nhưng vẫn di chuyển dễ dàng vào những không gian chật hẹp. Tiếp theo là khả năng lưu trữ – để xe có thể đựng tất cả các loại thuốc, thiết bị và các vật dụng cấp cứu mà bạn có thể cần. Tính di động cũng là một yếu tố quan trọng, vì xe cần phải dễ di chuyển trong trường hợp khẩn cấp xảy ra ở bất kỳ đâu trong cơ sở. Các yếu tố khác cần xem xét khi chọn xe cấp cứu bao gồm kích thước, dung lượng lưu trữ và khả năng di chuyển; các tổ chức chăm sóc sức khỏe cũng phải cân nhắc độ bền và cấu tạo của xe. Một xe cấp cứu thuốc đáng tin cậy sẽ được làm từ vật liệu y tế chất lượng cao, có thể đáp ứng được nhu cầu sử dụng hàng ngày trong trung tâm chăm sóc khẩn cấp đông đúc. Cấu trúc chắc chắn rất quan trọng để xe có thể chịu được trọng lượng của thuốc và vật tư mà không bị cong hoặc gãy. Khả năng tiếp cận nhanh cũng rất cần thiết đối với xe cấp cứu, vì thuốc và vật tư phải luôn sẵn sàng cho nhân viên y tế khi cần trong các tình huống khẩn cấp. Các khe nhỏ và ngăn kéo riêng biệt giúp bạn sắp xếp mọi thứ gọn gàng, ngăn nắp, tạm biệt bề mặt lộn xộn. Ngoài kích thước, khả năng lưu trữ, tính di động, độ bền, chất lượng xây dựng và khả năng tiếp cận, còn có một số điểm quan trọng khác mà các chuyên gia y tế cần cân nhắc trước khi mua một trong những xe cấp cứu thuốc men này… Một hệ thống khóa an toàn là một trong những tính năng nhằm đảm bảo thuốc và vật tư được bảo vệ khỏi việc sử dụng trái phép. Và đây không chỉ đơn thuần là vấn đề giữ an toàn cho bệnh nhân; mà còn là việc bảo vệ nhân viên y tế khỏi trách nhiệm pháp lý trong trường hợp xảy ra sự cố. Những khía cạnh quan trọng khác bao gồm khả năng kết nối với các hệ thống điện tử (ví dụ: máy quét mã vạch, hệ thống phân phát/đóng gói thuốc tự động bằng máy tính), từ đó đạt được độ chính xác cao hơn và thuận tiện hơn trong quản lý thuốc. Ngoài ra, một xe cấp cứu y tế tốt nên được trang bị tính năng quản lý chất thải tích hợp để xử lý đúng cách các ống tiêm đã sử dụng, kim tiêm và các vật dụng y tế khác. Điều này rất quan trọng để duy trì môi trường sạch sẽ và vô trùng tại phòng khám/nhà dưỡng lão/bệnh viện và ngăn ngừa lây lan bệnh tật. Hơn nữa, các xe cấp cứu có nguồn điện tích hợp có thể cung cấp năng lượng cho các thiết bị y tế thiết yếu (ví dụ: máy khử rung, bơm truyền dịch) ngay cả trong tình huống khẩn cấp thông qua nguồn điện tích hợp như pin sạc lại hoặc kết nối trực tiếp với ổ cắm trên tường. Với những yếu tố chính trong thiết kế xe cấp cứu y tế này, các bác sĩ và cơ sở y tế khác có thể lựa chọn một chiếc xe phù hợp nhất với nhu cầu tiếp cận và sử dụng nhanh chóng các vật tư cấp cứu khi cần thiết. Các xe đẩy cấp cứu thuốc của XIEHE MEDICAL được thiết kế để bền bỉ, đáng tin cậy và đơn giản trong các tình huống khẩn cấp cho bệnh nhân. Các xe đẩy tiện ích của chúng tôi được làm từ chất liệu kim loại cao cấp có thể chịu được nhu cầu sử dụng tại các cơ sở y tế đông đúc. Chúng được trang bị bánh xe di chuyển trơn tru giúp di chuyển dễ dàng và có không gian lưu trữ dồi dào để chứa toàn bộ thiết bị y tế cần thiết. Bạn cũng có thể thêm hoặc bớt các thành phần trên xe đẩy cấp cứu, nhờ đó bạn có thể tùy chỉnh theo nhu cầu sử dụng. “Xe đẩy cấp cứu thuốc của XIEHE MEDICAL sẽ tạo niềm tin chắc chắn rằng khách hàng đang đầu tư vào một sản phẩm có khả năng hỗ trợ họ cung cấp dịch vụ chăm sóc một cách hiệu quả và kịp thời khi khối lượng bệnh nhân quá tải.” Các cơ sở y tế đang cân nhắc mua xe cấp cứu thuốc men với số lượng lớn có thể hoàn toàn tin tưởng vào XIEHE MEDICAL cho mọi nhu cầu của họ! Xe cấp cứu chất lượng cao của chúng tôi có giá cạnh tranh – bạn có thể dễ dàng dự trữ cho cơ sở của mình để tiết kiệm thời gian và chi phí. Khi mua hàng số lượng lớn từ XIEHE MEDICAL, các cơ sở y tế đảm bảo luôn có sẵn những xe cấp cứu cần thiết cho môi trường làm việc bận rộn. Đội ngũ chăm sóc khách hàng thân thiện của chúng tôi cũng luôn sẵn sàng hỗ trợ trả lời mọi câu hỏi hoặc giải đáp bất kỳ lo ngại nào về đơn hàng số lượng lớn và giúp việc đặt hàng trở nên dễ dàng nhất có thể. Các thiết bị và dụng cụ y tế Xiehe chuyên về tiếp thị và bán hàng toàn cầu. Trong 10 năm qua, nhờ sự nỗ lực không ngừng và sự hỗ trợ của các đối tác, hiện nay công ty đã có hơn 30 nhà phân phối trên toàn thế giới, đồng thời sản phẩm được phân phối tới hơn 120 quốc gia. Chúng tôi tập trung vào các xe đẩy cấp cứu y tế (crash cart) và xây dựng các mối quan hệ hợp tác lâu dài với các nhà phân phối cũng như các nhà tích hợp hệ thống, cùng nhau thiết kế và kiến tạo tương lai. Là nhà sản xuất hàng đầu về thiết bị y tế, Xiehe Medical cung cấp các sản phẩm xe đẩy thuốc khẩn cấp (crash cart) và dụng cụ y khoa chất lượng cao cùng các dịch vụ chuyên biệt. Chúng tôi tuân thủ nghiêm ngặt hệ thống kiểm soát chất lượng ISO 13485; toàn bộ sản phẩm đều được chứng nhận bởi TUV, CE, FDA, v.v. Đội ngũ chuyên nghiệp của chúng tôi luôn sẵn sàng phản hồi nhanh chóng các yêu cầu của khách hàng và cung cấp những sản phẩm ổn định, đáng tin cậy. Dù là cáng gấp, đồ nội thất bệnh viện hay vật tư tang lễ, Xiehe Medical Equipment đều có thể mang đến cho khách hàng những giải pháp hài lòng. Xiehe Medical Apparatus & Instruments liên tục tham gia vào nghiên cứu và phát triển (R&D) tiên tiến nhất, đồng thời cam kết tạo ra các điểm bán hàng cạnh tranh cho sản phẩm. Các bằng sáng chế và quyền sở hữu trí tuệ được bảo hộ đối với các loại cáng y tế, thiết bị sơ cứu, đồ nội thất bệnh viện cũng như các sản phẩm xe đẩy thuốc khẩn cấp (crash cart). Sản phẩm của chúng tôi được thiết kế nhằm đáp ứng nhu cầu thực tế của khách hàng và phù hợp với xu hướng hiện đại. Những sản phẩm này được cả khách hàng trong nước và quốc tế đánh giá cao. Tại Thiết bị Y tế Hehe, chúng tôi coi trọng sự hài lòng của khách hàng và nỗ lực đáp ứng nhu cầu về xe đẩy cấp cứu y tế một cách xuất sắc và đáng tin cậy. Chúng tôi có thể cung cấp cho khách hàng dịch vụ cá nhân hóa và đáng tin cậy nhờ sự cam kết của đội ngũ nhân viên cũng như việc ứng dụng công nghệ hợp tác hiện đại. Mục tiêu của chúng tôi là thiết lập mối quan hệ lâu dài, ổn định và cùng có lợi với khách hàng, đồng thời cung cấp cho họ những sản phẩm và dịch vụ chất lượng cao nhất.xe đẩy thuốc cấp cứu
Cách chọn xe đẩy cấp cứu thuốc tốt nhất cho cơ sở của bạn

Các tính năng thiết yếu của một xe đẩy cấp cứu thuốc đáng tin cậy

Điều gì làm cho xe đẩy cấp cứu thuốc của chúng tôi khác biệt so với đối thủ cạnh tranh

mua xe đẩy cấp cứu thuốc số lượng lớn ở đâu
Why choose XIEHE MEDICAL
xe đẩy thuốc cấp cứu?
Mạng lưới tiếp thị toàn cầu và đối tác ổn định
Sản phẩm chất lượng cao và dịch vụ chuyên nghiệp
Sáng kiến nghiên cứu và phát triển cùng những điểm bán hàng sản phẩm nổi bật
Đặt khách hàng làm trung tâm Dịch vụ sau bán hàng và hỗ trợ kỹ thuật nhanh chóng
Không tìm thấy sản phẩm bạn cần?
Yêu cầu Báo giá Ngay
Liên hệ với các chuyên viên tư vấn của chúng tôi để biết thêm các sản phẩm có sẵn.Liên hệ với chúng tôi