từ CDPH là một sản phẩm độc đáo...">
,需要通过父级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);
}
});
})();
Khung Kit Bạn có nghe nói về X Frame Kit House chưa? Những cái này đang trở nên nổi tiếng ngày nay! A bộ kit nhà hình chữ a từ CDPH là một ngôi nhà độc đáo, nơi tất cả các bộ phận đều đã được cắt và chuẩn bị sẵn để lắp ráp một cách đơn giản, giống như bạn đang giải một câu đố thú vị. Chỉ cần nghĩ rằng, việc xây dựng một thứ gì đó mà tất cả các phần không cần phải khắc lại hoặc chỉnh sửa hay làm lại! Điều này được thực hiện để cung cấp tất cả các tính năng trong một ngôi nhà nhanh và đơn giản nhất có thể, thay vì xây dựng từ con số không nơi bạn phải tự mình cắt bất kỳ thứ gì. Việc xây dựng ngôi nhà riêng của bạn là một ý tưởng vừa thú vị vừa lãng mạn - có một nơi tuyệt vời để trở về sẽ tăng thêm sự an toàn trong cuộc sống. Một ngôi nhà bộ khung hình chữ A từ CDPH cho phép bạn chọn lựa phong cách và thiết kế phù hợp với bạn và có thể được điều chỉnh theo yêu cầu của bạn. Bạn có thể chọn kích thước ngôi nhà, màu sắc tường và thậm chí là số lượng phòng mà bạn muốn. Hãy nghĩ đến việc chọn màu sắc và hình dạng yêu thích của bạn để thiết kế một không gian thoải mái chỉ dành riêng cho bạn! Việc tự lắp đặt một ngôi nhà bộ khung cũng rất hợp lý vì bạn sẽ không phải trả chi phí nhân công, tiết kiệm được nhiều tiền. Bạn có thể đầu tư vào những ngôi nhà bộ khung giá rẻ, đây là lựa chọn tốt nhất về mặt tiền bạc và dịch vụ. Điều này làm cho bộ khung nhà hình chữ A từ CDPH là một cách tốt cho bạn để tiết kiệm tiền và có tiềm năng sở hữu thứ gì đó có giá trị hơn trong tương lai. Chúng được xây dựng nhanh chóng và có thể lắp ráp khá thuận tiện - điều này chỉ có nghĩa là bạn có thể bắt đầu sống trong ngôi nhà mới của mình sớm hơn. Không ai thích chờ đợi ngôi nhà mới để chuyển vào. Ngoài ra, nếu bạn muốn bán ngôi nhà khung kit của mình trong tương lai, nó có thể có giá bán lại cao. Điều này cho thấy bạn có tiềm năng tạo ra doanh thu đáng kể khi bán lại. Ôi, bây giờ đó là một mức giá tuyệt vời! Không chỉ nhà khung kit rẻ tiền và dễ xây dựng; chúng còn thân thiện với môi trường, tạo ra ít rác thải hơn cho hành tinh của chúng ta. Hầu hết các công ty sản xuất nhà khung kit đều tạo ra các yếu tố thân thiện với môi trường và tiết kiệm năng lượng. Điều này có nghĩa là sống trong nhà khung kit có thể tiết kiệm tiền cho hóa đơn năng lượng của bạn và giúp giảm dấu chân carbon của bạn. Việc giảm dấu chân carbon cho thấy bạn đang đóng góp một phần giúp bảo vệ môi trường, do sử dụng ít năng lượng hơn và tạo ra ít chất thải hơn. Các bộ khung nhà cũng rất tiện lợi vì chúng được cung cấp như một gói lớn với mọi thứ bạn cần để xây dựng ngôi nhà của mình. Bạn sẽ không phải mất thời gian chạy đi chạy lại để tìm các bộ phận khác nhau! Việc lắp ráp một ngôi nhà dạng khung kit rất dễ dàng và đơn giản. Đầu tiên là thiết kế tùy chỉnh ngôi nhà của bạn và đưa vào bất kỳ thay đổi hoặc phụ kiện nào mà bạn thấy phù hợp. Đây là điều tôi yêu thích về phần này, bạn có thể điều chỉnh nó theo cách tốt nhất cho bạn! Sau đó, công ty khung kit sẽ gửi tất cả các bộ phận đó đến địa điểm công trình của bạn. Như vậy, tất cả các bộ phận bạn cần sẽ xuất hiện đúng nơi diễn ra xây dựng. Các mảnh đã được cắt sẵn sau đó được lắp ráp lại như một câu đố, bởi chính bạn hoặc nhà thầu của bạn. Nó giống như đang chơi với một câu đố siêu lớn và phức tạp! Một trong số đó là hệ thống đường ống nước cũng như điện và cách nhiệt mà mỗi ngôi nhà cần phải có khi bạn đã dựng xong khung. Bước cuối cùng là sơn, sàn nhà và tủ. Đã đến lúc cho ngôi nhà của bạn những ngôi nhà dạng khung kit trông giống như một ngôi nhà! Ngôi nhà Apple, hình dáng độc đáo, ngoại thất đẹp mắt, giúp không gian sống của bạn trở nên cá nhân hóa hơn. Từ phong cách hiện đại, tối giản đến cổ điển, chúng tôi cung cấp đa dạng kiểu dáng và màu sắc phù hợp với gu thẩm mỹ của bạn. Bắc Kinh Chengdong tập trung vào nhu cầu người dùng và có thể tùy chỉnh để đáp ứng các yêu cầu cụ thể của bạn. Dựa trên sở thích và nhu cầu riêng, bạn có thể điều chỉnh phong cách ngôi nhà, bố cục, hệ thống cấp thoát nước, điện… nhằm xây dựng một tổ ấm hoàn hảo, mang dấu ấn riêng biệt của bạn. Việc lắp đặt sẵn đường ống điện và nước trong quá trình sản xuất giúp loại bỏ công đoạn thi công phức tạp sau khi nhà đã hoàn thiện — đặc biệt đối với các ngôi nhà khung chữ A (A-frame kit houses), từ đó nâng cao hiệu quả và chất lượng hoàn thiện nội thất. Bạn có thể lựa chọn từ nhiều giải pháp thiết kế nội thất đa dạng cho phòng khách, phòng ăn, phòng ngủ, phòng tắm, nhà bếp và nhiều không gian khác. Ngôi nhà Apple – Chất lượng sống tuyệt vời nhất! Khám phá nét quyến rũ độc đáo của Ngôi nhà Apple! Bộ khung nhà giúp bạn có một không gian sống an toàn và thoải mái hơn! Các thành phần kết cấu đều được sản xuất sẵn tại nhà máy. Khi bạn lựa chọn kích thước, cấu hình và phong cách phù hợp, bạn có thể nhanh chóng xây dựng ngôi nhà của mình. Dựa trên nhu cầu và sở thích của khách hàng, các mô-đun khác nhau có thể được kết hợp để tạo ra các bố trí phòng đa dạng như bếp, khu sinh hoạt chung và phòng ngủ. Yếu tố quan trọng nhất là nhà container chúng tôi sử dụng dễ tháo lắp, kết cấu ổn định, hiệu suất vượt trội về khả năng chống thấm nước, chống ẩm, chống cháy; đồng thời quy trình lắp ráp đơn giản, dễ vận hành và không yêu cầu bất kỳ chuyên môn kỹ thuật nào. Đối với nhu cầu ở riêng, văn phòng tạm thời, lưu trữ hoặc các mục đích khác, nhà container tiền chế được thiết kế linh hoạt nhằm đáp ứng mọi nhu cầu của bạn. Hãy sở hữu ngay một phòng container hôm nay để tận hưởng chi phí thấp hơn và dịch vụ chuyên nghiệp, chu đáo hơn — nâng tầm trải nghiệm sống của bạn! Ngôi nhà gập theo thiết kế khung chữ A, bao gồm các bộ phận lắp ghép có thể bố trí linh hoạt theo yêu cầu của bạn nhằm tăng năng suất sản xuất và làm cho không gian sống của bạn trở nên an toàn, vững chãi và đáng tin cậy hơn. Phòng có thể được bố trí sao cho đáp ứng đa dạng nhu cầu sử dụng, nghĩa là bạn luôn cảm thấy thoải mái ở bất kỳ đâu và bất kỳ lúc nào. Giao hàng nhanh! Vận chuyển và đóng gói cực kỳ nhanh chóng. Chúng tôi sử dụng đội ngũ đóng gói chuyên nghiệp, thực hiện theo đúng yêu cầu kỹ thuật của bạn để đảm bảo phòng gập được đóng gói một cách chuẩn xác nhất, giúp bạn nhận được sản phẩm chất lượng cao nhất. Chúng tôi giám sát chặt chẽ toàn bộ quy trình giao hàng nhằm đảm bảo sản phẩm của bạn đến đích một cách an toàn. Quan trọng nhất, phòng gập rất dễ lắp đặt mà không cần hàn tại hiện trường, đồng thời chúng tôi cung cấp hướng dẫn lắp đặt chi tiết để giúp quá trình lắp đặt ngôi nhà gập của bạn diễn ra nhanh chóng và thuận tiện hơn. Nếu bạn tuân thủ đúng các hướng dẫn, việc dựng nhà gập sẽ trở nên vô cùng đơn giản. Ngôi nhà tiền chế áp dụng thiết kế đặc biệt nhằm tăng cường độ bền kết cấu và có khả năng chịu động đất tốt để đảm bảo an toàn. Thiết kế mô-đun dễ di chuyển, việc lắp đặt có thể được điều chỉnh linh hoạt theo sở thích cá nhân của bạn về các kiểu dáng, phong cách và loại phòng khác nhau. Toàn bộ các thành phần đều được sản xuất sẵn và dễ dàng lắp đặt tại hiện trường mà không yêu cầu kỹ năng chuyên biệt nào. Dù được sử dụng làm văn phòng, nơi ở, kho chứa hay bất kỳ mục đích nào khác, ngôi nhà tiền chế đều đáp ứng được nhu cầu của bạn. Ngoại thất thời thượng, đường nét mềm mại cùng khả năng tùy chỉnh theo gu thẩm mỹ cá nhân, giúp bạn tạo nên không gian sống hoàn hảo. Đặc biệt nhất, nhà tiền chế không yêu cầu hàn tại chỗ, đồng thời chúng tôi cung cấp hướng dẫn lắp đặt chi tiết để quá trình thi công của bạn trở nên dễ dàng và nhanh chóng hơn. Hãy tận hưởng cuộc sống tuyệt vời nhất mà bạn có thể có — hãy lựa chọn nhà tiền chế khung chữ A (A-frame kit houses). CDPH sản xuất và bán nhiều loại nhà mô-đun, nhà tiền chế và nhà biệt thự. Phạm vi rộng rãi của sản phẩm đảm bảo chúng tôi cung cấp giải pháp phù hợp cho mỗi trại công trình.Nhà khung bộ kit
Xây dựng ngôi nhà mơ ước của bạn với nhà khung bộ kit

Tại sao nhà khung bộ kit có thể là khoản đầu tư tốt nhất của bạn trong năm

Bền vững và tiện lợi với nhà khung bộ kit

Quy trình xây dựng một ngôi nhà khung bộ kit
Why choose CDPH
Nhà khung bộ kit?
Kiểu dáng hiện đại nhà cabin táo
Container nhà bán chạy
Nhà gập chất lượng cao
Sản phẩm mới nhà tiền chế
Không Tìm Thấy Thứ Bạn Đang Tìm?
Yêu Cầu Báo Giá Ngay
Liên hệ với các chuyên gia tư vấn của chúng tôi để biết thêm sản phẩm có sẵn.Liên hệ với chúng tôi
27+ Năm Kinh Nghiệm
Xây dựng Trại Công trình