сколько стоит модульный дом...">
,需要通过父级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);
}
});
})();
Существует множество типов домов, из которых можно выбрать при планировании строительства нового здания, также продукция CDPH, такая как сколько стоит модульный дом примером такого дома может быть модульный дом-комплект. Статья посвящена модульным домам-комплектам и тому, почему вы можете найти их полезными для семьи, такой как ваша. Основным образом, дом из готового комплекта — это тот тип жилья, который строится на заводе и доставляется на ваш участок. Было сказано, что такие дома состоят из модулей, а не собираются целиком на месте. Затем эти модули идеально соединяются на том месте, где вы хотите жить. Одной из его замечательных особенностей является то, что вы можете легко изменить комплектацию под свои предпочтения. Это позволяет вам выбрать размер дома, расположение комнат на каждом этаже и цвет/финишные материалы для вашего нового дома. Это означает, что выбор будет очень субъективным в зависимости от вашего стиля и требований. Есть множество причин, почему выбор в пользу дома из prefab-комплекта для вашего следующего дома может стать самым умным решением, которое вы когда-либо примите, вместе с что такое модульный дом созданными CDPH... Основные причины этого в том, что, по сравнению с обычным домом, на его строительство требуется меньше времени. Поскольку основные элементы изготавливаются вне строительной площадки, нет необходимости беспокоиться о задержках из-за погодных условий или подобных проблем при строительстве на заводе. Ваш дом может быть собран всего за две недели. Одной из главных причин является то, что дома из prefab-комплектов часто более экологичны, чем традиционные. Эти дома в целом потребляют меньше энергии (так что вы экономите на счетах за электричество), Для некоторых, строительство дома — это тяжелая и сложная работа, но на самом деле готовый комплект для сборного дома делает всё намного проще, а также CDPH цены на модульные дома . Как только вы выберете характеристики и отделку для вашего дома, потребуется всего несколько недель, чтобы собрать всё вместе на месте строительства. Это приближает вас к переезду в новый дом и началу жизни там как можно скорее. Вскоре вы сможете начать создавать воспоминания в своём новом доме. Более дешевый: готовый комплект для модульного дома может стоить дешевле, чем реальный дом, идентичный по prefabricated house china произведено CDPH. Строительство также проще, и поскольку закупка материалов может производиться оптом, общая стоимость может оказаться ниже. Это отлично подходит для семей с небольшим бюджетом. А так как эти дома часто строятся с учетом большей энергоэффективности — застройщик не экономит на других моментах, поэтому возврат инвестиций означает низкие ежемесячные счета. То есть у вас будет больше денег на другие удовольствия. Идея модульного дома также полезна для окружающей среды, так как во время строительства производится гораздо меньше отходов, а материалы, из которых они сделаны, такие как экологически чистые, полезны для Земли. Существует несколько типов модульных домов. Владельцы модульных домов, кроме того, в этом варианте вы можете выбрать, как будет выглядеть ваш дом и какие материалы использовались для его строительства, вместе с продукцией CDPH. сборный маленький дом это быстрый и простой в строительстве улей, что многие оценивают. Кроме того, готовые дома из prefab kit экономически эффективны и экологичны, что делает их разумным выбором для вас во всех отношениях. Дом в форме яблока, уникальная форма, эстетичный внешний вид — сделайте свой дом по-настоящему персонализированным. Мы предлагаем широкий выбор стилей и цветов, соответствующих вашим личным предпочтениям: от минималистичного современного до винтажного. Компания Beijing Chengdong сосредоточена на потребностях пользователей и может адаптировать продукт под ваши индивидуальные требования. Вы можете изменить как облик вашего дома, так и планировку, систему водоснабжения, электроснабжения и другие параметры — чтобы создать идеальное жилое пространство именно для вас. Мы заранее прокладываем электрические и водопроводные коммуникации, избегая необходимости переноса труб и кабелей после завершения отделки, что повышает эффективность и качество ремонта. Мы предлагаем разнообразные варианты внутренней планировки: гостиная, столовая, спальня, ванная комната и др. Вы можете выбрать оптимальный вариант в зависимости от своих потребностей и предпочтений, чтобы создать эксклюзивную и идеальную домашнюю среду. Дом Apple — это высочайшее качество жизни! Дом Apple — особенное место! Дома из prefab-комплектов просты в строительстве и не требуют специальных навыков. Их можно использовать для проживания, офиса, хранения или любой другой цели. Дома из контейнеров обеспечивают вашу безопасность и делают жизнь комфортнее! Все дома из готовых комплектов производятся на заводах. Когда вы выбираете подходящие размеры, конфигурацию и дизайн, вы можете быстро создать свое жилое пространство. В соответствии с их потребностями и предпочтениями различные модули можно комбинировать в разные планировки комнат для создания многофункционального жилого пространства, такого как гостиная, кухня и спальня. Главный аспект заключается в том, что наш дом из контейнера просто разбирается и собирается, имеет устойчивое, прочное строение, отличное качество, включая водонепроницаемость, защиту от влаги, противопожарную безопасность, а процесс установки простой и легкий в управлении, не требует никакого специального технического уровня. Если это для вашего личного пространства, склада, временного офиса или по другим причинам, наши модульные дома созданы для удовлетворения ваших потребностей. Купите комнату-контейнер прямо сейчас и получите более низкую стоимость и более внимательное обслуживание. Улучшите свой жизненный опыт! Складной дом основан на стандартной модульной конструкции, которую можно настроить в соответствии с потребностями вашей семьи, обеспечив массовое производство и повысив устойчивость, безопасность и надёжность вашего жилого пространства. Складываемая комната может быть организована различными способами для удовлетворения разных потребностей, поэтому вы можете комфортно жить в любом месте и в любое время. Быстрая доставка! Мы также предоставляем эффективные услуги по упаковке и доставке. Наша квалифицированная команда по упаковке подготовит вашу складную комнату в соответствии с требованиями заказчика. В процессе доставки мы будем отслеживать все этапы, чтобы комплект для сборки дома (prefab kit house) был доставлен точно по адресу. Самое главное — комната легко складывается и монтируется без сварочных работ на месте. Мы также предоставляем инструкции по монтажу, чтобы облегчить и ускорить процесс установки. Если вы будете следовать инструкциям, собрать складной дом будет просто. CDPH производит и продает различные типы модульных домов,Prefab домов и Вилл. Широкий ассортимент продукции позволяет нам предлагать подходящее решение для каждого строительного лагеря.Дом из готовых комплектов
Преимущества выбора дома из готовых комплектов для вашей следующей недвижимости

Быстрое и простое строительство дома с использованием комплекта prefab

Доступное и устойчивое проживание в доме из готовых комплектов

Откройте возможности домов из готовых комплектов для вашего современного образа жизни.
Why choose CDPH
Дом из готовых комплектов?
Современный стиль яблочный домик
Новое поступление модульного дома
Хороший дом из контейнера для продаж
Высококачественный складной дом
Не нашли то, что искали?
Запросить коммерческое предложение сейчас
Свяжитесь с нашими консультантами для получения информации о дополнительных товарах.Связаться с нами
27+ Лет Опыта
Строительство лагеря инженеров