? Kami ...">
,需要通过父级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);
}
});
})();
Mahukah cara yang sedikit berbeza dan menyeronokkan untuk mereka bentuk rumah idaman anda? Pernahkah terfikir untuk membina ruang hidup unik yang diperbuat daripada bekas penghantaran ? Kami di CDPH bangga dengan penciptaan rumah kontainer yang unik dan inovatif untuk semua jenis kehidupan, sama ada ruang hidup keluarga yang berkesan dari segi kos, atau sekadar tempat percutian yang sempurna. Tidak kira citarasa peribadi atau gaya hidup anda, sama ada anda seorang peminat alam semula jadi, peminat kesederhanaan minimalis, atau tertarik kepada kehidupan moden, kami menyediakan pelan lantai rumah kontainer paling popular yang boleh anda cipta dan sesuaikan, dan kami akan tunjukkan caranya supaya hasilnya tepat seperti yang diinginkan. pelan lantai rumah kontena ? Kami di CDPH bangga dengan penciptaan rumah kontainer yang unik dan inovatif untuk semua jenis kehidupan, sama ada ruang hidup keluarga yang berkesan dari segi kos, atau sekadar tempat percutian yang sempurna. Tidak kira citarasa peribadi atau gaya hidup anda, sama ada anda seorang peminat alam semula jadi, peminat kesederhanaan minimalis, atau tertarik kepada kehidupan moden, kami menyediakan pelan lantai rumah kontainer paling popular yang boleh anda cipta dan sesuaikan, dan kami akan tunjukkan caranya supaya hasilnya tepat seperti yang diinginkan. Apabila mereka bentuk rumah kontena, pilihannya adalah tidak terhad. Dari rumah kecil yang selesa hingga rumah keluarga besar, terdapat pelan lantai dan saiz yang sesuai untuk anda dalam rumah kontena. Jika anda seseorang yang memerlukan banyak kebebasan dalam hidup, maka rumah 1 bilik rumah kotak pengangkutan ialah apa yang anda perlukan, kerana ia merupakan pelan lantai kontena penghantaran yang paling ringkas. Reka bentuk padat dan cekap tenaga ini dilengkapi dengan kawasan ruang tamu terbuka, dapur yang boleh digunakan, bilik air dan bilik tidur — dikemas kini dengan kemas dalam satu kontena penghantaran. Jika anda mencintai alam, rumah kontena mesra alam kami adalah sumber inspirasi yang hebat. Reka bentuk ini dicirikan dengan tingkap besar dan tingkap bumbung yang membanjiri kediaman dengan cahaya semula jadi untuk mencipta ruang hidup yang terang dan lapang. Terdapat dek luaran yang sangat besar untuk bersantai berdekatan dengan alam. Adakah anda boleh membiasakan diri bangun dengan bunyi burung berkicau dan sinaran matahari yang menembusi pokok-pokok? Di CDPH, kami mempunyai pelan lantai rumah kontena pelbagai bentuk dan saiz untuk memenuhi setiap keperluan dan bajet. Sama ada anda sedang mencari rumah kecil atau rumah gaya tradisional yang lebih besar, kami mempunyai reka bentuk yang sesuai dengan keperluan anda! Pakar kami boleh bekerjasama dengan anda untuk mengetahui apa yang paling sesuai untuk keluarga anda. Dari susun atur, perancangan ruang hingga sentuhan dalaman akhir, kami akan membantu anda mereka bentuk ruang kontena yang mencerminkan citarasa dan personaliti anda. Pelan rumah dua tingkat boleh menjadi sebuah pondok yang selesa atau reka bentuk Eropah mewah. Dengan beberapa bilik tidur, bilik mandi dan ruang tamu, pelan lantai ini sesuai untuk sesiapa sahaja yang memerlukan lebih banyak ruang untuk bersantai. Gunakan tingkat kedua sebagai tempat peribadi untuk tuan rumah, atau sebagai ruang tetamu, menjadikannya unik mengikut gaya hidup anda. Pelan Rumah Kontainer Pelan Lantai Anda jika anda pernah bermimpi untuk mereka bentuk rumah sendiri, kini anda boleh menjadikan impian itu kenyataan dengan pelan rumah kontainer . Dengan CDPH, anda boleh mereka bentuk mengikut citarasa hati dan membina rumah yang 100% unik, dalam setiap aspek secara jangka panjang. Sama ada anda seorang arkitek yang ingin mereka bentuk rumah kontainer tersuai sendiri atau pemilik perniagaan yang ingin memperluaskan jenama anda, kami gembira dapat membantu anda mereka bentuk rumah kontainer penghantaran yang telah lama anda idam-idamkan. Mulakan di sini dengan pilihan kami rancangan rumah kontena atau hubungi kami untuk mereka bentuk reka bentuk tersuai yang membantu anda bekerja dari rumah sambil mengekalkan keselesaan kehidupan di ruang yang tidak biasa seboleh mungkin. Setelah anda memilih pelan lantai, kami akan bekerjasama dengan anda untuk memperibadikan susun atur dan siapannya supaya rumah anda benar-benar milik anda sendiri. Anda boleh menyesuaikan rumah kontainer anda hingga ke peringkat bahan dan warna yang digunakan, serta kelengkapan dan peralatan yang dipasang. Rumah Kabin Apple, bentuk unik, rupa yang cantik, menjadikan rumah anda lebih personal. Kami menawarkan pelbagai gaya dan warna untuk menyesuaikan dengan selera peribadi anda, dari yang ringkas dan kontemporari hingga tradisional. Beijing Chengdong berfokus pada pelan lantai rumah kontena, yang boleh disesuaikan mengikut keperluan anda. Untuk memenuhi keinginan dan preferensi peribadi anda, anda boleh menyesuaikan rekabentuk rumah, tata letak, sistem bekalan air dan elektrik, dan sebagainya, bagi membina rumah ideal dan eksklusif untuk anda. Kami telah merekabentuk dan membina saluran paip bekalan air dan kabel elektrik sebelum pembinaan bermula, seterusnya mengelakkan kerja berulang dan mengambil masa lama untuk menata semula paip air dan kabel elektrik selepas pemasangan dalaman, serta meningkatkan keberkesanan dan kualiti pemasangan dalaman. Anda boleh memilih daripada pelbagai penyelesaian rekabentuk dalaman untuk ruang tamu, ruang makan, bilik tidur, dapur, dan banyak lagi. Kehidupan berkualiti bermula dari Apple House! Apple House merupakan kawasan yang unik! Rumah kontena, jadikan kehidupan harian anda lebih selamat dan selesa! Komponen strukturalnya semuanya dibuat secara pra-pabrik di kilang. Dengan memilih dimensi, konfigurasi dan rekabentuk yang sesuai, anda boleh membina ruang hidup anda dengan cepat. Berdasarkan keperluan dan preferensi pelanggan, pelbagai modul boleh digabungkan untuk mencipta pelan lantai yang berbeza bagi bilik-bilik seperti dapur, pelan lantai rumah kontena dan bilik tidur. Perkara yang paling penting ialah rumah kontena kami mudah dipasang dan dikelupas, strukturnya stabil, prestasinya cemerlang—seperti kalis air, kalis lembap, dan kalis api—serta proses pemasangannya ringkas dan mudah dikendalikan tanpa memerlukan kemahiran teknikal tertentu. Rumah kontena yang kami bina direka khas untuk memenuhi keperluan anda, sama ada sebagai kediaman peribadi, pejabat sementara, storan, atau tujuan lain. Kini adalah masa yang tepat untuk membeli bilik kontena dan mendapatkan harga yang lebih rendah serta perkhidmatan pelanggan yang penuh perhatian. Tingkatkan kualiti hidup anda dengan membeli bilik kontena! Rumah pra-fabrikasi mempunyai rekabentuk struktur khusus dan mempunyai pelan lantai rumah kontena yang baik untuk menjamin keselamatan. Rekabentuk modular dan pemasangan yang mudah diangkut, serta boleh disesuaikan mengikut preferensi peribadi anda dari segi gaya dan jenis bilik yang berbeza. Semua komponen telah dipra-fabrikasi dan mudah dipasang, tanpa memerlukan kemahiran khas. Sama ada ia dimaksudkan untuk pejabat, tempat tinggal, storan, atau kegunaan lain, rumah pra-fabrikasi ini mampu memenuhi keperluan anda. Rupa yang bergaya, garis-garis yang licin, serta keupayaan untuk disesuaikan mengikut preferensi anda bagi mencipta ruang hidup yang unik. Yang paling penting, rumah pra-fabrikasi tidak memerlukan pengimpalan di tapak, dan kami juga menyediakan arahan pemasangan untuk menjadikan proses pemasangan anda lebih mudah dan lebih cepat. Jadilah sebahagian daripada kehidupan yang lebih baik bersama rumah pra-fabrikasi Chengdong. Rumah pra-fabrikasi Chengdong. Rumah lipat menggunakan reka bentuk terbuka yang boleh disusun mengikut keperluan anda untuk meningkatkan pengeluaran dan membantu menjadikan kawasan kediaman anda lebih selamat, stabil dan selesa. Bilik ini boleh digabungkan mengikut pelbagai cara untuk memenuhi keperluan yang berbeza, membolehkan anda tinggal di ruang yang selesa di mana sahaja dan bila-bila masa sahaja. Pelan lantai rumah kontena! Penghantaran dan pengepakan adalah sangat pantas. Kami mempunyai pasukan pengepakan yang mahir yang akan mengikut keperluan anda dalam mengepak bilik lipat supaya anda menerima produk terbaik. Semasa penghantaran produk, kami juga akan memantau setiap langkah proses tersebut supaya produk sampai ke destinasi dengan selamat. Yang paling penting, bilik ini boleh dilipat dengan mudah untuk dibina tanpa memerlukan pelan lantai rumah kontena. Kami juga menyediakan panduan pemasangan untuk menjadikan pemasangan anda lebih cepat dan cekap. Apabila anda mengikuti langkah-langkah yang dinyatakan dalam arahan, anda akan dapat menyelesaikan pemasangan rumah boleh lipat anda. CDPH memproduksi dan menjual pelbagai jenis rumah modul, rumah prefabrikasi dan rumah villa. Julat produk yang luas memastikan kami menyediakan penyelesaian yang sesuai untuk setiap kem kejuruteraan.Pelan lantai rumah kontena
Pelan lantai rumah kontena

Pelan Lantai Rumah Kontena untuk Setiap Gaya Hidup

Terokai Pelan Lantai Rumah Kontena

Reka Rumah Impian Anda dengan Pelan Lantai Kontena
Why choose CDPH
Pelan lantai rumah kontena?
Gaya Moden apple cabin
Kontena Rumah Penjualan Baik
Kedatangan baharu rumah prefab
Rumah lipat berkualiti tinggi
Tidak jumpa apa yang anda cari?
Minta Sebut Harga Sekarang
Hubungi konsultan kami untuk lebih banyak produk yang tersedia.Hubungi Kami
27+ Tahun Pengalaman
Pembinaan Kem Kejuruteraan