nhà nhỏ mô-đun có thể khá khó hiểu đối với nhiều người. Một ngôi nhà mô-đun giá bao nhiêu? Nó không chỉ đơn thuần là về...">
,需要通过父级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);
}
});
})();
Chi phí thực tế của nhà nhỏ kiểu mô-đun có thể hơi khó hiểu đối với nhiều người. Chi phí cho một ngôi nhà mô-đun là bao nhiêu? Không chỉ đơn thuần là mức giá niêm yết bạn nhìn thấy ban đầu, còn rất nhiều yếu tố khác cần cân nhắc có thể khiến giá thành của một ngôi nhà mô-đun cao hơn hoặc thấp hơn. Trong bài viết này, chúng ta sẽ đi sâu vào các chi phí cụ thể của một ngôi nhà mô-đun để bạn có được cái nhìn tổng quan về những gì cần chuẩn bị khi xây dựng ngôi nhà mô-đun CDPH của riêng bạn. Một phần của quá trình ra quyết định trong việc xác định có nên xây dựng CDPH nhà nhỏ mô-đun là chi phí. Các ngôi nhà mô-đun thường được coi là ít tốn kém hơn, mặc dù không phải lúc nào cũng vậy. Đối với một số nhu cầu nhất định, hoặc trong một số hoàn cảnh cụ thể, các phương pháp xây dựng truyền thống cũng có thể rẻ ngang bằng. Có một vài mẹo đơn giản để tiết kiệm chi phí cho công trình CDPH nhà nhỏ mô-đun được xây dựng. Hai yếu tố quan trọng nhất là duy trì ngân sách và không chi tiêu thêm từ túi của bạn. Và việc tìm mua vật liệu và thuê nhân công với mức giá tốt nhất có thể giúp bạn tiết kiệm đáng kể chi phí trong suốt quá trình. Cuối cùng, đừng quên sử dụng bất kỳ ưu đãi hay chương trình khuyến mãi nào mà họ có thể cung cấp để tiếp tục giảm tổng chi phí cuối cùng. Có một vài chi phí ẩn của nhà mô-đun , tuy nhiên, những điều mà chủ nhà thường không được biết rõ và có thể dễ dàng bị bỏ qua. Bạn cũng sẽ phải đối mặt với nhiều chi phí bổ sung khác tùy thuộc vào phí cấp phép và mức độ khó khăn trong việc chuẩn bị mặt bằng. Bằng cách nắm rõ những chi phí ẩn này từ trước, bạn sẽ sẵn sàng hơn khi gặp phải chúng và không bị bất ngờ bởi các khoản chi phí phát sinh. Phân tích các thành phần của bản thiết kế nhà mô-đun giá cả có thể cho bạn cái nhìn rõ hơn về việc tiền của bạn thực sự được sử dụng như thế nào. Chi phí xây nhà phụ thuộc vào diện tích nhà, độ phức tạp của thiết kế và chất lượng vật liệu cũng như hoàn thiện. Việc hiểu rõ các yếu tố này sẽ giúp bạn kiểm soát tốt hơn dự án xây dựng nhà lắp ghép của mình, đồng thời giữ được trong phạm vi ngân sách. Các ngôi nhà tiền chế dễ lắp ráp và không yêu cầu bất kỳ kiến thức chuyên môn nào. Chúng có thể được sử dụng làm nhà ở mô-đun, văn phòng, kho chứa hoặc cho bất kỳ mục đích nào khác. Ngôi nhà gập được thiết kế theo hệ thống mô-đun có thể cấu hình linh hoạt nhằm đáp ứng các nhu cầu cụ thể của ngôi nhà bạn. Điều này giúp kiểm soát chi phí xây dựng nhà mô-đun và đồng thời nâng cao tính an toàn, ổn định cho ngôi nhà của bạn. Các phòng có thể kết hợp với nhau để đáp ứng đa dạng yêu cầu sử dụng, nghĩa là bạn có thể sinh sống thoải mái ở bất kỳ đâu và bất kỳ lúc nào. Giao hàng nhanh! Chúng tôi cũng cung cấp dịch vụ đóng gói và giao hàng nhanh chóng. Đội ngũ chuyên gia đóng gói của chúng tôi sẽ đóng gói phòng gập theo đúng yêu cầu của khách hàng. Chúng tôi sẽ giám sát chặt chẽ từng bước trong quá 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. Điểm nổi bật nhất là phòng gập dễ lắp dựng 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 để giúp quá trình thi công của bạn diễn ra nhanh chóng và thuận tiện hơn. Nếu bạn tuân thủ đầy đủ các bước trong hướng dẫn và thực hiện đúng theo trình tự, bạn sẽ hoàn tất việc xây dựng ngôi nhà gập của mình. Nhà Apple, thiết kế độc đáo, ngoại thất đẹp mắt, giúp không gian sống của bạn trở nên cá tính hơn. Chúng tôi cung cấp đa dạng phong cách và màu sắc phù hợp với gu thẩm mỹ cá nhân của bạn — từ hiện đại tối giản đến cổ điển hoài cổ. Bắc Kinh Chengdong tập trung vào nhu cầu người dùng, do đó sản phẩm có thể được tùy chỉnh theo yêu cầu cụ thể của bạn. Bạn hoàn toàn có thể điều chỉnh hình dáng ngôi nhà, bố trí mặt bằng, hệ thống cấp nước, cấp điện… sao cho phù hợp nhất với sở thích và mong muốn cá nhân, từ đó kiến tạo một tổ ấm đích thực dành riêng cho bạn. Chúng tôi đã lắp đặt sẵn đường ống cấp điện và cấp nước ngay từ giai đoạn xây dựng, giúp tránh việc phải đi lại hệ thống cấp nước – cấp điện sau khi hoàn thiện nội thất — đồng thời nâng cao hiệu quả và chất lượng công tác trang trí. Chúng tôi cung cấp nhiều phương án bố trí nội thất linh hoạt, bao gồm phòng khách, phòng ăn, phòng ngủ, phòng tắm… Bạn có thể lựa chọn theo nhu cầu và sở thích để tạo nên một không gian sống lý tưởng, độc bản dành riêng cho mình. Nhà Apple – Chất lượng sống tuyệt hảo! Nhà Apple là một nơi đặc biệt! Nhà container – Mang đến cho bạn một không gian sống an toàn và thoải mái hơn! Toàn bộ các thành phần kết cấu đều được sản xuất sẵn trong nhà máy. Bằng cách lựa chọn kích thước, cấu hình và thiết kế phù hợp, bạn có thể nhanh chóng xây dựng không gian sống của mình. Dựa trên yêu 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 linh hoạt để tạo ra nhiều bố trí phòng đa dạng, bao gồm bếp, nhà ở mô-đun và phòng ngủ. Điều quan trọng nhất là nhà container của chúng tôi dễ tháo lắp, kết cấu ổn định, hiệu suất vượt trội – như khả năng chống thấm nước, chống ẩm, chống cháy – đồng thời quy trình lắp đặt đơn giản, dễ quản lý và không đòi hỏi trình độ kỹ thuật chuyên sâu. Các nhà container do chúng tôi xây dựng được thiết kế linh hoạt nhằm đáp ứng mọi nhu cầu của bạn, dù là làm nơi ở riêng tư, văn phòng tạm thời, kho chứa hàng hay bất kỳ mục đích sử dụng nào khác. Đã đến lúc mua ngay một phòng container với mức giá ưu đãi cùng dịch vụ chăm sóc khách hàng tận tâm! Nâng tầm cuộc sống của bạn bằng cách sở hữu một phòng container! 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.Chi phí nhà mô-đun
So sánh chi phí xây dựng nhà mô đun với xây dựng truyền thống

Mẹo tiết kiệm chi phí khi xây dựng nhà mô-đun

Các chi phí ẩn của nhà mô-đun được tiết lộ

Phân tích các yếu tố ảnh hưởng đến giá nhà mô-đun
Why choose CDPH
Chi phí nhà mô-đun?
Sản phẩm mới nhà tiền chế
Nhà gập chất lượng cao
Kiểu dáng hiện đại nhà cabin táo
Container nhà bán chạy
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