? Maaaring kakaiba sa umpisa, ngunit ang mga container na maliit na bahay ay naging uso...">
,需要通过父级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);
}
});
})();
Naisip mo na ba na tirahan ang isang bahay na gawa mula sa isang Mataas na Kwalidad na Bahay sa Kubo ? Mukhang kakaiba sa umpisa, ngunit ang mga munting bahay na gawa sa container ay isang uso na kumakalat sa buong mundo. Ang mga indibidwal na bahay na ito ay murang gastos, eco-friendly, at moda rin. Sa mga kamakailan lamang, ang mga bahay na gawa sa container ay nagsisimulang lumitaw bilang isang makabagong alternatibong tirahan. Unti-unti nang nabibigyang-pansin ang konsepto ng pagpapalit ng gamit na shipping container sa mga tahanan, at nagsisimula nang maunawaan ng mga tao ang halaga nito. Habang tumataas ang gastos sa tradisyonal na bahay at habambuhay na tirahan, at habang mas maraming tao ang pumipili ng mas maliit na espasyo, ang mga munting bahay na gawa sa container ay lalong nagiging popular. Ang mga bahay na gawa sa container ay nagbabago sa paraan ng pagmamay-ari ng tao sa kanilang ari-arian. Ang mga munting bahay na ito ay mainam para sa sinuman na nagnanais mabuhay nang mas minimalist o kaya'y nagnanais lamang ng hindi hihigit sa dalawang kuwarto. Ang mga munting bahay na gawa sa container ay may kakayahang i-customize ang layout sa loob at labas, at muli nilang binibigyang-kahulugan ang pagmamay-ari ng isang tahanan. Malaki nang narating ng mga bahay na gawa sa container mula nang una silang magdulot ng rebolusyon sa industriya ng pabahay. Ang dating nasa nukli ng alternatibong pamumuhay ay naging isang makatwirang opsyon na para sa maraming tao. Patuloy na hinahangaan ng mga designer at arkitekto ang ideya ng mga bahay ng mga container sa pagpapadala , mga bahay na shipping at mga modular na bahay sa pangkalahatan. Mula sa off-grid na cabin hanggang sa mga luxury na munting bahay, ang container living ay may maraming direksyon na sinusundan na kasing dami ng uri ng mga container. Ang estilo at kaginhawahan ng isang luho ay hindi isinasakripisyo dahil sa limitadong espasyo. Isa sa mga USP ng modular na bahay ay maaari itong i-tailor upang matugunan ang indibidwal na pangangailangan at panlasa ng may-ari. Bukod dito, ang mga munting bahay na gawa sa container ay karaniwang mas mura kaysa sa tradisyonal na mga bahay na maaaring mainam para sa mga naninirahan na may budget na isipin. Kabinete ng Apple, natatanging hugis, magandang anyo, nagpapaganda sa iyong tahanan at nagbibigay-daan para maging mas personal ito. Mula sa moderno at simple hanggang sa vintage, nag-ooffer kami ng iba't ibang istilo at kulay na sumasakop sa iyong mga kagustuhan. Ang Beijing Chengdong ay nakatuon sa mga pangangailangan ng gumagamit at maaaring i-customize upang tugunan ang iyong partikular na kailangan. Ayon sa iyong sariling panlasa at kahilingan, maaari mong baguhin ang istilo ng iyong bahay, layout, tubo ng tubig at kuryente, atbp., upang makabuo ng perpektong tahanan na natatangi lamang sa iyo. Ang pre-fabrication ng mga linya ng kuryente at tubig ay nagpapahintulot sa amin na i-skip ang mahirap na proseso ng pagbabago ng mga tubo kapag naka-container na ang maliit na bahay, na nagpapataas ng kahusayan at kalidad ng dekorasyon. Maaari kang pumili mula sa malawak na hanay ng mga solusyon sa interior design para sa iyong living area, dining room, bedroom, bathroom, kitchen, at marami pa. Apple House – Kalidad ng pamumuhay sa pinakamahusay na paraan! Tuklasin ang natatanging charm ng Apple House! Ang nakabukid na bahay ay batay sa mga maliit na bahay na gawa sa konteiner ng isang tradisyonal na bahay, na maaaring idisenyo ayon sa iyong mga kailangan, maisakatuparan ang pangkalahatang produksyon, at gawing mas ligtas, matatag, at secure ang iyong kapaligiran sa paninirahan. Ang silid ay maaaring gamitin sa paraan na kayang tugunan ang iba't ibang pangangailangan, ibig sabihin, maaari kang magpamuhay nang komportable kahit saan at kahit kailan. Mabilis na paghahatid! Ang pagpapakete at paghahatid ay mabilis din, dahil kami ay gumagamit ng mga propesyonal sa aming koponan sa pagpapakete, na sumusunod sa iyong mga kailangan sa pagpapakete ng nakabukid na silid at nagtiyak na makakatanggap ka ng produkto na may pinakamataas na kalidad. Susundin namin ang bawat hakbang ng proseso ng paghahatid upang matiyak na ang iyong mga produkto ay nararating sa kanilang destinasyon nang ligtas at secure. Ang nakabukid na bahay ay maaaring itayo nang walang welding sa lugar ng konstruksyon, at binibigay namin ang mga instruksyon sa pag-install upang gawing mas mabilis at madali ang proseso. Kung susundin mo ang mga hakbang sa mga instruksyon, madali mong matatapos ang pag-install ng bahay na nakabukid. Gawin ang iyong tahanan na mas ligtas at komportable sa pamamagitan ng pag-install ng isang container house! Ang lahat ng istruktural na bahagi ay prefabricated sa isang pabrika. Sa pamamagitan ng pagpili ng tamang sukat, konpigurasyon at istilo, maaari mong likhain ang iyong espasyo para sa pananahan nang mabilis. Ayon sa kanilang mga pangangailangan at kagustuhan, maaaring isama ang ilang mga module sa iba't ibang layout ng kuwarto upang makabuo ng multi-functional na container tiny homes tulad ng living room, kitchen o bedroom. Ang pinakamahalagang dapat tandaan ay ang container house na ginagamit namin ay madaling i-disassemble at i-assemble, may matibay na istruktura, at may mahusay na pagganap—tulad ng waterproof, anti-panlilipat ng tubig, pag-iwas sa sunog—at ang proseso ng installation ay madali at simple na pangasiwaan, na walang kailangang espesyal na teknikal na ekspertise. Para sa personal na pananahan, imbakan, pansamantalang opisina, o iba pang layunin, ang mga prefab container houses ay idinisenyo upang tumugma sa iyong mga pangangailangan. Samantalahin ang isang box room ngayon, tamasahin ang mas magandang presyo at mas mahusay na serbisyo—pagbutihin ang iyong pamumuhay! Ang mga maliit na bahay na gawa sa kontainer ay binuo gamit ang natatanging disenyo para sa kahusayan ng istruktura at kakayahang magbigay ng mahusay na pagganap laban sa lindol upang matiyak ang kaligtasan. Modular ang disenyo, madaling ilipat, at ang pag-install ay maaaring i-adapt batay sa personal na panlasa sa iba't ibang istilo at uri ng kuwarto. Lahat ng bahagi ay gawa sa pre-fabricated na materyales at madaling i-install nang hindi nangangailangan ng espesyal na kasanayan. Kung gagamitin man ito bilang tirahan, opisina, imbakan, o sa iba pang sitwasyon, ang pre-fabricated na bahay ay kayang tugunan ang iyong mga pangangailangan. Estilong itsura, manipis at maayos na mga linya, at maaaring i-customize batay sa iyong sariling panlasa upang lumikha ng natatanging espasyo para sa pamumuhay. Pinakamahusay pa rito, ang mga pre-fabricated na bahay ay hindi kailangang i-weld sa lugar ng pag-install, at bibigyan ka rin namin ng mga instruksyon sa pag-install upang gawing mas simple at mas mabilis ang proseso ng iyong pag-install. Tangkilikin ang pinakamabuting buhay na maaari mong maranasan at piliin ang mga pre-fabricated na bahay ng Chengdong. Ang CDPH ay nagmamaneho at nagbebenta ng iba't ibang uri ng modular na bahay, prefab na bahay at villa house. Ang malawak na saklaw ng mga produkto ay nagpapatakbo sa amin upang magbigay ngkoponente solusyon para sa bawat engineering camp.container maliit na bahay
Ang Pag-usbong ng Container Tiny Homes bilang Modernong Solusyon sa Pabahay

Paano Hinahamon ng Container Tiny Homes ang Industriya ng Real Estate

Ang Ebolusyon ng Container Tiny Homes

Ang Pakinabang ng Container Tiny Homes para sa mga Naninirahan sa Lungsod Ngayon
Why choose CDPH
container maliit na bahay?
Modern Style apple cabin
Mataas na kalidad na bahay na maaaring mag-fold
Mabuting Benta ng container house
Bagong dating prefab house
Mga kaugnay na kategorya ng produkto
Hindi makahanap ng hinahanap?
Humiling ng Quote Ngayon
Makipag-ugnay sa aming mga konsultant para sa iba pang mga produkto.Makipag-ugnayan
27+ Taon Ng Kagandahang-loob
Pagtatayo ng Engineering Camp