mga prefab na bahay ay puwedeng-puwede na! Ang mga bahay ay super n...">
,需要通过父级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);
}
});
})();
Naghahanap ka ba ng bahay na madaling makuha at hindi masyadong mahal? Sa biyaya, covered ka ng CDPH — mga bahay na prefab ay handa nang kunin! Napakalinis din ng mga bahay dahil hindi namin kailangang gawin ang bawat piraso; umiiral na ito nang buo at kailangan lamang i-assembly—parang puzzle! Alamin sa ibaba kung bakit dapat mong isipin na bilhin ang mga bahay na prefab na nasa sale mula sa CDPH. Ang pagbili ng isang Prefab House mula sa CDPH ay nagagarantiya sa iyo ng produkto na may pinakamataas na kalidad. Ang aming sasabihin ay ang aming mga bahay ay ginawa ayon sa pinakamataas na pamantayan at itinayo gamit lamang ang pinakamahusay na materyales. Hindi mo kailangang mag-alala tungkol sa patuloy na mga problema tulad ng pagkakalag lag o pangangailangan ng mga repasyon. Bukod dito, ang CDPH ay may malawak na seleksyon ng mga disenyo at istilo na maaari mong piliin, upang matupad ang iyong pangarap na bahay para sa iyong sarili at sa iyong pamilya. Kung ikaw ay isinasaalang-alang na mag-order ng maraming bahay nang sabay-sabay, nagbibigay din ang CDPH ng mga ekonomikal na solusyon para sa mga mamimili na may dami. Ito ay nangangahulugan na may diskwentong 50% bawat bahay, mas malaki ang iyong matitipid. Anuman ang antas ng iyong pakikilahok sa merkado ng pabahay — kung ikaw man ay isang real estate investor na naghahanap ng mga bahay na ipa-flip, o isang developer na nagtatayo ng isang buong bagong komunidad nang isang beses lang — tinitiyak ng CDPH na mayroon silang eksaktong uri ng ari-arian na angkop sa iyo. Maraming mga benepisyo ang pagbili ng isang CDPH prefab na bahay. Ang aming mga bahay ay hindi lamang mataas ang kalidad at abot-kaya kundi lubhang matipid pa. Ang ibig sabihin nito ay maaari mong pagmamay-ari ang isang bagong bahay na sariling-sarili mo nang hindi ginagastos ang lahat ng iyong ekstrang pera. Bukod dito, gusto kong bigyang-diin na nagbibigay ang CDPH ng mga plano sa pagpopondo upang higit na mapadali ang pagbili ng produkto. Sa lahat ng mga bagay na ito, bakit ka pa maninirahan sa ibang lugar sa isang bahay? Ang pagbili bilang isang tagahatid ng mga bahay na pre-fab mula sa CDPH ay nagbubukas sa iyo sa modernong disenyo. Ang aming mga bahay ay malinis, moderno, at perpekto para sa taong naghahanap ng isang kontemporaryong tahanan. Hanapin ang isang bahay na may lahat ng mga katangian at benepisyong gusto mo — sa presyong abot-kaya para sa iyo. Samantalahin ang mga alok na ito at bumili na ng iyong pre-fabricated na bahay sa CDPH ngayon! Pinapanatiling simple at maayos ang proseso ng pagbili ng mga pre-fab na bahay sa CDPH. Kaya't sa halip na pumunta sa ibang lugar matapos ang iyong pagreretiro o lumipat sa isang apartment na inuupahan sa lungsod, pinapadali ng House8080 na mag-online, mag-browse, at ‘mag-order’ ng bahay mismo sa lugar kung saan ka nakaupo. Ibig sabihin, wala nang paulit-ulit na pagpunta sa mga dealer o biglaang balita na dapat mong turuan ang iyong bagong bahay sa loob ng 2 linggo. Tiyak na sa CDPH, mararanasan mo ang ginhawa at kadalian sa pagbili ng mga pre-fab na bahay na on sale online. Kung ikaw ay isang developer o mamumuhunan sa real estate na nagnanais itaas ang antas ng iyong negosyo, suportado ka ng CDPH. Nagbebenta kami ng malawak na iba't ibang uri ng mga bahay na gawa sa pabrika na angkop para sa mga naghahanap ng komportable at abot-kaya nilalukuan. Hindi mahalaga kung ikaw ay nagpapaunlad ng bagong subdivision o nagbe-benta ng mga bahay: may solusyon ang CDPH para sa iyo. Ang presyo ng CDPH laban sa kalidad, kasama ang sariwa at eksklusibong wholesale offer, ay ang pinakamainam na pagpipilian. Ang mga bahay na prefab na ipinagbibili ay itinatayo sa isang modular na pamantayan na maaaring iayos ayon sa mga pangangailangan ng iyong tahanan. Dahil dito, posible ang mas malawakang produksyon at nagiging mas ligtas, matatag, at maaasahan ang iyong tahanan. At parehong oras, ang folding room ay madaling pinauunlad upang matugunan ang iba't ibang pangangailangan sa paggamit, kaya maaari mong maranasan ang komportableng tirahan anumang oras at kahit saan. Mabilis na pagpapadala! Napakabilis ng pagpapadala at pag-iimpake, gumagamit kami ng may karanasan na koponan sa pag-iimpake na sumusunod sa iyong mga kinakailangan sa pag-iimpake ng iyong folding space at tinitiyak na makakatanggap ka ng pinakamahusay na produkto. Sa buong proseso ng pagpapadala, sinusundan din namin ang bawat hakbang upang matiyak na ligtas na nakarating ang mga kalakal sa destinasyon. Ito rin ang pinaka-maginhawang opsyon, dahil madaling i-deploy ang silid nang walang pangangailangan para sa welding sa lugar. Nagbibigay kami ng gabay sa pag-install upang mas mapabilis at mahusay ang iyong pag-install. Basta susundin mo ang mga hakbang na nakasaad sa mga tagubilin, madali mong maisasagawa ang pag-install ng bahay na natatabing. Apple cabin, natatanging hugis, magandang hitsura, nagbibigay ng mas personal na ambiance sa iyong tahanan. Mula sa simpleng moderno hanggang vintage, nag-aalok kami ng iba't ibang estilo at kulay upang matugunan ang iyong mga pangangailangan. Ang prefab houses for sale ay nakatuon sa kagustuhan at hinihiling ng user. Ito ay maaaring i-customize batay sa iyong mga kahilingan. Batay sa iyong personal na nais at kagustuhan, maaari mong baguhin ang estilo ng iyong bahay, layout, tubig at kuryente, at marami pa. Upang makalikha ng perpektong tahanan na tunay na iyo. Naitayo na namin nang maaga ang mga tubo para sa kuryente at tubig, na nakakatulong upang maiwasan ang oras na mauubos sa pagkalkal muli ng mga koneksyon sa kuryente at tubig pagkatapos palamutihan ang bahay, at mapabuti ang kahusayan at kalidad ng dekorasyon. Nag-aalok kami ng iba't ibang layout para sa interior kabilang ang sala, dining room, kuwarto, kusina, banyo, at iba pa. Maaari kang pumili batay sa iyong mga pangangailangan at kagustuhan, upang makabuo ng perpektong tahanan para sa iyo. Buhay na may kalidad, simula pa sa Apple House! Tuklasin ang natatanging kagandahan ng Apple House! Ang prefab na bahay ay may tiyak na disenyo para sa lakas ng istraktura at kayang magbigay ng mahusay na pagganap laban sa lindol upang masiguro ang kaligtasan. Modular na disenyo, madaling transportasyon, at maaaring i-adapt ang pag-install batay sa personal na kagustuhan sa iba't ibang istilo at uri ng kuwarto. Ang lahat ng bahagi ay prefabricated at madaling maisasaayos, walang pangangailangan ng espesyal na kasanayan. Maging ito man ay para sa opisina, tirahan, imbakan, o iba pang sitwasyon, ang mga prefabricated na bahay ay kayang tugunan ang iyong mga pangangailangan. Mga prefab na bahay na on sale, may malalambot na linya, at maaaring i-tailor ayon sa iyong personal na panlasa, upang makalikha ng natatanging living space. Pinakamahusay dito, ang mga prefabricated na bahay ay hindi nangangailangan ng welding sa lugar, at nag-aalok kami ng mga tagubilin para sa pag-install upang mapadali at mapabilis ang proseso. Tangkilikin ang isang mas mahusay na buhay sa pamamagitan ng pagpili ng Chengdong prefab houses. Gawing mas ligtas at komportable ang iyong tahanan sa pamamagitan ng paglalagay nito sa mga container! Ang lahat ng istrukturang elemento ay ginagawa sa mga pabrika. Kapag pinili mo ang angkop na sukat, konpigurasyon, at disenyo, maaari itong matulungan upang mabilis na maipatayo ang iyong tahanan. Batay sa kanilang mga pangangailangan at kagustuhan, maaaring pagsamahin ang ilang mga module upang makabuo ng iba't ibang layout ng silid, tulad ng living room, kusina, o mga bahay na preno (prefab) na ipinagbibili. Ang pinakamahalagang dapat tandaan ay ang aming container house ay madaling i-disassemble at i-assemble, may matatag na istraktura, mahusay na pagganap, gaya ng waterproof, corrosion-proof, anti-corrosion, at fire-proof, at ang pag-install ay madali at simple gamitin nang hindi nangangailangan ng anumang teknikal na kaalaman. Ang mga container home na aming ginagawa ay binubuo para magkasya sa iyong pangangailangan, maging ito man ay para sa pribadong tirahan, pansamantalang opisina, imbakan, o anumang iba pang gamit. Ngayon na ang tamang panahon upang makakuha ng container room at samantalahin ang mas murang presyo, pati na rin ang mas mapagmalasakit na serbisyo sa customer. Paunlarin ang iyong buhay sa pamamagitan ng pagkuha ng isang container room! 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.mga prefab na bahay pang-benta
Tuklasin ang mga benepisyo ng pagbili ng mga bahay na prefab para ibenta sa mapagkumpitensyang presyo

I-unlock ang mga eksklusibong alok sa modernong mga bahay na prefab para ibenta para sa mga mamimili na may dami

Maranasan ang k convenience at kahusayan sa pagbili ng mga bahay na prefab para ibenta online

Itaas ang antas ng iyong negosyo gamit ang aming malawak na seleksyon ng mga bahay na prefab para ibenta
Why choose CDPH
mga prefab na bahay pang-benta?
Mataas na kalidad na bahay na maaaring mag-fold
Modern Style apple cabin
Bagong dating prefab house
Mabuting Benta ng container 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