atá ag ardú i slí na háirithintí le haghaidh cheannach teach, tá an teach beag bheag bheag...">
,需要通过父级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);
}
});
})();
An bhfuil tú ag lorg dul isteach i dteach nua? A práiseanna tí príomhshraith séimhín ag dul suas sa phríomhshonrú teaghlaigh, tá an teach beag tar éis fáil i láthair mar atá síos rannpháirt mhór den chuid is fearr! Mar sin féin, chuigeanuas; 5 réasún tábhachtacha céard is fíor duit smaoineamh níos faide faoi chruthú d'fho-thithe CDPH. Is lena n-éinne de na fiontarthaí dúchais atá ag teach moideach, go gairid is iongantach iad ná dachaigh stairiúla. Tógtaítear iad sa chainteoir agus is féidir leis na foirne a chuid uile cúiteanna éagsúla a chruthú go tapaidh, gan am a chur ar chur i bhfeidhm. Nuair a bhunátar na cúiteanna sin, is féidir leo a thabhairt go háit a gcóras teastál chuige. Ansin, cuireann na foirne iad gach rud in éineacht le chéile mar phuzzle mór. Is féidir an cineál seo dul chun cinn a shábháil ama agus airgead i gcomparáid le teach iomlán a thógáil ó thaobh. Mar sin tá sé ráite má tá tú ag iarraidh focal faoi do dhaithí nua, bíodh teach moideach againn! Níos fearr rud amháin faoi CDPH tithe beaga príomhshraith go bhfuil siad in ann a chur lena chéile do riachtanais féin. Beidh sult agat ag roghnú idir roinnt roghanna cóga foirne, méid, agus dath (ní bheidh an té a thabharfaidh uait chomh maith leis na hailseataí). Trí thiocfadaigh an tí idealta do d'fheilmíocht féin. Má bhfuil tú cinnte faoi gníomh don domhan, is féidir le tithe módlach a bheith glas freisin: painéal sólair agus insiléire athchóirithe mar shampla eile. In éineacht leis sin is féidir leat an tí do mhuintir a fháil agus cúnamh a thabhairt don domhan. Tá daoine ag rá go bhfuil ama agus airgead, agus is féidir é sin a chur i bhfeidhm freisin sa chás oibre le cabhrú le CDPH talmhaíocht módal ar fáil le haghaidh teach mhodúil a bheith ag déanamh na n-iomlán i gcóras fábrach, níl aon stad ar bith de chineál ar bith le cúpla siar ar an obairoireacht mar atá againn le gairid i bhfeighniúchán traidisiúnta. Is é sin nach mbeidh tú ag fanacht faoi (ná ag cúlú) as ucht fliuch nó sneachta. Ar aghaidh air sin, cuireadh na páirteanna i gcomhléach go hiomlán go tapa ar an suíomh agus is féidir duit dul isteach i do dhome easc ga léi ná mar a bheadh sé súgaithe! Ní hé beartach teach mhodúil; is féidir leo a bheith cinnte stíleach freisin! Le gach díbhriúlacht tá deis agat plé a dhéanamh ar chóipshéal nó ar chóipshéal traidisiúnta nó ar theangaidh idir dá chuid. Agus is cinnte go mbeidh tú ag iarraidh é a thabhairt níos mó le do théama speisialta féin. Agus costanna tí modúla cuirimíd i gcás, tá siad críochnaithe i gcóras fábrach mar sin is féidir leat cainteoiríocht ar an obair a chur i gcás. Goinne, is é sin nach mbeidh do dhome amháin cinnte ach beidh sé críochnaithe chun an t-am a chur i gcás! Go deo, ceann de na n-áiseanna maith faoi tigh beag príomhshraith is é sin go bhfuilimid in ann a bheith spéisiúil agus feidhmíoch ar amharc amháin. San áit seo, lig dom rá roinnt modhanna cruthaitheacha chun do theach a dheimhniú mar gheall air sin, go mbeidh sé ag tabhairt faoi deara duit go maith. Is féidir leat é a dhéanamh chomh simplí sin nó níos córasach, cosúil le plán fola oscailte a chur i bhfeidhm, cinnteacht a thabhairt don teach go mbeidh sé níos spásach agus níos fáilte. Tá seans agat cinntiú go mbeidh do theach módlachta ina suíomh oibreacha agus spéisiúil gan iarracht ar bith. Cabin Apple, cruth uathúil, taispeáint álainn, a dhéanann do bhaile níos pearsanta. Ó bhun-ghnáthú na linne reatha go dtí an stíl seanduine tá raon leathan stíleanna agus dathanna ar fáil a chuirfidh le do rogha stíle. Tá Beijing Chengdong ag fócas ar iarratais an úsáideora, agus is féidir é a chur in oiriún le do rogha. De réir do mian féin agus do rogha is féidir leat an stíl, an t-eagar, an t-uisci agus an leictreachas srl. a mhodhnú sa teach modúil. Chun teach a chruthú atá go hiomlán pearsanta duit. Tugann réamh-mheascadh na gcearbhaill leictreachais agus uisce deis dúinn an próiseas fada a sheachaint a bhíonn ag teastáil nuair a athshocráimíd na cearbhaill tar éis an tí a adhmadh, rud a mhéadaíonn éifeachtacht agus calaí an adhmaid. Is féidir leat roghnú ó raon leathan réitigh deartha istigh don limistéar cónaithe, don limistéar ithe, don leaba, don seomra folctha, agus don chócaireacht agus na seomraí folctha. Saol ar ardchaile, sa Teach Apple! Tar agus bain triail as an gceol uathúil a thugann an Teach Apple! Tír chomhluadair, cinntigh do shábháilteacht agus déan do shaol níos comhfhreastalaí! Úsáideann muid dearadh modúlaigh chaighdeánach, agus tá gach comhpháirt struchtúrtha ar fáil mar chomhpháirteanna tí modúlaigh leis an méid agus an t-earraí ceart, ionas go bhféadfá go héasca spás a thógáil a bheidh oiriúnach do riachtanais. De réir riachtanais agus roghanna an chustaiméara, is féidir modúil éagsúla a chur le chéile chun earraí éagsúla a chruthú do sheomraí cosúil le cistin, spás beo agus leaba. Is é an pointe is tábhachtaí le tabhairt faoi deara go bhfuil an tír chomhluadair a úsáideann muid éasca a dhíchumail agus a chur le chéile mar struchtúr daingean, le feidhmíocht shárchaighdeánach mar uisce-dhíobháilte, coirr-ghabháilte, an-choirr-ghabháilte agus cosaint ó thine; agus is éasca agus simplí an próiseas suiteála a bhainistiú, gan bheith ag teastáil as saineolas teicniúil speisialta. An bhfuil sé do phríomhúsáid pearsanta, do stóráil, do oifig sealadach nó do riachtanais eile? Tá ár dtíthe réamhthógáilte chomhluadair deartha chun do riachtanais a chomhlíonadh. Seo an t-am ceart chun seomra comhluadair a fháil agus buntáiste a ghlacadh as prís níos faoiniú agus seirbhís chustaiméara cuimhneach. Déan do shaol níos fearr trí spás comhluadair a cheannach! Is iad na tithe réamhghníomhaithe ná tithe le dearadh modúil a chuirtear le chéile agus nach bhfuil aon eolas speisialta riachtanach acu. Is iad seo oiriúnach do oifig, do chónaí, do stóráil nó do aon aidhm eile. Deartha ar chóras módúlach é an teach sclábhaigh, is féidir é a chumrú de réir riachtanasacha do theach féin. Cuireann sé seo in iúl teach deartha ar chóras módúlach agus déanann sé do theach níos slándála, níos stadta agus níos slándála. Is féidir an seomra a chombhaineáil le seomraí eile chun riachtanasanna éagsúla a chur in iúl, rud a chiallaíonn gur féidir leat maith lá a chaithfidh tú ann agus i gcónaí. Seachadadh tapaidh! Soláirimid freisin seirbhís pacaíochta agus seachadta tapa. Déanfaidh ár bhfoireann pacaíochta samhail pacaíocht do d’fhreastalaí de réir riachtanas. Beimid ag faireamh ar gach céim den phróiseas seachadta chun cinntiú go mbíonn do mhíreanna sábháilte ag an sprioc. An cuid is fearr ná go bhfuil sé éasca teacht ar an teach sclábhaigh gan ghleasadh in locco, agus soláirimid treoracha suiteála chun do phróiseas suiteála a dhéanamh níos tapa agus níos éadroime. Má leanann tú gach céim den treoir agus na céimeanna, beidh tú in ann críochnú ar thógáil do theach a sclábhaíonn. 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.Teach díograiseach
Táithí Fostaíoch agus Íor-Phríobháideach

Buntáistí Amhráin le Tithíocht Ghnáthchórais

Scéimeanna Díomhaoiniúla don Tithíocht Gnáthchórais

Tithíocht Gnáthchórais Stailéilte agus Feidhmeach
Why choose CDPH
Teach díograiseach?
Stíl Módarnach cabin apple
Seomra díograis Maith
Nua-éagsúil teach réadaithe
Folláin ardchaighdeán
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