-ის ბუმი. ხალხი უკვე ძველ სატვირთო კონტეინერებს ცხოვრების სივრცედ აქცევს, რაც ნამდვილად გასაოცარია! ეს კონტეინერული სახლები...">
,需要通过父级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);
}
});
})();
Სიბრმავე Ლუქსის კონტეინერის სახლი ამ დღეებში ხალხი უკვე ძველ სატვირთო კონტეინერებს ცხოვრების სივრცედ აქცევს, რაც ნამდვილად საინტერესოა! ამ კონტეინერულ სახლებს ბევრი უპირატესობა აქვს და ისინი გარემოსდაცვითიც კი არის. მოდით მაშ ასე გადავიდეთ კონტეინერულ სახლებზე! Მიუხედავად იმისა, რომ კონტეინერული სახლები უკვე ხანს იქნებიან არსებობს, ამჟამად ისინი მართლაც პოპულარულობას იძენენ. ამ დღეებში ხალხი გააცნობიერა, რომ ძველი სატვირთო კონტეინერისგან შეიძლება საკმაოდ ლამაზი, უჩვეულო სახლის აშენება. ეს მყარი და გრძელმახვილი კონტეინერები იდეალურ საშენ მასალად აქცევს იმას სახლების აშენებისთვის. Კონტეინერულ სახლებს უამრავი უპირატესობა აქვთ ტრადიციულ სახლებთან შედარებით. პირველ რიგში, ისინი მნიშვნელოვნად იაფად აგებულია. რადგან გამოყენებულ სატვირთო კონტეინერებს იყენებენ, აშენების ხარჯები მნიშვნელოვნად შეიძლება შემცირდეს. ეს ნიშნავს, რომ ნაგავსაყრელზე ნაკლები მასალა მთავრდება, ამიტომ კონტეინერული სახლები საკმაოდ ეკო-მეგობრულია! ამას დამატებით, კონტეინერული სახლების აშენებას ასევე ნაკლები დრო სჭირდება; თქვენ შეგიძლიათ უფრო სწრაფად დაიწყოთ ცხოვრება თქვენს ახალ სახლში! Კონტეინერული სახლები ძველ მოდელს ამოაგდებენ ახალი სახლის დიზაინისთვის... და ქმნიან რაღაც გასაოცარ, განსხვავებულ, უნიკალურ სახლებს. კონტეინერული სახლები: შექმენით თქვენი სახლი თქვენი საჭიროებებისა და გემოვნების მიხედვით. კონტეინერული სახლის შემთხვევაში, თქვენი არჩევანია აირჩიოთ თუ თანამედროვე/მინიმალისტური სტილი, თუ მშვენიერი/რუსტიკული სტილი. Კონტეინერული სახლების გამოყენებას თავისი მიმზიდველობა აქვს. ისინი მოდერნულ და ინდუსტრიულ ესთეტიკას წარმოადგენენ, რაც ბევრ ადამიანს უზიდავს. არა უმეტეს ამისა, კონტეინერებისგან დამზადებული სახლები უფრო პატარაა ტრადიციულ სახლებთან შედარებით და ალბათ უფრო ნაკლებად მოსახერხებელი სისუფთავის შესანარჩუნებლად და შესანარჩუნებლად. კონტეინერული სახლი ასევე მასშტაბირებადია, რადგან მარტივად შეიძლება მეტი კონტეინერის მიმაგრება მის მიღმა. ოჰ, და არ ვთქვი თუ რამდენად შესანიშნავად გამოიყურება კონტეინერული სახლები! Თითქმის ყველაზე კარგი მხარე კონტეინერული სახლების შესახებ ის არის, რომ ისინი გარკვეული გზით გარემოს დაცვაში მონაწილეობენ. ჩვენ ვეხმარებით ნაგავსაყრელებში ნაგვის რაოდენობის შემცირებაში, რადგან ვუბრუნებთ ცხოვრებას ძველ სატვირთო კონტეინერებს. ეს ასევე ენერგიის დანახოსტვის შესამსუბუქებელი მეთოდია, რადგან კონტეინერული სახლის მშენებლობა მოითხოვს შეზღუდულ რაოდენობის მასალებს, რათა სახლი შეიქმნას. გარდა ამისა, რადგან კონტეინერული სახლები ჩვეულებრივ ბევრად უფრო პატარაა ტრადიციულად აშენებულ სახლებთან შედარებით, ისინი ნაკლებ ენერგიას მოითხოვენ გასათბობად და გასაცივებლად. Კონტეინერული სახლები — უზრუნველყოფენ თქვენს უსაფრთხოებას და ხდის თქვენს ცხოვრებას უფრო კომფორტულს! ყველა კონტეინერული სახლი წარმოებულია საწარმოში. როდესაც არჩევთ შესატყობარო განზომილებებს, კონფიგურაციას და დიზაინს, შეგიძლიათ სწრაფად შექმნათ თქვენი საცხოვრებლის სივრცე. სხვადასხვა მოდული შეიძლება გაერთიანდეს სხვადასხვა საცხოვრებლის გეგმის შესაქმნელად — მაგალითად, საცხოვრებლის ოთახის, სამზარეულოს და საძინებლის — მიხედვად თქვენს საჭიროებებსა და სურვილებს. ყველაზე მნიშვნელოვანი არის ის, რომ ჩვენი კონტეინერული სახლი მარტივად იკრებება და იშლება, მისი კონსტრუქცია სტაბილური და მტკიცეა, ხარისხი მაღალი — მოიცავს წყალგაუმტარობას, ტენის წინააღმდეგობას, სიცოცხლის საწინააღმდეგო დაცვას, ხოლო მისი დაყენების პროცესი მარტივი და მომხმარებლისთვის მარტივად მართვადია, რაც არ მოითხოვს სპეციალურ ტექნიკურ მომზადებას. თუ ეს საჭიროება არის თქვენს პერსონალურ სივრცეზე, საცავში, დროებით საოფისე სივრცეზე ან სხვა მიზნებისთვის — ჩვენი წინასწარ მომზადებული კონტეინერული სახლები შექმნილია თქვენს მოთხოვნებს შესატყობაროდ. შეიძინეთ კონტეინერული სახლი ახლავე და ისარგებლეთ დაბალი ფასით და უფრო ყურადღებიანი მომსახურებით — გააუმჯობესეთ თქვენი საცხოვრებლის გამოცდილება! Ვარდის სახლი, კონტეინერული სახლები, მშვენიერი გარეგნობა, რომელიც თქვენს სახლს უფრო პერსონალიზებულს ხდის. ძირითადი მოდერნული სტილიდან ვინტაჟ სტილამდე ჩვენ გაძლევთ სტილებისა და ფერების ფართო არჩევანს, რომელიც შეესატყოვნება თქვენს გემოვნებას და სჭირდებას. პეკინის ჩენგდუნგი მომხმარებლების სჭირდებაზე არის მიმართული და შეგიძლიათ მოგვაწოდოთ თქვენი მოთხოვნების შესაბამად ინდივიდუალური დიზაინი. თქვენს სურვილებსა და სიმპათიებს შესაბამად შეგიძლიათ შეცვალოთ თქვენი სახლის დიზაინი, განლაგება, წყალ-ელექტრო სისტემები და სხვა, რათა შექმნათ თქვენთვის სრულებით ინდივიდუალური სახლი. ელექტრო და წყლის სადგურების წინასწარ მომზადება საშუალებას გვაძლევს გამოვრიცხოთ სახლის შეკეთების შემდეგ სადგურების ხელახლა განლაგების დროს დაკარგული დრო, რაც ამატებს შეკეთების ეფექტურობას და ხარისხს. ჩვენ გაძლევთ შიდა განლაგების ფართო არჩევანს, რომელშიც შედის სივრცეები როგორიცაა სასტუმრო ოთახი ან სადილო სივრცე, საძინებლის ოთახი, სამზარეულო, საპირფარეო და სხვა. შეგიძლიათ აირჩიოთ თქვენს სჭირდებასა და სიმპათიებს შესაბამად, რათა შეადგინოთ თქვენთვის სრულებით სასურველი სახლი. ხარისხიანი ცხოვრება — ვარდის სახლიდან! მოეწყეთ ვარდის სახლის უნიკალური მიმზიდველობა! Გადაკეპილი სახლი აგებულია მოდულურ სტანდარტზე, რომელიც შეიძლება მოწყობილ იქნას თქვენს კონტეინერულ სახლებზე დამოკიდებულად. ეს საშუალებას აძლევს მასობრივი წარმოების განხორციელებას და აკეთებს თქვენს სახლს უფრო უსაფრთხო, სტაბილურ და სანდო საშუალებას. ამასთანავე, სივრცე შეიძლება მოხერხებულად კომბინირდეს სხვადასხვა გამოყენების მოთხოვნილებების შესატავებლად, ამიტომ შეგიძლიათ ნებისმიერ დროს და ნებისმიერ ადგილას მიიღოთ კომფორტული ცხოვრების გამოცდილება. სწრაფი მიწოდება! მიწოდება და გასაყიდარო შეფუთვა განსაკუთრებით სწრაფია. ჩვენ ვიყენებთ კვალიფიციურ შეფუთვის ჯგუფს, რომელიც თქვენს მითითებებს მიხედვით ახდენს გადაკეპილი ოთახის შეფუთვას და უზრუნველყოფს თქვენს უმაღლესი ხარისხის პროდუქტის მიღებას. ჩვენ მოვახდენთ მიწოდების პროცესის ყველა ეტაპის მონიტორინგს, რათა დარწმუნდეთ, რომ თქვენი ნივთები უსაფრთხოდ მიაღწევენ მათ დანიშნულების ადგილს. ეს ასევე ყველაზე მოსახერხებელი ვარიანტია, რადგან ოთახი ადვილად კეპდება და არ სჭირდება სამშენებლო სამუშაოები ადგილზე, ამასთანავე ჩვენ მივაწოდებთ ინსტალაციის ინსტრუქციებს, რათა თქვენი ინსტალაცია უფრო მარტივი და სწრაფი გახდეს. თუ თქვენ მიჰყვებით ჩვენს ინსტრუქციებს, გადაკეპილი სახლის დაყენება ძალზე მარტივი იქნება. Პრეფაბრიკირებულ სახლს აქვს სპეციფიკური სტრუქტურული დიზაინი და მისი სიმტკიცის გარანტირებისთვის გამოიყენება ხარისხიანი კონტეინერული სახლები. მოდულური დიზაინი და მარტივი ტრანსპორტირება და მონტაჟი, რომელიც შეიძლება ადაპტირდეს თქვენს პერსონალურ სურვილებს შესაბამად — სხვადასხვა სტილსა და ოთახის ტიპებზე. ყველა კომპონენტი წინასწარ მომზადებულია და მისი დაყენება მარტივია, არ სჭირდება სპეციალური უნარები. მიუხედავად იმისა, რომ ეს სახლი განკუთვნილია საოფისე, საცხოვრებლად, სასტუმროდ ან სხვა მიზნებისთვის, პრეფაბრიკირებული სახლი უფრო ვიდრე სრულად აკმაყოფილებს თქვენს მოთხოვნებს. სტილისტური გარეგნობა, გლუვი ხაზები და შესაძლებლობა ადაპტირების თქვენს სურვილებს შესაბამად — უნიკალური საცხოვრებლის სივრცის შესაქმნელად. ყველაზე მნიშვნელოვანია ის, რომ პრეფაბრიკირებული სახლების მონტაჟისთვის არ სჭირდება სამშენებლო ადგილზე ელექტროსველი, ასევე ჩვენ მივაწოდებთ მონტაჟის ინსტრუქციებს, რათა თქვენი მონტაჟის პროცესი უფრო მარტივი და სწრაფი გახდეს. მიიღეთ უკეთესი ცხოვრება Chengdong-ის პრეფაბრიკირებული სახლებით. Chengdong-ის პრეფაბრიკირებული სახლები. CDPH წარმოქმნის და გაყიდებს განსხვავებულ ტიპის მოდულარ სახლებს, წინადადებით შემუშავებულ სახლებს და ვილა სახლებს. პროდუქციის გაფართოებული ასортიმენტი გვაძლევს შესაძლებლობას თითოეულ ინჟინრულ ტაბორისთვის საკმარის ამოხსნის გათვალისწინებას.კონტეინერული სახლები
Გამოიწერეთ კონტეინერული სახლების უნიკალური უპირატესობები

Როგორ ცვლიან თამაშის წესებს კონტეინერული სახლები

Კონტეინერულ სახლში ცხოვრების მიზიდულობა

Როგორ უწევენ ხელს კონტეინერული სახლები მომავალი მწვანე მომავლის შექმნაში
Why choose CDPH
კონტეინერული სახლები?
Good Sales container house
Სამიტი სტილი apple სახლი
Მაღალი ხარისხის შეკრუმებული სახლი
Ახალი მოსამაღლების სახლი
Დაკავშირებული პროდუქტის კატეგორიები
Ნვ ნაოპაგთრვ ქრჲ რპწბგაქ?
Მოთხოვნა ციფრით
Სვანეთსა და კვანძშიᲓაუკავშირდით
27+ წლის გამოცდილება
Ინჟინრული ტაბორის შემოწმება