? Nachází se mezi malými předem vyrobenými domy od CDPH! Ano, i když jsou tyto domy malé, jsou...">
,需要通过父级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);
}
});
})();
Chcete pobývat v útulném a okouzlujícím Luxusní kontejnerový dům ? Je to v malých předem vyrobených domech od CDPH! Ano, i když tyto domy jsou malé, mají obrovský šarm a funkčnost. Pokračujte ve čtení a zjistěte více o těchto roztomilých domech a proč jsou pro vás ideální! Prohlédněte si naše levné malé předem vyrobené domy. Proto v CDPH nabízíme různé mini předem vyrobené domy, které pokryjí všechny vaše potřeby a rozpočet. Od kabin s jednou místností po prostorné domy se dvěma ložnicemi Trojboký dům , pro vás máme všechno. Víme, že naše malé předem vyrobené domy musí být cenově dostupné i pro velmi skromný rozpočet, ale zároveň musí konkurovat kvalitě a inovacím dostupným ve všech oblastech stavebnictví. V CDPH se o vše postaráme, abyste měli jistotu, že ten malý dům, který jste si vybrali, bude opravdu tím — dokonalým MALÝM DOMEM pro vás i vaši peněženku! Podívejte se na naše možnosti malých prefabrikovaných domů ve formě sestavovacích sad a zjistěte, jak snadno a efektivně můžete začít už dnes. Malé prefabrikované domy od CDPH je jednodušší nainstalovat. Všechny naše domy jsou naprosto klíčové, kompletní se všemi materiály a návodem k montáži, který vám pomůže postavit si vlastní pohodlný životní prostor. Malé prefabrikované domy, které jsou velmi ekologické a snadno postavitelné, nebudete muset být stavebním odborníkem, stačí sledovat pokyny a brzy si budete užívat svůj nový malý dům! Personalizujte si svůj vysněný malý předem vyrobený dům. Zvažte přidání verandy ke svému malému domu. Nebo možná chcete podkroví – kde by tedy mělo být umístěno? Žádný problém! U CDPH nabízíme možnosti úpravy designu podle vašich preferencí pro váš malý předem vyrobený dům. Vyberte si výběr povrchových úprav, rozmístění místností a cokoli dalšího, co potřebujete k tomu, abyste měli ten malý dům, o kterém jste vždy snili. Od konceptu až po dokončení vám náš zkušený tým pomůže vytvořit individuální malý předem vyrobený dům, který odráží váš jedinečný vkus a styl. Při používání našich malých přírodních domů zjistěte, jak oceníte odolnost a kvalitní řemeslnou výrobu. Malé přírodní domy od CDPH. Ačkoli tyto přírodní domy mohou být malé, jsou určeny na dlouhou dobu. Držíme se vysokých norem co do materiálů a stavby, aby bydlení ve vašem malém domě bylo bezpečné a trvalé. Tyto malé přírodní domy jsou navrženy tak, aby byly pevné a stabilní, umístěné kdekoli a sloužily ke všem účelům pro bydlení. Můžete spoléhat na CDPH, která postaví malý přírodní dům, jenž bude stejně elegantní a nezastaralý. Přidejte se k malým předem vyrobeným skleníkům v rámci velkoobchodu. Udržitelnost je dnes důležitější než kdy jindy. Proto CDPH nabízí energeticky účinné a ekologické malé předem vyrobené domy. Například stavíme naše mikrodomy s ohledem na udržitelnost, a to od používání velkého množství recyklovaných materiálů po inovativní prvky, jako jsou solární panely a další. Když si vyberete malý předem vyrobený dům CDPH, můžete mít klid v tom, že získáváte nejen stylový a užitečný dům, ale také přispíváte ke spásě planety. Prefabrikovaný dům je postaven se zvláštním konstrukčním návrhem a má dobrou odolnost proti zemětřesení, což zajišťuje bezpečnost. Modulární design je snadno přenositelný, jednoduchý na instalaci a lze jej přizpůsobit ve small prefab house dle vašich osobních preferencí různých stylů, typů místností. Všechny prvky jsou vyrobeny z prefabrikovaného materiálu, snadno se montují a nevyžadují žádné specifické dovednosti. Ať už je určen pro kancelář, bydlení, skladování nebo jiné účely, prefabrikovaný dům splní vaše požadavky. Stylový vzhled, hladké linie a možnost přizpůsobení vašim individuálním představám pro vytvoření osobního životního prostoru. Nejlepší na tom je, že prefabrikované domy není nutné svařovat na staveništi, a my poskytujeme pokyny k instalaci, aby byla montáž jednodušší a rychlejší. Pojďte využít výhod pohodlnějšího způsobu života s prefabrikovanými domy Chengdong. Chengdong prefabrikované domy. Skládací dům vychází z malého předem vyrobeného domu, který lze podle vašich požadavků upravit za účelem zvýšení výroby a zajištění bezpečnějšího, stabilnějšího a spolehlivějšího bydliště. Místnost lze uspořádat tak, aby vyhovovala různým požadavkům, což znamená, že se cítíte pohodlně kdekoli a kdykoli. Rychlá dodávka! Doprava a balení jsou extrémně rychlé. Zaměstnáváme zkušený tým pro balení, který balí skladací dům přesně podle vašich specifikací, abyste získali produkt nejvyšší kvality. Všechny procesy dodávky pečlivě sledujeme, abychom zajistili bezpečné doručení vašich položek do cíle. Nejdůležitější je, že skladací dům je snadno instalovatelný bez nutnosti svařování na místě, a my vám poskytujeme pokyny k montáži, které vám proces instalace urychlí a usnadní. Pokud budete postupovat podle pokynů, bude montáž skládacího domu velmi jednoduchá. Jablkový dům, malý předem vyrobený dům, krásný vzhled – udělejte si svůj domov ještě osobnější. Nabízíme širokou škálu stylů a barev – od základního moderního po vintage – které odpovídají vašim estetickým preferencím. Společnost Beijing Chengdong se zaměřuje na potřeby uživatelů a může dům individuálně upravit podle vašich požadavků. Podle vašich přání a preferencí můžete změnit design domu, jeho půdorys, rozvody vody a elektřiny apod., abyste vytvořili dokonale přizpůsobený domov právě pro vás. Předem vyrobené elektrické a vodní rozvody nám umožňují vynechat časově náročné přepracování potrubí po dokončení interiéru, což zvyšuje efektivitu i kvalitu výbavy interiéru. Nabízíme širokou škálu řešení vnitřního uspořádání, včetně obývacího pokoje nebo jídelního prostoru, ložnice, kuchyně, koupelny atd. Můžete si vybrat podle svých potřeb a preferencí, abyste navrhli dokonalý domov právě pro sebe. Kvalitní život začíná s Jablkovým domem! Přijďte a zažijte jedinečný charakter Jablkového domu! Zajistěte si bezpečnější a pohodlnější bydlení instalací kontejnerového domu! Všechny konstrukční prvky jsou vyráběny ve výrobně. Díky výběru vhodných rozměrů, konfigurace a stylu můžete rychle vytvořit svůj vlastní životní prostor. Podle potřeb a preferencí lze začlenit několik modulů do různých uspořádání místností a vytvořit tak multifunkční malý prefabrikovaný dům s obývacím pokojem, kuchyní nebo ložnicí. Nejdůležitější je, že použitý kontejnerový dům je snadno rozebíratelný a opět sestavitelný, má pevnou konstrukci a vynikající vlastnosti, jako je vodotěsnost, ochrana proti požáru, a proces instalace je jednoduchý a snadno zvládnutelný bez nutnosti speciálních technických znalostí. Prefabrikované kontejnerové domy jsou navrženy pro vaše potřeby – ať už pro osobní bydlení, skladování, dočasné kancelářské prostory nebo jiné účely. Využijte dnes boxovou místnost, těšte se z lepší ceny a lepšího servisu. Zlepšete si své bydlení! CDPH vyrábí a prodává různé typy modulárních domů, prefabrikovaných domů a vilových domů. Široká škála produktů nás zabezpečuje poskytnout vhodné řešení pro každý táborový areál.malý prefabrikovaný dům
Objevte pohodlí a efektivitu našich připravených k sestavení malých prefabrikovaných domů.

Přizpůsobte si svůj vysněný malý prefabrikovaný dům s naší flexibilní nabídkou designu.

Zažijte odolnost a kvalitní řemeslnou výrobu našich malých prefabrikovaných domů.

Připojte se k rostoucímu trendu ekologických malých prefabrikovaných domů na trhu s velkoobchodem.
Why choose CDPH
malý prefabrikovaný dům?
Nová přírůstek prefabrikovaného domu
Vysokokvalitní skládací dům
Moderní styl apple chatrč
Dobrý prodej kontejnerového domu
Nemůžete najít, co hledáte?
Vyžádevat nabídku nyní
Kontaktujte naše konzulty pro více dostupných produktů.KONTAKT
27+ let zkušeností
Stavba táborového areálu