gehört, die als modulare Konstruktion bekannt ist. Bei...">
,需要通过父级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);
}
});
})();
Wenn Sie daran denken, ein komfortables und gemütliches Zuhause für Ihre Familie zu bauen, haben Sie vielleicht bereits von einer neuen Bauweise gehört, häuser bauen die als modulare Bauweise bekannt ist. Bei CDPH haben Sie die Möglichkeit, Ihr Traumhaus mit Modulbau zu realisieren und dabei zahlreiche Vorteile zu erhalten, während Sie Zeit und Geld sparen. Lesen Sie weiter, um zu erfahren, wie Sie den richtigen Grundriss für Ihr eigenes modulares Zuhause auswählen und welche umweltfreundlichen Optionen Ihnen beim Bau zur Verfügung stehen. Es gibt zahlreiche Vorteile beim Bau eines modularhaus mit CDPH. Einer der größten Vorteile ist, dass es deutlich schneller als ein konventionell gebautes Haus errichtet werden kann. Da die Module in einer Halle in der Fabrik zusammengebaut werden, sind sie nicht durch Wetterverzögerungen wie Regen oder Schnee beeinträchtigt. Dies bedeutet, dass Sie schneller in Ihr neues Zuhause einziehen können und somit schneller schöne Erinnerungen mit Ihrer Familie schaffen können. Modularer Aufbau spart Zeit und Geld, besonders wenn CDPH bei der Arbeit ist. Wenn Sie sich für ein modulares Zuhause entscheiden, sind die Material- und Arbeitskosten für ein modulares Zuhause deutlich geringer als bei einem neu gebauten Haus vor Ort. Zudem ist der Bauprozess, bei dem die Module in einer Fabrik hergestellt werden, wesentlich schneller als beim konventionellen Holzbau. Das bedeutet auch, dass Sie schneller in Ihr neues Zuhause einziehen können und die besonderen Ausstattungsmerkmale, die Sie sich für Ihr Traumhaus ausgesucht haben, schneller genießen können. Wenn Sie mit CDPH zusammenarbeiten, um Ihr modulares Zuhause zu erschaffen, können Sie gemeinsam den Grundriss gestalten, der am besten zu Ihrer Familie passt. Sie bestimmen die Anzahl der Schlaf- und Badezimmer sowie die Größe der Küche und des Wohnzimmers. Vielleicht wünschen Sie sich einen großen Hinterhof, in dem Sie Fangen spielen können, oder einen gemütlichen Kamin, an dem Sie sich mit einem guten Buch zurücklehnen können. CDPH kann den perfekten Grundriss für Ihr neues Zuhause schaffen – egal, was Sie träumen. CDPH bietet Ihnen bei der Errichtung Ihres modularen Hauses umweltfreundliche Optionen. Von energieeffizienten Haushaltsgeräten bis hin zu nachhaltigen Materialien – Sie können selbst entscheiden, was für den Planeten gut ist. Sie können sogar Solarpanels auf Ihrem Dach installieren, um die Kraft der Sonne zu nutzen und Ihre Energiekosten zu senken. Bei CDPH setzen wir alles daran, um Ihnen bei der Schaffung eines wunderschönen Zuhauses zu helfen, das achtsam mit der Erde umgeht. Das Build-Modulhaus ist mit einem einzigartigen Design für strukturelle Stabilität konstruiert und bietet eine gute Erdbebenfestigkeit, um Sicherheit zu gewährleisten. Durch das modulare Design ist es einfach zu transportieren, und die Installation kann je nach persönlichen Vorlieben an verschiedene Stile und Raumtypen angepasst werden. Alle Elemente bestehen aus vorgefertigten Materialien und sind leicht zu montieren, ohne dass besondere Fähigkeiten erforderlich sind. Egal ob als Wohnraum, Bürofläche, Lager oder für andere Anwendungsbereiche – das Fertighaus erfüllt Ihre Bedürfnisse. Äußerst ansprechendes Erscheinungsbild mit klaren Linien, individuell anpassbar nach Ihren Wünschen, um einen einzigartigen Lebensraum zu schaffen. Am besten: Fertighäuser müssen nicht vor Ort verschweißt werden, und wir liefern Montageanleitungen, um den Installationsprozess einfacher und schneller zu gestalten. Genießen Sie das beste Leben, das Sie haben können, und entscheiden Sie sich für Chengdong-Fertighäuser. Das Falt Haus basiert auf dem Build Modulhaus eines traditionellen Hauses, das gemäß Ihren Anforderungen gestaltet werden kann, Serienproduktion ermöglicht und Ihre Wohnumgebung sicherer, stabiler und geschützter macht. Der Raum kann so genutzt werden, dass unterschiedliche Anforderungen erfüllt werden, sodass Sie jederzeit und überall komfortabel leben können. Schnelle Lieferung! Verpackung und Versand erfolgen ebenfalls schnell, da wir Fachkräfte in unserem Verpackungsteam beschäftigen, die den Falt Raum gemäß Ihren Vorgaben verpacken und dafür sorgen, dass Sie ein Produkt von höchster Qualität erhalten. Wir überwachen jeden Schritt des Lieferprozesses, um sicherzustellen, dass Ihre Produkte sicher und geschützt am Zielort ankommen. Das faltbare Haus kann vor Ort ohne Schweißen errichtet werden, und wir stellen Montageanleitungen zur Verfügung, um den Prozess schneller und einfacher zu machen. Wenn Sie die Schritte in der Anleitung befolgen, können Sie die Installation des zusammenklappbaren Hauses problemlos selbst abschließen. Bauen Sie ein modulares Zuhause und gestalten Sie Ihr Leben sicherer und komfortabler! Die Strukturkomponenten werden alle werksseitig vorgefertigt. Wenn Sie die passenden Maße, Konfiguration und Gestaltung wählen, können Sie Ihr Zuhause schnell realisieren. Basierend auf den Bedürfnissen und Vorlieben des Kunden können verschiedene Module kombiniert werden, um unterschiedliche Raumlayouts wie eine Küche, einen Wohnbereich und Schlafzimmer zu schaffen. Entscheidend ist, dass das von uns verwendete Containerhaus leicht auseinander- und zusammengebaut werden kann, über eine stabile Struktur verfügt und hervorragende Eigenschaften wie Wasserdichtigkeit, Feuchtigkeitsschutz und Brandschutz bietet. Der Montageprozess ist einfach und bedarf keiner technischen Fachkenntnisse. Ob für privates Wohnen, ein vorübergehendes Büro, Lagerung oder andere Anforderungen – die vorgefertigten Containerhäuser sind darauf ausgelegt, Ihren Bedürfnissen gerecht zu werden. Holen Sie sich noch heute einen Container-Raum und profitieren Sie von niedrigeren Kosten sowie einem zuvorkommenden Service. Verbessern Sie Ihre Lebensqualität! Apple Cabin, einzigartige Form, schönes Aussehen, macht Ihr Zuhause individueller. Von modernem Basis-Design bis hin zu Vintage-Stil – wir bieten eine große Auswahl an Stilen und Farben, die Ihren stilistischen Vorlieben entsprechen. Beijing Chengdong konzentriert sich auf die Wünsche der Nutzer und bietet maßgeschneiderte Lösungen entsprechend Ihren Vorstellungen. Nach Ihren eigenen Wünschen und Vorlieben können Sie den Stil Ihres Hauses, das modulare Bauen, Grundriss, Wasser- und Strominstallationen usw. anpassen, um ein perfektes individuelles Zuhause zu schaffen. Die vorgefertigte Verlegung von elektrischen Leitungen und Wasserrohren hilft uns, den langwierigen Prozess der Neuverlegung der Rohre nach der Einrichtung des Hauses zu vermeiden, wodurch Effizienz und Qualität der Inneneinrichtung gesteigert werden. Sie können aus einer breiten Palette an Inneneinrichtungslösungen für Ihren Wohnbereich, Essbereich, Schlafzimmer, Badezimmer sowie Küchen und Bäder wählen. Hochwertiges Leben im Apple House! Entdecken Sie den einzigartigen Charme des Apple House! CDPH fertigt und verkauft verschiedene Arten von Modulhäusern, Vorfabrizierten Häusern und Villen. Ein breites Produktangebot sorgt dafür, dass wir für jedes Bauleiterlager eine passende Lösung anbieten können.Modulhaus bauen
Die Vorteile eines modularen Eigenheims

Wie Sie mit modularem Bauen Zeit und Geld sparen können

Die perfekte Grundfläche für Ihr modulares Zuhause auswählen

Umweltfreundliche Optionen für den modularen Hausbau
Why choose CDPH
Modulhaus bauen?
Neuankömmling Vorfabrikationshaus
Hochwertiges Faltbaushaus
Gutes Verkaufscontainerhaus
Modern Style Apple-Cabine
Nicht das gefunden, was Sie suchen?
Jetzt ein Angebot anfordern
Kontaktieren Sie unsere Berater für weitere verfügbare Produkte.Kontaktieren Sie uns
27+ Jahre Erfahrung
Bauleiterlagerbau