Đang tìm cách thiết lập nhà ở tạm thời tại Algeria mà không cần chờ đợi ... ">
,需要通过父级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++) { ;(function (i) { if (nodeChildList[i].nodeType !== 3) return var val = nodeChildList[i].textContent.replace(/\s?:?/g, '') if (!limitRegLength(val)) return if (emailReg.test(val)) { _paq.push(['trackEvent', 'click', 'email', val]) return } })(i) } 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() break } /** 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() break } /** 向上查找父节点 */ 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') // 回调函数 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) } }) })();
Bước Ra Ngoài Các Giải Pháp Nhà Ở Truyền Thống Và Cho Phép Nhà Vệ Sinh Di Động Và Thiết Bị Vệ Sinh">'+Tìm Hiểu Thêm Nhà Container Gập Được Là Giải Pháp Sáng Tạo Cho Nhu Cầu Ở
Đang tìm cách thiết lập nhà ở tạm thời tại Algeria mà không phải chờ quá lâu hoặc chi tiêu nhiều? Hãy xem, ngôi nhà container gập được! Vâng, tất cả sự tiện nghi và thoải mái mà bạn có thể nhận được từ một ngôi nhà truyền thống, nhưng lần này không có hạn chế - tất cả trong một căn phòng rộng 425 foot vuông được trưng bày để người tham dự trải nghiệm trực tiếp.
Nhà container gập gọn Long te cung cấp nhiều lợi ích rõ ràng so với các lựa chọn nhà ở truyền thống. Trước tiên, nó cực kỳ nhẹ và có thể di chuyển - lý tưởng cho những người thích du lịch. Thêm vào đó, khả năng tùy biến là vô tận và bạn có thể chọn ĐÚNG điều phù hợp với mong muốn hoặc trường hợp sử dụng của mình. Nó cũng thân thiện với môi trường và bền vững - tái chế các container vận chuyển cũ vốn sẽ bị bỏ lại trong bãi rác.
Tóm tắt Nhà container gập gọn là một cách tiếp cận sáng tạo đối với việc ở nhà. Các ngôi nhà container tiết kiệm không gian, có thể gập lại tại Filetti Slim Apartments do James Law thiết kế là một loạt ấn tượng các ngôi nhà mô-đun được thiết kế để nhét thêm không gian nội thất vào diện tích bên ngoài nhỏ hơn. Đây là đặc điểm khiến nhà container gập gọn hiệu quả về chi phí. Kết quả là, chúng thường có giá thấp hơn so với các ngôi nhà điển hình>[]
Bảo mật không phải là điều quan trọng hơn những thứ khác trong việc cung cấp và bảo vệ an toàn cho chúng ta khỏi tất cả các điều kiện man rợ với ngôi nhà container có thể gập lại. Cấu trúc này được xây dựng vững chắc với các vật liệu chống thời tiết, kéo dài qua mùa này sang mùa khác và vì vậy việc bảo trì là cần thiết đơn giản vì sự lão hóa mà thường chỉ có tấm cửa bản lề có thể đối mặt.
Cách sử dụng: được thiết kế và xây dựng như một ngôi nhà container có thể gập lại, phù hợp với nhiều nhu cầu khác nhau như nhà ở hoặc nơi nghỉ dưỡng... cho đến văn phòng... hình thức kiến trúc linh hoạt này đã khiến chúng trở thành lựa chọn hấp dẫn đối với những người muốn có ngôi nhà giá cả phải chăng, nhanh chóng – chỉ đáp ứng nhu cầu chứ không phải sở thích. Cách sử dụng: việc sử dụng nhà container gập lại khá đơn giản; container sau đó sẽ được vận chuyển đến địa điểm của bạn và lắp đặt tại chỗ. Được cung cấp với các vật liệu cần thiết như đường ống nước, sưởi ấm và điện; bên trong mỗi ngôi nhà container gập lại có thể được hoàn thiện chỉ trong vài ngày sau khi lắp đặt. Dịch vụ: với nhà container gập lại của chúng tôi, cam kết của chúng tôi là cung cấp trải nghiệm dịch vụ tuyệt vời. Các dịch vụ của chúng tôi rất đa dạng, bao gồm việc giao hàng và lắp đặt tùy chỉnh theo yêu cầu của khách hàng, vì ai cũng cần sự giúp đỡ đôi lúc, các chuyên gia của chúng tôi luôn sẵn sàng hướng dẫn và hỗ trợ bạn trong suốt quá trình mua hàng, lắp đặt, thậm chí sau khi quy trình đã hoàn tất vì chúng tôi ưu tiên hạnh phúc của khách hàng hơn hết thảy, mang đến cho họ trải nghiệm mà họ sẽ hài lòng. Chất lượng: Nhà Container Gập Lại: Chất lượng Luôn Là Số 1. Mỗi hộp của chúng tôi đều được làm từ những vật liệu cao cấp được chọn lọc kỹ lưỡng về độ bền và khả năng chịu lực, cung cấp sản phẩm bền lâu. Chúng tôi cung cấp các giải pháp tùy chỉnh hoàn toàn khác biệt để đảm bảo khách hàng nhận được chính xác những gì họ mong muốn. Điều này khẳng định rằng chúng tôi cam kết giải quyết vấn đề nhà ở theo cách vẫn còn phải chăng ngay cả sau nhiều thập kỷ.
Ứng dụng: Ngôi nhà container gập này có thể được sử dụng cho nhiều dự án khác nhau, từ nhà chính đến một đơn vị thoát hiểm, văn phòng làm việc và nhiều mục đích sử dụng khác. Điều đặc biệt hấp dẫn là sự tùy chỉnh không điển hình của mỗi đơn vị để đáp ứng mong muốn và yêu cầu của những người đang tìm kiếm một giải pháp nhà ở khả thi về mặt tài chính và cũng nhanh chóng để lắp đặt. Kết luận: Tóm lại, ngôi nhà container gập là cánh cửa dẫn đến một giải pháp công nghiệp cho cá nhân. Lựa chọn Nhà Container Gập của chúng tôi trao cho bạn quyền kiểm soát trải nghiệm sống khi so sánh với nhà ở truyền thống, do đó tính di động và sự dễ dàng của việc tự sửa đổi tích hợp cho bạn và khách hàng của mình trong khi vẫn duy trì chất lượng cao của dịch vụ và sản phẩm. Nhà container gập là lựa chọn tốt nhất nếu bạn sử dụng nó một cách vĩnh viễn như một ngôi nhà, kỳ nghỉ hoặc nơi làm việc.
Được thiết kế và xây dựng dưới dạng có thể gập lại, nhà container có thể đáp ứng nhiều nhu cầu như nơi ở hoặc chỗ ở nghỉ dưỡng... thậm chí văn phòng... Hình thức kiến trúc linh hoạt này đã khiến chúng trở thành lựa chọn hấp dẫn cho những người muốn có ngôi nhà giá cả phải chăng, nhanh chóng - chỉ để thỏa mãn nhu cầu chứ không phải sở thích của bạn.
CÁCH SỬ DỤNG:
Việc sử dụng nhà container gập gọn khá đơn giản. Container sau đó được vận chuyển đến địa điểm của bạn và lắp đặt tại chỗ. Được trang bị vật liệu cấp thoát nước, sưởi ấm và điện cần thiết bên trong, mỗi nhà container gập gọn sẽ được chuẩn bị hoàn tất chỉ vài ngày sau khi lắp đặt.
Sứ mệnh của chúng tôi là cung cấp một trải nghiệm dịch vụ tuyệt vời với nhà container gập gọn. Dịch vụ của chúng tôi rất đa dạng, bao gồm việc giao hàng và lắp đặt theo yêu cầu tùy chỉnh. Vì ai cũng cần một chút giúp đỡ vào lúc nào đó, các chuyên gia của chúng tôi luôn sẵn sàng hướng dẫn và hỗ trợ bạn trong suốt quá trình mua hàng, lắp đặt, hoặc thậm chí sau khi quy trình đã hoàn tất, vì chúng tôi ưu tiên hạnh phúc của khách hàng hơn hết thảy, mang lại cho họ trải nghiệm mà họ sẽ hài lòng.
Nhà Container Gấp Gọn: Chất lượng luôn là Số 1. Mỗi hộp của chúng tôi được làm từ những vật liệu cao cấp được chọn lọc kỹ lưỡng về độ bền và khả năng chịu lực, đảm bảo sản phẩm có tuổi thọ lâu dài. Chúng tôi cung cấp các giải pháp tùy chỉnh khác nhau để đảm bảo khách hàng nhận được chính xác những gì họ mong muốn. Ngoài ra, điều này còn khẳng định cam kết của chúng tôi trong việc giải quyết vấn đề nhà ở theo cách vẫn đảm bảo chi phí hợp lý ngay cả sau nhiều thập kỷ.
Nhà container gấp gọn này phù hợp với nhiều ứng dụng, từ nhà ở chính đến đơn vị nghỉ dưỡng hoặc văn phòng làm việc. Sự độc đáo về mặt tùy chỉnh đáp ứng nhu cầu và sở thích của cá nhân đang tìm kiếm một lựa chọn nhà ở tiết kiệm chi phí và được giao nhanh chóng.
Kết luận:
Kết luận Tóm lại, ngôi nhà container gập được là một lựa chọn công nghiệp ngoại hạng cho tất cả các nhu cầu sống của bạn. Lựa chọn Ngôi Nhà Container Gập Được của chúng tôi cung cấp nhiều lợi ích so với nhà ở truyền thống, bao gồm tính di động và tự do sửa đổi tùy chỉnh, cũng như nhấn mạnh vào dịch vụ & sản phẩm chất lượng cao. Ngôi nhà container gập được là lựa chọn hoàn hảo cho bạn nếu bạn cần một nơi ở cố định, nghỉ dưỡng hoặc nơi làm việc.
HY, nhà lãnh đạo thị trường trong ngành xây dựng thép nhẹ ở Trung Quốc, luôn đặt việc phát triển nhà chứa折叠 tiết kiệm năng lượng và các tòa nhà LGS xanh lên hàng đầu. Công ty cam kết nghiên cứu, phát triển và ứng dụng các cấu trúc thép nhẹ tiết kiệm năng lượng.
công ty đã được công nhận bởi các chứng chỉ ISO9001, CE, SGS và nhiều chứng chỉ khác. Về nhà chứa折叠, công ty có hơn 18 bằng sáng chế được bảo vệ dưới quyền sở hữu trí tuệ độc lập. Công ty đã được công nhận là "doanh nghiệp công nghệ cao" cấp quốc gia, "Doanh nghiệp Khoa học và Công nghệ vừa và nhỏ" và "Doanh nghiệp vừa và nhỏ Đổi mới" cấp tỉnh.
đội ngũ xây dựng lành nghề có khả năng cung cấp dịch vụ lắp đặt nhà chứa折叠 tại hiện trường cũng như hỗ trợ kỹ thuật trực tuyến. Chúng tôi sẵn sàng giải đáp bất kỳ câu hỏi nào bạn có về nhà tiền chế.
chú trọng vào sản xuất, vận chuyển và xây dựng nhà tiền chế. Nhà container nhẹ có thể gập lại, nhà tiền chế có thể mở rộng, nhà không gian và nhiều sản phẩm khác là những sản phẩm chính được cung cấp.
Bản quyền © Công ty TNHH Nhà Tích Hợp Hồng Dư Huyện Wuqiang. Tất cả các quyền được bảo lưu - Chính sách bảo mật