μας προσφέρουν ακριβώς αυτό.">
,需要通过父级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);
}
});
})();
Στην CDPH, αντιλαμβανόμαστε τη σημασία της απλής αλλά γρήγορης εγκατάστασης όσον αφορά τις έτοιμες κατοικίες. Οι λύσεις έτοιμης κατασκευής κατοικιών θα σας έχουν έτοιμους και λειτουργικούς σε ελάχιστο χρόνο, εξοικονομώντας πολύτιμους πόρους τόσο στο κόστος εργασίας όσο και στα υλικά· οι μοντουλωτές λύσεις παράγουν μια ανθεκτική κατασκευή η οποία θα αντέξει σχεδόν σε όλες τις ακραίες καιρικές συνθήκες. Όταν πρόκειται για προκατασκευασμένα σπίτια, ο χρόνος είναι αποφασιστικής σημασίας. Τα μοντάριστα κτίριά μας μπορούν να ανεγερθούν και να αποσυναρμολογηθούν γρήγορα επί τόπου, εξοικονομώντας έτσι χρήματα από τη διάρκεια της κατασκευής και την απώλεια λειτουργίας. Η εγκατάσταση είναι επίσης αρκετά απλή, με οδηγίες συναρμολόγησης εύκολες στην ακολουθία και προκατασκευασμένα κομμάτια. Είτε ψάχνετε για ένα προσωρινό απομονωμένο γραφείο στο σπίτι σας είτε για την τοποθεσία ενός νεοεμφανιζόμενου κατασκευαστικού έργου, οι προσκομιστά σπίτια μπορείτε να το έχετε έτοιμο και λειτουργικό σε ελάχιστο χρόνο. Τα προκατασκευασμένα σπίτια δεν είναι απλώς οικονομικά σπίτια, αλλά μια έξυπνη επιλογή κατοικίας. Η CDPH παρέχει ελκυστικά, οικονομικά και γρήγορα στη συναρμολόγηση προκατασκευασμένα σπίτια, τα οποία είναι ιδανικά για κύρια χρήση, συμπεριλαμβανομένων αλλά όχι μόνο των κατοικιών, της προσωρινής κατοικίας και των εμπορικών κτιρίων. Τα καμπίνια μας κατασκευάζονται με λογικό προϋπολογισμό και παρ' όλα αυτά είναι ανθεκτικά. Επιλέγοντας προκατασκευασμένα σπίτια από την CDPH, μπορείτε να εξοικονομήσετε κόστος κατασκευής και να αποκτήσετε μια ανθεκτική και άνετη κατοικία. Οι σχεδιασμοί προκατασκευασμένων σπιτιών έχουν προχωρήσει πολύ τα τελευταία χρόνια, μαζί με σύγχρονες τάσεις. Στην CDPH, βρισκόμαστε πάντα σε συνέχεια με τις τρέχουσες τάσεις σχεδιασμού για να προσφέρουμε στους πελάτες μας μοντέρνα και ελκυστικά μοντάριστα σπίτια. Με μια ποικιλία επιλογών, παρουσιάζουμε τα τελευταία νέα στον σύγχρονο σχεδιασμό, συμπεριλαμβανομένων υλικών όπως το οικονομικό σύστημα κρεβατιού τοίχου clei, φιλικό προς το περιβάλλον μπαμπού και αρκετά ξύλα υψηλής ποιότητας. Για περισσότερες πληροφορίες σχετικά με αυτούς τους σχεδιασμούς, καλέστε ένα από τα καταστήματά μας. Είτε ενδιαφέρεστε για ένα από τα τυποποιημένα σχέδια προκατασκευασμένων σπιτιών μας είτε για ένα προσαρμοσμένο σχεδιασμό, διαθέτουμε τα κατάλληλα προκατασκευασμένα σπίτια για να καλύψουν τις ανάγκες σας. Υπάρχουν αρκετά πράγματα που πρέπει να λάβετε υπόψη σας κατά την αγορά έτοιμων κατοικιών, ώστε να επιλέξετε την ιδανική λύση για την κατάστασή σας. Στην CDPH, συνιστούμε στους πελάτες μας να λαμβάνουν υπόψη τον προϋπολογισμό, το χρονοδιάγραμμα, την τοποθεσία και αυτό που αναζητούν κατά την αγορά μιας έτοιμης κατοικίας. Από προσαρμοσμένο σχέδιο ή τυποποιημένο μοντέλο, συνεργαζόμαστε με τους πελάτες μας σε όλη τη διαδικασία, ώστε να διασφαλίσουμε ότι θα παρέχουμε το σύστημα που αναμένετε. Αν λάβετε υπόψη όλους τους παράγοντες, μπορείτε να λάβετε μια ενημερωμένη απόφαση και να αγοράσετε μια έτοιμη κατοικία που ίσως να είναι ο καλύτερός σας φίλος τις επόμενες δεκαετίες. Το προκατασκευασμένο σπίτι υιοθετεί ειδικό σχεδιασμό για την αντοχή της κατασκευής και παρέχει άριστη σεισμική απόδοση για να διασφαλίσει την ασφάλεια. Ο μοντέρνος σχεδιασμός επιτρέπει εύκολη μεταφορά, ενώ η εγκατάσταση μπορεί να προσαρμοστεί σύμφωνα με τις προσωπικές σας προτιμήσεις όσον αφορά διαφορετικούς σχεδιασμούς, στυλ και τύπους δωματίων. Όλα τα εξαρτήματα κατασκευάζονται εκ των προτέρων και τοποθετούνται εύκολα, χωρίς να απαιτούνται ειδικές δεξιότητες. Είτε πρόκειται για γραφείο, κατοικία, αποθήκευση ή οποιαδήποτε άλλη χρήση, το προκατασκευασμένο σπίτι μπορεί να καλύψει τις ανάγκες σας. Σύγχρονη εμφάνιση, ομαλές γραμμές και δυνατότητα προσαρμογής σύμφωνα με τις προσωπικές σας αισθητικές προτιμήσεις, προκειμένου να δημιουργήσετε το τέλειο χώρο διαβίωσης. Το καλύτερο όλων είναι ότι τα προκατασκευασμένα σπίτια δεν απαιτούν συγκόλληση επιτόπου, ενώ παρέχουμε οδηγίες εγκατάστασης για να καταστήσουμε την εγκατάστασή σας ευκολότερη και ταχύτερη. Αγκαλιάστε την καλύτερη ζωή που μπορείτε να έχετε, επιλέγοντας προσιτά προκατασκευασμένα σπίτια. Το αναδιπλούμενο σπίτι ακολουθεί μια οικονομική προκατασκευασμένη λύση, η οποία μπορεί να διαταχθεί σύμφωνα με τις ανάγκες σας, προκειμένου να αυξηθεί η παραγωγικότητα και να καταστεί ο χώρος διαβίωσής σας πιο ασφαλής, σταθερός και αξιόπιστος. Το δωμάτιο μπορεί να διαταχθεί κατά τρόπο που να ικανοποιεί διαφορετικές απαιτήσεις, γεγονός που σημαίνει ότι μπορείτε να αισθάνεστε άνετα οπουδήποτε και οποτεδήποτε. Γρήγορη παράδοση! Η αποστολή και η συσκευασία είναι εξαιρετικά γρήγορες. Απασχολούμε μια εξειδικευμένη ομάδα συσκευασίας, σύμφωνα με τις προδιαγραφές σας, για τη συσκευασία του αναδιπλούμενου δωματίου, ώστε να λάβετε προϊόν υψηλότατης ποιότητας. Παρακολουθούμε όλες τις διαδικασίες παράδοσης για να διασφαλίσουμε ότι τα είδη σας φτάνουν ασφαλώς στον προορισμό τους. Πιο σημαντικό απ’ όλα, το αναδιπλούμενο δωμάτιο είναι εύκολο στην εγκατάσταση, χωρίς ανάγκη συγκόλλησης επιτόπου, και παρέχουμε οδηγίες εγκατάστασης για να καταστήσουμε τη διαδικασία εγκατάστασής σας ταχύτερη και ευκολότερη. Εάν ακολουθήσετε τις οδηγίες, η συναρμολόγηση του αναδιπλούμενου σπιτιού είναι απλή. Σπίτι από εμπορευματοκιβώτιο, κάντε τη ζωή σας πιο ασφαλή και άνετη! Όλα τα δομικά στοιχεία κατασκευάζονται εκ των προτέρων σε εργοστάσιο. Με την επιλογή των κατάλληλων διαστάσεων, διαμόρφωσης και σχεδιασμού, μπορείτε να κατασκευάσετε τον χώρο διαβίωσής σας γρήγορα. Βάσει των απαιτήσεων και των προτιμήσεων του πελάτη, τα διάφορα μοντέλα μπορούν να συνδυαστούν για να δημιουργήσουν διαφορετικές διαρρυθμίσεις χώρων, όπως κουζίνα, οικονομικά προκατασκευασμένα σπίτια και υπνοδωμάτια. Το σημαντικότερο είναι ότι το σπίτι μας από εμπορευματοκιβώτιο είναι απλό στην αποσυναρμολόγηση και συναρμολόγηση, διαθέτει σταθερή δομή και εξαιρετική απόδοση, όπως αδιάβροχο, ανθεκτικό στην υγρασία, αντιπυρικό, ενώ η διαδικασία εγκατάστασης είναι απλή και εύκολη στη διαχείριση, χωρίς να απαιτείται κανένα επίπεδο τεχνικής εμπειρίας. Τα σπίτια από εμπορευματοκιβώτιο που κατασκευάζουμε είναι προσαρμοσμένα στις ανάγκες σας, είτε πρόκειται για ιδιωτική κατοικία, προσωρινά γραφεία, αποθήκευση ή οποιοσδήποτε άλλος σκοπός. Έφτασε πια η ώρα να αγοράσετε ένα δωμάτιο-κιβώτιο και να λάβετε ταυτόχρονα χαμηλότερη τιμή καθώς και προσεκτική εξυπηρέτηση πελατών. Βελτιώστε τη ζωή σας αγοράζοντας ένα δωμάτιο από εμπορευματοκιβώτιο! Καμπίνα σχήματος μήλου, μοναδικό σχήμα, όμορφη εμφάνιση, κάνοντας το σπίτι σας πιο προσωπικοποιημένο. Διαθέτουμε μια ποικιλία χρωμάτων και στυλ, προκειμένου να καλύψουμε τις αισθητικές σας ανάγκες — από το βασικό σύγχρονο έως το βιντέζ. Η εταιρεία Beijing Chengdong επικεντρώνεται στις ανάγκες των χρηστών και προσφέρει εξατομικευμένες λύσεις για να ικανοποιήσει τις συγκεκριμένες σας απαιτήσεις. Μπορείτε να δημιουργήσετε το σπίτι των ονείρων σας ρυθμίζοντας τη διάταξη, την ηλεκτροδότηση και την υδροδότηση, το σχήμα και άλλα χαρακτηριστικά οικονομικών προκατασκευασμένων κατοικιών, σύμφωνα με τις προτιμήσεις σας. Προκατασκευάζουμε τους αγωγούς ύδρευσης και ηλεκτροδότησης πριν από την κατασκευή, αποφεύγοντας έτσι την επίπονη διαδικασία επαναδιαμόρφωσης των ηλεκτρικών και υδραυλικών εγκαταστάσεων μετά τη διακόσμηση του σπιτιού, και βελτιώνοντας την αποδοτικότητα και την ποιότητα της διακόσμησης. Μπορείτε να επιλέξετε ανάμεσα σε μια σειρά λύσεων εσωτερικής διακόσμησης για το σαλόνι, την τραπεζαρία, το υπνοδωμάτιο, το μπάνιο, την κουζίνα και πολλά άλλα. Μια ποιοτική ζωή, από το «Σπίτι Μήλο»! Έλθετε και απολαύστε τη μοναδική έκπληξη του «Σπιτιού Μήλου»! CDPH κατασκευάζει και πωλεί διάφορους τύπους μοντουλάριο σπίτια, Prefab house και Villa house. Ευρύ φάσμα προϊόντων μας εξασφαλίζει να προσφέρουμε κατάλληλη λύση για κάθε στρατόπεδο έργου.Διαθέσιμες οικίες prefab
Εύκολη και γρήγορη εγκατάσταση προκατασκευασμένων σπιτιών

Προσιτά προκατασκευασμένα σπίτια για κοινή χρήση

Οι κορυφαίες τάσεις στο σχεδιασμό προκατασκευασμένων σπιτιών

Τι πρέπει να λάβετε υπόψη σας όταν αγοράζετε προκατασκευασμένα σπίτια
Why choose CDPH
Διαθέσιμες οικίες prefab?
Νέα φθάση προεγκατασκευασμένου σπιτιού
Υψηλής ποιότητας συμπιεστικό σπίτι
Καλά πωλούμενο σπίτι-παραγγελίας
Σύγχρονος Στυλ apple καμπίν
Σχετικές κατηγορίες προϊόντων
Δεν βρίσκετε αυτό που ψάχνετε;
Ζητήστε Προσφορά Τώρα
Επικοινωνήστε με τους συμβούλους μας για περισσότερα διαθέσιμα προϊόντα.Επικοινωνήστε μαζί μας
27+ Χρόνια Εμπειρίας
Κατασκευή Στρατοπέδου Έργου