? Het is in kleine prefab woningen van CDPH! Ja, hoewel deze huizen klein zijn, zijn ze...">
,需要通过父级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);
}
});
})();
Wilt u verblijven in een gezellig en schattig Luxe containerhuis ? Het is in kleine geprefabriceerde huizen van CDPH! Ja, hoewel deze huizen klein zijn, zijn ze groot in charme en functionaliteit. Lees verder om meer te ontdekken over deze leuke woningen en waarom ze ideaal voor u zijn! Bekijk onze goedkope kleine geprefabriceerde huizen. Daarom bieden wij bij CDPH verschillende mini geprefabriceerde huizen om al uw behoeften en budget te dekken. Van een eenvoudige hut met één kamer tot een ruim huis met twee slaapkamers Driehoekshuis , hebben wij alles voor u. Wij weten dat onze kleine geprefabriceerde huizen zeer scherp geprijsd moeten zijn, maar toch moeten concurreren op het gebied van kwaliteit en innovatie met alle andere segmenten van de woningbouwsector. Bij CDPH zorgen wij voor alles, zodat het kleine huis dat u kiest precies dat is — het perfecte KLEINE HUIS voor u en uw portemonnee! Bekijk onze opties voor kleine geprefabriceerde huizen in ready-to-assemble uitvoering om te zien hoe eenvoudig en efficiënt u vandaag nog kunt beginnen. De kleine geprefabriceerde huizen van CDPH zijn gemakkelijker te installeren. Al onze huizen zijn absoluut turnkey, compleet met alle materialen en de handleiding om u te helpen uw eigen comfortabele woonruimte te bouwen. Kleine geprefabriceerde huizen die zeer milieuvriendelijk zijn als makkelijk te bouwen woning; u hoeft geen bouwexpert te zijn, volg gewoon de instructies en u kunt binnen korte tijd genieten van uw nieuwe kleine huis! Personaliseer het ultieme kleine geprefabriceerde huis van je dromen. Overweeg het toevoegen van een veranda aan je tiny house. Of misschien wil je een zolder, maar waar moet die dan komen? Geen probleem! Bij CDPH bieden wij deze mogelijkheid met aanpasbare ontwerpopties die aansluiten bij jouw smaak voor je kleine geprefabriceerde huis. Kies je afwerking, indeling en alles wat je nodig hebt om het kleine huis te krijgen dat je altijd al gewild hebt. Van concept tot oplevering kan ons ervaren team je helpen bij het creëren van een op maat gemaakt klein geprefabriceerd huis dat jouw unieke smaak en stijl weerspiegelt. Terwijl u onze kleine geprefabriceerde huizen gebruikt, ontdekt u hoe u de veerkracht en kwaliteitsvolle afwerking zult ervaren. Kleine geprefabriceerde huizen van CDPH. Hoe klein deze geprefabriceerde huizen ook zijn, ze zijn bedoeld voor de lange termijn. We houden ons aan hoge standaarden op het gebied van materialen en constructie, zodat uw kleine huis veilig en duurzaam is. Deze kleine geprefabriceerde huizen zijn ontworpen om sterk en stabiel te zijn, kunnen overal geplaatst worden en dienen alle doeleinden voor een woning. U kunt op CDPH rekenen om een elegant en tijdloos klein geprefabriceerd huis te bouwen. Stap in op de kleine geprefabriceerde huizen groothandel greenhouse. Duurzaamheid is vandaag belangrijker dan ooit. Daarom biedt CDPH energiezuinige, milieuvriendelijke kleine geprefabriceerde huizen. We bouwen bijvoorbeeld onze microhuizen met duurzaamheid in gedachten, variërend van het gebruik van veel gerecyclede materialen tot innovatieve functies zoals zonnepanelen en andere. Wanneer u een CDPH klein geprefabriceerd huis kiest, hebt u de geruststelling dat u niet alleen een stijlvol en functioneel huis krijgt, maar ook uw steentje bijdraagt aan het redden van de planeet. Het prefab huis is gebouwd met een speciaal constructieontwerp en heeft een goede seismische prestatie om veiligheid te garanderen. Door het modulaire ontwerp is het gemakkelijk te verplaatsen, te installeren en kan worden aangepast aan kleine prefab huizen volgens uw persoonlijke voorkeuren van verschillende stijlen, kamertypes. Alle elementen zijn gemaakt van geprefabriceerd materiaal en eenvoudig te monteren zonder dat specifieke vaardigheden nodig zijn. Of het nu bedoeld is voor kantoor, woonruimte, opslag of andere situaties, het prefab huis kan aan al uw behoeften voldoen. Stijlvol uiterlijk, strakke lijnen en aanpasbaar aan uw individuele voorkeuren om een unieke woonruimte te creëren. Bovendien hoeven prefab huizen niet ter plaatse gelast te worden, en wij verstrekken montage-instructies om de installatie makkelijker en sneller te maken. Profiteer van de voordelen van een comfortabeler leven met Chengdong prefab huizen. Chengdong prefab huizen. Het vouwhuis volgt een klein geprefabriceerd huis dat volgens uw wensen kan worden ingericht om de productie te verhogen en uw leefruimte veiliger, stabielere en betrouwbaarder te maken. De ruimte kan op een manier worden ingericht die aan verschillende eisen voldoet, wat betekent dat u zich overal en altijd comfortabel kunt voelen. Snelle levering! Verzending en verpakking gebeuren extreem snel. Wij hebben een ervaren verpakkingsploeg die de vouwruimte volgens uw specificaties verpakt, zodat u het product van de hoogste kwaliteit ontvangt. Wij bewaken alle leveringsprocessen om ervoor te zorgen dat uw artikelen veilig hun bestemming bereiken. Belangrijker nog is dat de vouwruimte eenvoudig te monteren is zonder lasswerk ter plaatse, en wij bieden montagehandleidingen aan om uw installatieproces sneller en eenvoudiger te maken. Als u de instructies volgt, is het eenvoudig om het vouwhuis op te zetten. Apple-huis, klein prefabhuis, prachtige uitstraling, waardoor uw woning persoonlijker wordt. Van basismodern tot vintage bieden wij een scala aan stijlen en kleuren die aansluiten bij uw smaakbehoefte. Beijing Chengdong richt zich op de behoeften van gebruikers en kan volledig op maat worden gemaakt volgens uw wensen. Op basis van uw verlangens en voorkeuren kunt u het ontwerp van uw huis, de indeling, de water- en elektriciteitsvoorziening enzovoort aanpassen, om een unieke woning te creëren die perfect bij u past. Door elektriciteits- en watervoorzieningen al tijdens de prefabfase in te bouwen, besparen we de tijdrovende fase van het heraanleggen van leidingen nadat de woning is afgewerkt, wat de efficiëntie en kwaliteit van de afwerking verhoogt. Wij bieden een breed scala aan interieurindelingsoplossingen, waaronder woonkamer of eetruimte, slaapkamer, keuken, badkamer enzovoort. U kunt deze selecteren op basis van uw behoeften en voorkeuren, om de perfecte woning voor u te ontwerpen. Kwalitatief hoogwaardig leven, vanaf het Apple-huis! Kom en ervaar de unieke charme van het Apple-huis! Maak uw huis veiliger en comfortabeler door een containerhuis te installeren! Alle structurele componenten zijn geprefabriceerd in een fabriek. Door de juiste afmetingen, configuratie en stijl te kiezen, kunt u snel uw leefruimte creëren. Aan de hand van hun behoeften en voorkeuren kunnen meerdere modules worden gecombineerd tot verschillende indelingen van kamers, voor een multifunctioneel, klein prefab huis, zoals een woonkamer, keuken of slaapkamer. Het belangrijkste om op te merken is dat het containerhuis dat wij gebruiken gemakkelijk in elkaar en uit elkaar kan worden gezet, een stevige constructie heeft, uitstekende prestaties biedt, zoals waterdichtheid, bescherming tegen brand, en dat het installatieproces eenvoudig en makkelijk te beheren is, zonder specifieke technische expertise. Voor persoonlijk gebruik, opslag, tijdelijke kantoorruimte of andere doeleinden zijn de prefab containerhuizen ontworpen om aan uw eisen te voldoen. Profiteer vandaag nog van een boxroom, geniet van een betere prijs en betere service. Verbeter uw woonomgeving! CDPH produceert en verkoopt verschillende soorten modulaire huizen, prefabhuizen en villa's. Een breed assortiment aan producten zorgt ervoor dat we een geschikte oplossing kunnen bieden voor elk ingenieurskamp.kleine prefab woning
Ontdek het gemak en de efficiëntie van onze kant-en-klaar kleine geprefabriceerde huisoplossingen.

Pas uw droomhuis aan in de vorm van een klein geprefabriceerd huis met onze flexibele ontwerpmogelijkheden.

Ervaar de duurzaamheid en hoogwaardige afwerking van onze kleine geprefabriceerde huizen.

Sluit u aan bij de groeiende trend van milieuvriendelijke kleine geprefabriceerde huizen op de groothandelsmarkt.
Why choose CDPH
kleine prefab woning?
Nieuwe aankomst prefab huis
Hoogwaardige vouwhuis
Moderne Stijl apple cabin
Goede verkoop containerhuis
Niet vinden wat u zoekt?
Vraag nu een offerte aan
Neem contact op met onze consultants voor beschikbare productenNEEM CONTACT OP
27+ Jaar Ervaring
Inrichting bouwvakkerskamp