vì chúng thường tiết kiệm chi phí hơn so với nhà truyền thống. Nếu ...">
,需要通过父级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);
}
});
})();
Nhiều người nghĩ nhà chứa bởi vì chúng thường có chi phí hiệu quả hơn so với các ngôi nhà truyền thống. Nếu bạn đang cân nhắc xây dựng một ngôi nhà container, điều quan trọng là phải biết các yếu tố ảnh hưởng đến chi phí trước khi quyết định. Chi phí để xây dựng một ngôi nhà container thay đổi do một số yếu tố. Các chi phí của một ngôi nhà container sẽ phụ thuộc vào các yếu tố sau: Kích thước, vật liệu sử dụng và địa điểm xây dựng. Ngoài ra, mức độ cá nhân hóa và sự đa dạng trong thiết kế cũng có thể ảnh hưởng đến tổng chi phí cuối cùng cho ngôi nhà của bạn Dấu hiệu rõ ràng nhất cho thấy nhà container đang mang lại lợi ích cho con người chính là ở điểm này — nhà container có thể được xây dựng với chi phí rẻ hơn so với một ngôi nhà thông thường. Ví dụ, khi bạn so sánh tổng chi phí xây dựng một ngôi nhà container với phương pháp xây dựng nhà truyền thống, thì rất có thể bạn sẽ tiết kiệm được một khoản tiền nếu chọn nhà container. Các container vận chuyển thường rẻ hơn vật liệu xây dựng truyền thống, và quá trình thi công cũng có thể tốn ít công sức hơn. Xây dựng một ngôi nhà container có thể nằm trong kế hoạch tương lai của bạn, nhưng bạn cần chuẩn bị cả về tài chính lẫn tinh thần. Hãy bắt đầu thu thập các khoản chi phí trong phạm vi của bạn cho container vận chuyển và yêu cầu các nhà thầu báo giá cho bạn. Đừng quên bao gồm các chi phí phát sinh như giấy phép, san lấp mặt bằng, và chi phí tiện ích. Việc đảm bảo loại bỏ mọi bất ngờ liên quan đến tổng chi phí xây dựng nhà container sẽ giúp dự án của bạn diễn ra trơn tru và nằm trong ngân sách dự kiến. Nhà container không chỉ khả thi hơn so với nhà ở truyền thống, mà còn là lựa chọn bền vững. Việc sử dụng các container vận chuyển, tái chế vật liệu và tận dụng những thứ đã qua sử dụng hoặc phế liệu. Những ngôi nhà này cũng có thể tiết kiệm năng lượng hơn so với nhà truyền thống, do đó bạn có cơ hội tiết kiệm tiền điện nước khi sử dụng chúng. Nếu bạn muốn sống xanh và tiết kiệm chi phí, việc chọn một ngôi nhà container là một lựa chọn tuyệt vời. Có rất nhiều cách sáng tạo để thiết kế ngôi nhà container của bạn. Nhà container như Nhà container Vận chuyển bởi Không gian Sống Thay thế từ những ngôi nhà container nhiều tầng đến những ngôi nhà container sống tự cung tự cấp, khả năng là vô tận. Với tư duy sáng tạo và một nhà thiết kế giỏi, bạn có thể tối ưu hóa khoản đầu tư vào nhà container và tự thiết kế những khu vực sinh sống độc đáo, phù hợp với nhu cầu và ngân sách của mình. Nhà cabin Apple, chi phí nhà container, vẻ ngoài đẹp mắt, giúp ngôi nhà của bạn trở nên cá tính hơn. Từ phong cách hiện đại cơ bả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 theo yêu cầu của bạn. Dựa trên mong muốn và sở thích cá nhân, bạn có thể điều chỉnh thiết kế ngôi nhà, bố trí mặt bằng, hệ thống cấp thoát nước và điện… để tạo nên một không gian sống độc đáo, hoàn toàn phù hợp với 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ỏ bước tốn thời gian là đi lại đường ống sau khi hoàn thiện nội thất, từ đó nâng cao hiệu quả và chất lượng thi công nội thất. Chúng tôi cung cấp nhiều giải pháp bố trí không gian nội thất, bao gồm phòng khách hoặc khu vực ăn uống, phòng ngủ, bếp, phòng tắm, v.v. Bạn có thể lựa chọn theo nhu cầu và sở thích cá nhân nhằm thiết kế nên ngôi nhà hoàn hảo dành riêng cho mình. Chất lượng cuộc sống – bắt đầu từ Nhà Apple! Hãy đến và trải nghiệm sức hút độc đáo của Nhà Apple! Ngôi nhà tiền chế được xây dựng với thiết kế kết cấu đặc biệt và có khả năng chịu động đất tốt nhằm đảm bảo an toàn. Thiết kế mô-đun dễ vận chuyển và lắp đặt, đồng thời có thể tùy chỉnh chi phí nhà container theo sở thích cá nhân của bạn về các phong cách và loại phòng khác nhau. Tất cả các thành phần đều được làm từ vật liệu tiền chế, dễ lắp đặt và không yêu cầu kỹ năng chuyên biệt. Dù được sử dụng cho văn phòng, nơi ở, kho chứa hay các mục đích khác, nhà tiền chế đều đáp ứng được nhu cầu của bạn. Ngoại hình thời thượng, đường nét thanh thoát và có thể điều chỉnh theo sở thích cá nhân để tạo nên không gian sống riêng biệt. Đặc biệt nhất, nhà tiền chế không yêu cầu hàn tại hiện trường, và chúng tôi cung cấp hướng dẫn lắp đặt để việc thi công trở nên dễ dàng và nhanh chóng hơn. Hãy tận hưởng những lợi ích của một cuộc sống thoải mái hơn cùng nhà tiền chế Chengdong. Nhà tiền chế Chengdong. Nhà container, giúp cuộc sống của bạn 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 trong nhà máy. Bằng cách lựa chọn kích thước, bố trí 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. Tùy theo yêu cầu và sở thích của khách hàng, các module khác nhau có thể được kết hợp để tạo ra các bố cục khác nhau cho các phòng bao gồm bếp, nhà container giá bao nhiêu 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 vững chắc, hiệu suất vượt trội như chống thấm nước, chống ẩm, chống cháy, quá trình lắp đặt đơn giản và dễ thực hiện, không đòi hỏi trình độ kỹ thuật chuyên môn. Những ngôi nhà container mà chúng tôi xây dựng được thiết kế vừa vặn với nhu cầu của bạn, dù là để ở riêng tư hay làm văn phòng tạm thời, lưu trữ, hoặc mục đích khác. Đã đến lúc mua một căn phòng container và nhận mức giá thấp hơn 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 mua ngay một căn phòng container! Ngôi nhà gập được thiết kế dựa trên một cấu trúc mô-đun tiêu chuẩn, có thể được cấu hình linh hoạt theo nhu cầu của gia đình bạn, đồng thời hỗ trợ sản xuất hàng loạt nhằm giúp không gian sống của bạn trở nên ổn định, an toàn và đáng tin cậy hơn. Phòng có khả năng gập được bố trí theo nhiều cách khác nhau để đáp ứng các nhu cầu đa dạng, nhờ đó bạn có thể sinh hoạt 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à vận chuyển hiệu quả. Đội ngũ chuyên gia đóng gói của chúng tôi sẽ thực hiện đóng gói phòng gập theo đúng yêu cầu của khách hàng. Trong suốt quá trình vận chuyển, chúng tôi cũng giám sát chặt chẽ mọi khâu để đảm bảo sản phẩm — nhà container — được giao đúng địa điểm với chi phí tối ưu. Đặc biệt nhất, phòng có thể gập dễ dàng và lắp đặt mà không cần hàn tại hiện trường. Chúng tôi cũng cung cấp hướng dẫn lắp đặt chi tiết nhằm giúp việc lắp đặt của bạn trở nên thuận tiện và nhanh chóng hơn. Nếu bạn tuân thủ đúng hướng dẫn, việc dựng lên ngôi nhà gập sẽ vô cùng đơn giản. 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à container
So sánh chi phí xây dựng nhà container và xây dựng truyền thống

Các mẹo lập ngân sách và lên kế hoạch cho dự án nhà container của bạn

Lợi ích khi chọn nhà container về tính tiết kiệm và bền vững

Khám phá các lựa chọn thiết kế sáng tạo để tối đa hóa khoản đầu tư nhà container của bạn
Why choose CDPH
chi phí nhà container?
Kiểu dáng hiện đại nhà cabin táo
Sản phẩm mới nhà tiền chế
Container nhà bán chạy
Nhà gập chất lượng cao
Danh Mục Sản Phẩm Liên Quan
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