Люкс контейнерын байшин-д хувиргах явдал юм.">
,需要通过父级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);
}
});
})();
Контейнерууд том металл хайрцаг бөгөөд янз бүрийн зүйлсэд ашиглагдаж болно. Контейнерийг ашиглах нэг онцлог арга бол түүнийг зайг үр дүнтэй ашигладаг, загварлаг орон зай болгон хувиргах явдал юм Ширээч Контейнер Гэр . Одоо 40 футын ачих контейнерээс барьсан байшинд амьдарч байна гэж төсөөлөөрэй — энэ нь ер бусын санагдаж магадгүй ч 40 футын контейнерыг жинхэнэ хүйтэн, шидтэй байшинг болгон хувиргаж болно. Та «байшин» гэдэг үгийг санаачлахдаа хананаар таслагдсан, дээвэртэй барилга бодож болно. Гэхдээ зарим төсөөллийн тусламжтайгаар стандарт ачих контейнерыг дулаан, амгалан байшин болгон хувиргаж болно. CDPH нь ийм хайрцгуудыг зөвхөн ашигтай биш харин загварын цэвэр, орчин үеийн орчин үеийн байшин болгон хувиргах үндсэн мэргэжилтнүүд юм. 40 футын контейнерын байшинд амьдрах нь олон давуу талтай. Үүнд орчныг хамгаалах үүднээс хаягдах болно гэж үзсэн материалуудыг дахин ашиглаж буй экологийн хувьд илүү зөв сонголт юм. Мөн контейнерууд хямд өртөгтэй, хангалттай олон тул энэ нь хамгийн бага зардалтай сонголт юм. Гэх мэтгүй контейнерын байшингууд маш хүчтэй тул хэт эсрэг цаг агаарын нөхцөлд ч тэсвэртэй байдаг бөгөөд аюулгүй, найдвартай амралтын газар болоход тохиромжтой. Контейнерын байшинд амьдрахад хадгалах зай олох нь ихэвчлэн нэгэн саад болдог. 40 футын контейнерууд нь зай хязгаарлагдмал хүмүүст маш ашигтай байдаг ч, таны шаардлагад нийцүүлэн хялбархан өөрчлөлт оруулах боломжтой. CDPH нь контейнерын байшинг илүү өргөн, амгалан орчин болгохын тулд ухаалаг хадгалалтын шийдлүүд, ашиглалтанд тохиромжтой сойз сав, зай хэмнэх загварчлалын аргуудад анхаарал хандуулдаг. Орчин үеийн, экологийн хувьд зөв 40 футын контейнер байрыг бий болгох нь эко-нэгэнтэй барилгын материал, энерги хэмнэх зориулалтын тоног төхөөрөмж, мөн цөөн хэдэн санаачлалыг ашиглахыг шаардана. CDPH нь зөвхөн орчин үеийн, загварлаг биш харин экологийн хувьд зөв контейнер байрыг загварлахад мэргэжсэн байгууллага юм. Нарны самбар эсвэл ногоон дээвэр гэх мэт сонголтууд нь контейнер байрыг тэсвэртэй, энерги хэмнэх болгохын тулд бараг хязгааргүй боломжоор хангасан байдаг. Олон нийгэмд класслах үзэгдэл нь асуудал болдог. Контейнер байр нь санхүүгийн хувьд хүртээмжтэй, бат бөх байдалтай шийдэл болох нэгэн санаачлал юм. Энэ тохиолдолд дахин боловсруулсан ачааны контейнерийг хүмүүсийн хэрэгцээг хангах зорилгоор хувиргаж болно. Ачааны контейнерийг байшингууд болгон дахин боловсруулах замаар CDPH нь 'байр' гэх ойлголтыг шинэчилж, хандивт байрны шинэ хил хязгаарыг турших ажиллагааг явуулж байна. Аппл бүрдүүлэлт, үл хуурайшгүй хэлбэр, гоё гадаад хүчирхийлэл, таны оронд илүү хувийн шинж өгдөг. Бид таны хувийн дур сонирхолд нийцүүлж, хялбар үеийнхэнс доошоо хүртэл уламжлалт хүртэлх төрлийн загварууд, өнгүүдийн үлдэхгүй сонголттой. Пекин Чэндунг 40 футын контейнер бүрдүүлэлт дээр төвлөрсөн, таны шаардлагад нийцүүлж хувийн захиалгаар хийдөг. Таны хувийн хүсэл, шаардлагад нийцүүлж, таны ордонгийн дизайн, дотоод бүрдүүлэлт, ус, цахилгаан зүйлсийг хувийн захиалгаар хийдөг, ийнхүү танд төсөөлсөн, хувийн ордонг бүтээдөг. Бид бүрдүүлэлт үүрд ус, цахилгаан шугамыг төсөөлсөн, түүн дараа гадаад бүрдүүлэлтийн дараа ус, цахилгаан шугамыг дахин бүрдүүлэх хугацаа хайхамуйн ажлыг саатуулдөг, гадаад бүрдүүлэлтийн үр дүнг, чанарыг нэмэдөг. Таны суурьшгүй газар, хоолны өрөө, унтлах өрөө, охин өрөө, газрын өрөө гэх мэт дотоод бүрдүүлэлтийн үлдэхгүй сонголттой. Чанартай амьдрал — Аппл Бүрдүүлэлт! Аппл Бүрдүүлэлт — үл хуурайшгүй газар! Урьдчилан бүтээсэн оронд тодорхой бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн 40 футын контейнерын оронд бүтцүүдийн хамгаалалтыг хангаж, аюулгүй байдлыг гарантуйн гүйцэтгүүр. Модуль хэлбэрт бүтцүүдийн зурагтөсөл, хялбар түрүүлж, суурьшуулж болох ба та нарын хувийн сонирхол, үл ялгагдах стил, өрөөний төрлийн дагуу хувийн тохируулж болох. Бүх хэсгүүд урьдчилан бүтээсэн ба суурьшуулж болох, тусгай уралдаан шаардажгүй. Түүн дотроо: алба, амьдрах, нөөцлөх, бүүр үл ялгагдах нөхцөлд урьдчилан бүтээсэн оронд та нарын шаардлажгүй хангаж болох. Стильт дүрслэл, цэвэр шугам, та нарын сонирхолд хувийн тохируулж болох чадвар нь та нарын үл ялгагдах амьдралын оронд бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн. Хамгийн сайн нь, урьдчилан бүтээсэн оронд талбарт холбогч холбоос шаардажгүй ба бид суурьшуулж болох заавруудыг үлдээж, та нарын суурьшуулж болох процессыг хялбар, хурдан хийж болох. Чэндунгийн урьдчилан бүтээсэн оронд бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн оронд бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн. Чэндунгийн урьдчилан бүтээсэн оронд бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн оронд бүтцүүдийн зурагтөсөл бүхлэд бүтээсэн. Хураагдаж буй орон нь стандарт модульд суурилтсан дизайнд үндэслэн бүрдүүлдэг, та нарын гэр бүлийн шаардлагад нийцүүлж тохируулж болох бөөрнүүр үйлдвэрлэлд хүрч, амьдралын танай талбайг илүү тогтвортой, аюулгүй, найдвартай болгохад туслах болой. Хураагдаж буй өрөөг өөр өөр шаардлагад нийцүүлж олон янзын аргаар зохион бүтээж болох тул та хаана ч, ямар ч үед амьдарч болой. Хурдан хүргэлт! Бид мөн үр дүнтэй баглааж бүрдүүлж, хүргэлтийн үйлчилгээ үзүүрлэдэг. Манай туршлагатай баглааж бүрдүүлж буй бригад та нарын хүсэлтүүдийн дагуу та нарын хураагдаж буй өрөөг баглааж бүрдүүлдэг. Хүргэлтийн явцад бид бүх алхамыг хяналтанд держим, ийнхүү бүтээлүүд 40 футын контейнерт хүргэж, та нарын захиалгын бүрдүүлж буй газар руу хүрч болой. Хамгийн сайн нь — өрөөг хураагдаж буй хэлбэрт хөнгөн урт хугацаанд суурилуулж болой, талбайд галзууралт хийх шаардлагагүй. Бид мөн суурилуулж буй заавруудыг үзүүрлэдэг, ийнхүү та нарын суурилуулж буй үйлдлийг хөнгөвтөр, хурдан болгохад туслах болой. Та нарын заавруудыг дагаж хийвэл хураагдаж буй оронг суурилуулж буй үйлдлийг хялбархан гүйцэтгэж болой. 40 футын контейнерын орон сууц — илүү аюулгүй, илүү дотоодын амьдралын орчин бүтээх! Бид бүх бүтцэн хэсгүүдийг хамартаа багтаадаг стандарт модульд зохион бүтээлтийг ашигламуйн. Бүх хэсгүүд нь үйлдвэрт бүтээлт стандарт хэсгүүд юм. Та өөрийн шаардлагад нийцсэн хэмжээ ба дэс дарааллыг сонгох бүрд та өөрийн амьдралын орчныг үүсгэж чадмуйн. Хэрэгцээ ба сонирхолд нийцсэн янз бүрийн модулийг хослуулан олон төрлийн өрөөний дэс дараалал бүтээх боломжтой, үүн дотор гостиница, охорхой, унтуур, газрын хүрээлэн гэх мэт олон функционал интеграцилан амьдралын орчин бүтээх боломжтой. Хамгийн чухал нь бидний контейнерын орон сууц нь хялбархан задарч, хялбархан цуглуулж чадмуйн бат бүтцэн хүрээлэнтэй, онцгой үзүүлэлттүүдтүүдтүүд: ус түүрхүүр, чийг түүрхүүр, гал түүрхүүр; цуглуулалтын процессын хялбархан, удирдаж хялбархан бөлшүүр, ямар нэг онцгой техник мэдлэг шаардаж не. Бидний урьдчилан бүтээлт контейнерын орон сууц нь та нарын шаардлагад нийцсэн бүтээлтүүд юм — үүнд хувийн орон сууц, түрхүүр офис, хадгаламуйн газар, эсвэл бусад ямар нэг шаардлагад нийцсэн бүтээлтүүд. Одоо нь контейнерын өрөө авах цаг ирж, хямд үнэ, анхааралтай үйлчилгээний давуу талыг ашиглаж чадмуйн. Та контейнерын өрөө худалдан авч, өөрийн амьдралыг хялбархан хийж чадмуйн! CDPH нь аялалт модуль барилгын, загасч барилга, вилла барилгын төрөл бүрийг үйлдвэрлэдэг болон худалдаа хийдэг. Ачааллын табанд үндсэн шийдлийг олгоход бидний бүтээгдэхүүнүүд нь их төрлийн байдаг.40 футын контейнерын байшин
40 футын контейнерын байшинд амьдрахын давуу тал

40 футын контейнерын байшинд орон тоо ихэсгэх үр дүнтэй аргачлал

Орчин үеийн, тэгш хандлагатай 40 футын контейнерын байшингийн загварын санаанууд

40 футын контейнерын байшинд суурших боломжийг хямд өрхийн байрын хувьд судлах
Why choose CDPH
40 футын контейнерын байшин?
Цагдаагийн стил apple газар
Шинэ бүтээгдэхүүн модуль гэр
Эрчимтэй фолдинг гэр
Баярлалаа борлуулж байгаа контейнерийн гэр
Холбоотой бүтээгдэхүүний ангилал
Хайж буй зүгээ олж чадаагүй байна уу?
Одоогоор санал хүсэлт ирүүлэх
Боломжит бүтээгдэхүүний талаар илүү дэлгэрэнгүй мэдээлэл авахын тулд бидний зөвлөхтэй холбоо барилцаа уу.Холбогдох
27+ Жил Туршлагатай
Инженерийн табаны үйлдвэрлэл