atá freisin comhtháite do ár nDlúth. Tugaimid ár...">
,需要通过父级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);
}
});
})();
Ag CDPH, táimid tiomanta le tógáil tithe fóirneacha a bhfuil sé sin comhlachtach freisin don phlanaid. Forbraímid ár gcraobh réamhmhonraithe leis an gcustaiméir eacológach i gceann, lena n-áiritear míreanna comhlachtacha agus cleachtais ar fud. Mar sin, bíodh suaimhneas croí agat go bhfuil cinneadh timpeallachtaí freagrach tagtha chugat le teach réamhmhonraithe ó CDPH. Neamhaird má’ch raibh críochnú réamhmhonraithe a roghnaíonn tú trí Stillwater Dwellings, beidh gach ceann acu ag roinnt mar aon mhíreanna ardchaighdeáin agus duineoireachta. Tá comhoibriú ann le e.c. ó thaithí ardchaighdeáin agus saothair gach ceann de na teachta réamhfhabricithe ó CDPH. Bíonn clú ar ár n-uchtóirí talantúla agus taithí ar shaothar ardchaighdeáin do gach teach. Bígí cinnte, déantar do theach réamhfhabricithe CDPH chun seasamh suas faoi bhruthach an ama ón bhun go barr! An bhfuil tú ag lorg baile nua agus an bhfuil suim agat le ceann de na háiteanna réamhmhonraithe i gCalifornia ó CDPH? Is é aon cheann de na rudaí móra maidir le roghnú teach réamhmhonraithe, go háirithe iad siúd i gCalifornia a thógadh CDPH, ná go bhféadfadh go leor roghanna a bheith saincheaptha chun do stíl a mheaitseáil. Is féidir linn do thuisceana a dhearbháil leat, ag tabhairt faoi le haghaidh stíleanna níos nua-aimseartha nó traidisiúnta ar an taobh amuigh, chun an grádachta atá uait a mhíniú. Athruithe ar an leagan amach, go dtí na críochnuithe, cuirfidh sé seo cumas ort do theach réamhmhonraithe CDPH a dhéanamh do chuid féin i ndóigh fíor. Tagann dearbhúchán teach réamhmhonraithe CDPH ag ráta éagsúil , is modh costas-éifeachtach agus éifeachtach in aeráid é. Ár dteachanna áirithimid painéalacha ghrianacha, inneallaithe éifeachtacha i ngairm, agus doirse Frainc theilíseáilte, rud a chiallaíonn go sábhálfaidh tú ar úsáid na slándála. Is féidir beatha a bheith soiléir agus caoiniúil ar an gcomhshaoil a bheith mar chuid den ainmneoir céanna má roghnaíonn tú teach réamhmhonraithe CDPH. Bainimid úsáid as teicnící tógála tapa agus éifeachtacha i ár gcrích réamhmhonraithe CDPH, ionas go mbeidh tú in ann bogadh isteach go tapa. I gcoinneal le tithe caighdeánacha a thóg míonna nó blianta chun iomlánú, is féidir ár gcraobh réamhmhonraithe a chur suas chomh tapa le cúpla seachtaine amháin. Sin annsin go mbeidh tú in ann bogadh isteach i do theach nua CDPH níos luaithe, ag baint sult as na ballaíocht uile atá ag maoiniú comhlachtach, sláintiúil níos tapa! Títhe réamhghinmheánaí ina bhfuil feidhmíocht fhostaíochta, cruth uathúil, agus taispeántas álainn, rud a dhéanann do thithe níos pearsanta. Ó stíl simplí na linne reatha go dtí stíl sean-aimseartha, tá rogha leathan stíleanna agus dathanna ar fáil againn a bheidh oiriúnach do rogha is fearr leat. Tá Beijing Chengdong dírithe ar riachtanais úsáideoirí agus is féidir an t-inneall a chur in oiriúnú le do riachtanais shonracha. Is féidir leat do theach aisling a dhearbhú trí athrú ar an leagan amach, ar sholáthar an uisce agus an leictreachais, ar an gcruth, agus ar eile a bhaineann le do rogha pearsanta. Cabhraíonn an réamhghinmhéanadh ar línte leictreachais agus uisce linn an próiseas fada a sheachaint de athshocrú na mbonn nuair a dhéantar an teach a adhmadh, ag méadú ar cháilíocht agus ar éifeachtacht an adhmaidhe. Tá rogha leathan roghanna leagan amach istigh againn atá i gceist le seomra cónaithe, seomra bia, seomra codlata, cuisine, seomra folctha, srl. Is féidir leat rogha a dhéanamh de réir do rogha is fearr leat, chun teach idéalach agus uathúil a chruthú duit. Apple House – Cáilíocht sa bheathu i a bhfuil an beannacht! Is ceantar uathúil é Apple House! Tá na tithe réamhghníomhaithe ina n-áisíochtaí fóirte leagtha i mbun mhodúil a chuirtear ar fáil i bhfoirm chumasaigh, agus is féidir é a eagrú de réir riachtanais do thithe. Cuireann sé seo ar fáil an cumas le tithe a tháirgeadh i mblocanna móra, agus cuireann sé sin a thuilleadh slándála, staideachta agus ionadaithe ar do thithe. An am céanna, tá an seomra scuabtha comhdhéanta go soléir chun freastal ar riachtanais úsáide éagsúla, mar sin is féidir leat sult a bhaint as comfhort do thithe ag aon am agus i aon áit. Seoladh tapa! Tá an t-ionspiorad agus an pacáil an-tapa, agus úsáideann muid foireann phacála oiliúnaí le pacáil do shpás scuabtha de réir do riachtanais, agus chun a chinntiú go mbainfidh tú an táirge is fearr. Le linn an t-ionspiorad, bímid ag rianú gach céim den phróiseas freisin chun a chinntiú go mbainfidh na míreanna le hionad ceart go sábháilte. Is é seo an rogha is coitianta freisin, mar is féidir an seomra a scuabhadh go héasca gan bholcánú ar an suíomh. Soláthraímid treoracha suiteála chun do shuiteáil a dhéanamh níos tapúla agus níos éifeachtaí. Ar an gcoinníoll go leanann tú na céimeanna a leagtar amach sa treoir, is féidir leat an t-áisíocht a scuabhadh go héasca a shuiteáil go héasca. Tá na tithe réamhghníomhaithe ina n-úsáid i mbun ag an gcomhlacht seo deartha go speisialta chun láimhseáil neart struchtúrtha agus chun a bheith in ann a bheith ina dtithe slán agus sábháilte i gcás crith talún. Is é an dearadh modúil an t-éileamh is éasca le hiontú, agus is féidir an suiteáil a chur in oiriúint de réir rogha pearsanta an úsáideora maidir le stíleanna éagsúla agus cineálacha seomraí. Tá gach comhábhar déanta as ábhair réamhghníomhaithe agus tá sé éasca iad a shuiteáil gan baint le scileanna speisialta. An bhfuil sé mar spás cónaithe, spás oifige, spás stórála nó aon úsáid eile, is féidir leis an dtiopán réamhghníomhaithe freastal ar do riachtanais. Tá an t-áis cosúil le tiománaíocht, le línte gaothmhar, agus is féidir é a chustaimiú de réir do rogha pearsanta chun spás cónaithe uathúil a chruthú. Is fearr a bheith ag an gcomhlacht seo nach bhfuil riachtanais le himpleabáil ar an suíomh féin, agus cuirimid treoracha suiteála ar fáil chun an próiseas suiteála a dhéanamh níos simplí agus níos tapúla. Glac leis an saol is fearr atá ar fáil agat agus roghnaigh tithe réamhghníomhaithe Chengdong. Tigh coimeádáin: déan do bheith ag maireachtáil níos sláintiúla agus níos comfhoighneach! Tá na comhpháirteanna struchtúrtha uile réamhtháirgeadh i bhfabhrac. Trí rogha a dhéanamh ar na dimensiónaí, an cóimheas agus an dearadh ceart, is féidir do spás beo a thógáil go tapa. Bunaithe ar riachtanais an chliant agus ar a roghanna, is féidir na modúil éagsúla a chomhcheangal chun leagan amach éagsúla a chruthú do sheomraí, lena n-áirítear an cistin, tithe réamhtháirgeadh ina bhfuil tionchar beag ar an timpeallacht agus seomraí codlata. Is é an rud is tábhachtaí gur féidir an tigh coimeádáin a dhíchumasaigh agus a athshocrú go héasca, tá an struchtúr stábla, tá an bhearnaíocht iontach, mar shampla, ina bhfuil cosaint in aghaidh uisce, in aghaidh fliuchta, agus in aghaidh dóiteáin, agus tá an próiseas suiteála simplí agus éasca a bheith faoi smacht, gan leibhéal teicniúil ar bith a bheith ag teastáil. Tógann muid tithe coimeádáin a bheidh oiriúnach do riachtanais, an bhfuil siad le haghaidh tíreolaíochta phríobháideach nó oifigí sealadacha nó stóráil nó aon úsáid eile. Tá an t-am anois ann chun seomra bosca a cheannach, agus gheobhaidh tú prís íseal chomh maith le seirbhís cliant cuí. Fág do shaol níos fearr le ceannach seomra coimeádáin! Tógann agus déanann CDPH den scoth éagsúlta nádúrtha teach, teach príomhphobal agus teach fheist. Rang leathan nádúrtha againn a chuireann ar ár gcumas freastal ar chóras chun gach laghaire a sholáthar.Tithí Réamhthógáilte Inseanacha
Ábhair Ardoíochta agus Cruthaitheacht i ngach Teach Réamhmhonataithe

Roghanna Dearadh Saincheaptha le haghaidh Do Stíl Uathúil agus Riachtanais

Gnéithe Fuinnimh-Eifeachtacha chun Cabhrú Leat Costais Soláthair a Shábháil

Próiseas Tógála Tapaidh agus Éifeachtach le haghaidh Amanna Tapa Isteachchuir
Why choose CDPH
Tithí Réamhthógáilte Inseanacha?
Stíl Módarnach cabin apple
Folláin ardchaighdeán
Nua-éagsúil teach réadaithe
Seomra díograis Maith
Catagóirí Táirge Gaolmhara
An bhfuil tú ag iarraidh rud éigin nach bhfuil tú ag fáil?
Iarratas ar Shárú Anois
Déan teagmháil le haghaidh níos mó táirgí ar fáil leis na comhairlí.BÍ I LÉIGE LIOM
27+ Bliain De Sheirbhís
Buidheacht Laghairse