? Nous ...">
,需要通过父级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);
}
});
})();
Vous souhaitez une manière un peu différente et amusante de concevoir votre maison idéale ? Avez-vous déjà pensé à construire un espace de vie unique fabriqué à partir de conteneurs de transport ? Nous, chez CDPH, nous sommes fiers de créer des habitations conteneurs uniques et innovantes plans d'aménagement des maisons conteneurs pour tous les modes de vie, qu'il s'agisse d'un espace familial économique ou simplement d'une retraite parfaite. Peu importe vos goûts ou votre style de vie, que vous soyez amateur de plein air, adepte d'une simplicité minimaliste ou attiré par un mode de vie moderne, nous proposons les plans de maisons conteneurs les plus populaires que vous pouvez créer et personnaliser, et nous vous montrerons comment les réaliser parfaitement. Lors de la conception d'une maison en conteneur, les options sont illimitées. Des maisons miniatures confortables aux grandes maisons familiales, il existe un plan et une taille adaptés à vos besoins parmi les maisons en conteneurs. Si vous êtes une personne qui a besoin de beaucoup de liberté dans la vie, alors une chambre maison en conteneur maritime est ce qu'il vous faut, car c'est le plan de conteneur maritime le plus simple que vous puissiez obtenir. Ce design compact et économe en énergie comprend une pièce à vivre ouverte, une cuisine fonctionnelle, une salle de bains et une chambre à coucher — habilement regroupés en un seul conteneur maritime. Si vous aimez la nature, notre maison container écologique est une excellente source d'inspiration. Le design se caractérise par de grandes fenêtres et des lucarnes qui inondent l'habitation de lumière naturelle, créant un espace de vie lumineux et aéré. Une très grande terrasse extérieure permet de se détendre au plus près de la nature. Pourriez-vous vous habituer à vous réveiller au son des oiseaux chantant et des rayons du soleil filtrant à travers les arbres ? Chez CDPH, nous avons plans d'aménagement des maisons conteneurs de toutes les formes et tailles pour répondre à chaque besoin et budget. Que vous cherchiez une tiny house ou une maison plus grande et de style traditionnel, nous avons un modèle adapté à vos besoins ! Nos professionnels peuvent travailler avec vous pour déterminer ce qui convient le mieux à votre famille. De l'agencement, à la planification de l'espace jusqu'aux finitions intérieures finales, nous vous aiderons à concevoir un espace container qui reflète votre goût et votre personnalité. Un plan de maison à deux étages peut être un cottage confortable ou un design européen de luxe. Avec plusieurs chambres, salles de bains et espaces de vie, ce plan est parfait pour toute personne ayant besoin de plus d'espace pour s'épanouir et se détendre. Utilisez le deuxième étage comme un espace privé réservé au propriétaire, ou comme une chambre d'invités, et adaptez-le à votre style de vie. Plan de maison conteneur Plans de maison Vous si vous avez déjà rêvé de concevoir votre propre maison, vous pouvez maintenant réaliser ce rêve avec plan de maison conteneur . Avec CDPH, vous pouvez concevoir selon vos envies et construire une maison 100 % unique, de toutes les manières possibles, sur le long terme. Que vous soyez un architecte souhaitant concevoir votre propre maison conteneur personnalisée ou un chef d'entreprise cherchant à développer votre marque, nous sommes heureux de vous aider à concevoir la maison en conteneur que vous avez toujours rêvée. Commencez ici avec notre sélection de plans de maison en conteneur ou contactez-nous pour concevoir un design personnalisé qui vous aidera à travailler depuis chez vous tout en rendant la vie dans un espace atypique aussi confortable que possible. Une fois que vous aurez choisi un plan, nous collaborerons avec vous pour personnaliser l'agencement et les finitions afin de faire de votre maison un lieu qui vous ressemble vraiment. Vous pouvez personnaliser votre maison conteneur jusque dans les matériaux et les couleurs utilisés, ainsi que les équipements et appareils que vous installez. Cabine en forme de pomme, forme unique, apparence élégante, pour personnaliser davantage votre domicile. Nous proposons une grande variété de styles et de couleurs afin de correspondre à vos goûts personnels, allant du design contemporain épuré au style traditionnel. Beijing Chengdong se spécialise dans les plans d’aménagement des maisons conteneurs, personnalisables selon vos besoins. Pour répondre précisément à vos désirs et préférences individuels, vous pouvez personnaliser la conception de votre maison, sa disposition, ainsi que ses installations électriques et sanitaires, afin de construire pour vous une habitation idéale et exclusive. Nous concevons et installons les canalisations électriques et d’eau avant la construction, évitant ainsi la tâche chronophage de réaménager ces réseaux après la décoration de la maison, ce qui améliore l’efficacité et la qualité des travaux de finition. Vous pouvez choisir parmi un large éventail de solutions d’aménagement intérieur pour votre salon, salle à manger, chambre à coucher, cuisine, et bien plus encore. Une vie de qualité, avec la Apple House ! La Apple House est un espace unique ! Maison en conteneur : rendez votre vie plus sûre et plus confortable ! Tous les éléments structurels sont préfabriqués en usine. En choisissant les bonnes dimensions, la configuration et la conception adaptées, vous pouvez construire votre espace de vie rapidement. Selon les besoins et les préférences du client, les différents modules peuvent être combinés afin de créer des agencements variés pour les pièces, notamment la cuisine, les plans d’étage des maisons en conteneur et les chambres à coucher. Le point le plus important est que notre maison en conteneur est facile à démonter et à remonter, qu’elle possède une structure stable et des performances excellentes, notamment étanchéité à l’eau, résistance à l’humidité, protection contre l’incendie, et que son processus d’installation est simple, facile à gérer et ne nécessite aucune compétence technique particulière. Les maisons en conteneur que nous construisons sont conçues sur mesure pour répondre à vos besoins, qu’il s’agisse d’une résidence privée, de bureaux temporaires, de locaux de stockage ou d’un autre usage. Il est maintenant temps d’acheter une pièce en conteneur, avec un prix avantageux ainsi qu’un service client attentionné. Améliorez votre quotidien en achetant une pièce en conteneur ! La maison préfabriquée possède une conception structurelle spécifique et de bons plans d’étage pour maisons conteneurs afin de garantir la sécurité. Conception modulaire, transport et installation faciles, et personnalisation possible selon vos préférences personnelles en matière de styles et de types de pièces. Tous les composants sont préfabriqués et simples à monter, sans nécessiter de compétences particulières. Que ce soit destiné à un bureau, à un logement, à un entrepôt ou à d’autres usages, la maison préfabriquée saura répondre à vos besoins. Apparence élégante, lignes épurées et possibilité de personnalisation selon vos goûts afin de créer un espace de vie unique. Mieux encore, les maisons préfabriquées ne nécessitent aucune soudure sur site, et nous fournissons également des instructions d’installation pour simplifier et accélérer votre processus de montage. Adoptez une meilleure qualité de vie avec les maisons préfabriquées Chengdong. Maisons préfabriquées Chengdong. La maison pliante adopte un design ouvert qui peut être aménagé selon vos besoins afin d'augmenter la production et de rendre votre espace de vie plus sécurisé, stable et confortable. La pièce peut être configurée de manière à satisfaire différentes exigences, vous permettant ainsi de vivre dans un espace confortable partout et à tout moment. Plans d'aménagement des maisons conteneurs ! L'expédition et l'emballage sont extrêmement rapides. Nous disposons d'une équipe expérimentée en emballage qui conditionne la chambre pliable conformément à vos exigences afin que vous receviez un produit de qualité optimale. Pendant la livraison du produit, nous surveillons chaque étape du processus pour garantir l'arrivée en toute sécurité à destination. Plus important encore, la pièce se plie facilement et s'assemble sans nécessiter de plans d'aménagement pour maison conteneur. Nous fournissons également des instructions d'installation pour rendre votre montage plus rapide et plus efficace. En suivant les étapes décrites dans le manuel et en les respectant attentivement, vous pourrez terminer l'installation de votre maison pliable. CDPH fabrique et vend différents types de maisons modulaires, maisons préfabriquées et villas. Une large gamme de produits nous permet de fournir une solution appropriée pour chaque camp d'ingénierie.Plans d'aménagement des maisons conteneurs
Plans d'aménagement des maisons conteneurs

Plans d'aménagement des maisons conteneurs pour tous les styles de vie

Découvrez les plans d'aménagement des maisons conteneurs

Concevez votre maison de rêve avec des plans d'aménagement en conteneurs
Why choose CDPH
Plans d'aménagement des maisons conteneurs?
Cabine Apple style moderne
Bonne maison en conteneur
Nouvelle arrivée maison préfabriquée
Maison pliante de haute qualité
Catégories de produits connexes
Vous ne trouvez pas ce que vous cherchez ?
Demander un devis maintenant
Contactez nos consultants pour connaître les produits disponibles.Contactez-nous
27+ Années d'Expérience
Construction de Camps d'Ingénierie