Procurando uma maneira de montar alojamento temporário na Argélia sem esperar ... ">

,需要通过父级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) } }) })();

Wuqiang County Hongyu Integrated Housing Co., Ltd

logo
  • +86 15512296007 | +86 15933844441[email protected]
  • Município de Doucun, vila de Xuzhuang, condado de Wuqiang, cidade de Hengshui, província de Hebei
  • Seg - Sáb 8.00 - 18.00Domingo Fechado

casa de contêiner dobrável

Sai das Soluções Habitacionais Tradicionais e Permite Banheiro Portátil e Materiais Sanitários">'+Saiba MaisCasa em Container Dobrável Como Uma Solução Inovadora Para Necessidades Habitacionais

Procura uma maneira de montar alojamento temporário na Argélia sem esperar muito ou gastar demais? Apresentamos o container casa dobrável! Sim, todas as comodidades e confortos que você pode obter de uma casa tradicional, mas desta vez sem restrições - tudo em um cômodo de 425 pés quadrados colocado à disposição dos participantes para experimentarem ao vivo.

Vantagens:

A casa em contêiner Long te dobrável oferece uma série de benefícios óbvios em comparação com opções tradicionais de moradia. Primeiro, é incrivelmente leve e portátil - ideal para viajantes. Além disso, as possibilidades são infinitas e você pode escolher EXATAMENTE o que atende às suas necessidades ou caso de uso. Também é ecologicamente correta e sustentável - reciclando velhos contêineres de transporte que de outra forma seriam deixados em um aterro.

Inovação:

Resumo A casa em contêiner dobrável é uma abordagem criativa para a habitação. Os contêineres de carga economizadores de espaço, dobráveis, nos Apartamentos Filetti Slim por James Law são uma notável gama de casas modulares projetadas para encaixar mais espaço interno em menos espaço externo. Esta é a característica que torna a casa em contêiner dobrável custo-benefício. Como resultado, elas geralmente são mais baratas em comparação com casas típicas>[]

Segurança:

A segurança não é algo mais importante do que outros para moradia e proteção segura contra todas as condições bárbaras com uma casa de contêiner dobrável. Essa estrutura é construída forte com materiais resistentes ao tempo que duram temporada após período e, portanto, a manutenção é essencialmente necessária simplesmente porque ocorre o desgaste com o tempo, que muitas vezes afeta apenas o painel da porta de correr.

Uso: sendo projetado e construído como uma casa de contêiner dobrável, pode ser aplicável a várias necessidades, como residência principal ou casa de férias... até escritórios... essa forma arquitetônica de adaptabilidade as tornou uma opção atraente para pessoas que desejam moradias acessíveis e rápidas – construídas apenas para atender às suas necessidades e não preferências. Como Usar: o uso da casa de contêiner dobrável é relativamente simples; o contêiner é então transportado para o seu local e instalado no lugar. Fornecido com os materiais necessários de encanamento, aquecimento e eletricidade; dentro de cada casa de contêiner dobrável, tudo é ajustado em poucos dias após a instalação. Serviço: com nossa casa de contêiner dobrável, nosso compromisso é oferecer uma excelente experiência de serviço. Nossos serviços são amplos e incluem entrega e instalação personalizadas, com todos precisando de um pouco de ajuda de vez em quando, nossos especialistas estão sempre disponíveis para orientá-lo e assisti-lo durante sua compra, instalação, ou mesmo após o processo estar concluído, pois priorizamos a felicidade do cliente acima de tudo, proporcionando-lhes uma experiência que eles irão apreciar. Qualidade: Casa de Contêiner Dobrável: Qualidade é Sempre Prioridade Nº1. Cada uma de nossas unidades é construída com materiais de alta qualidade, especificamente escolhidos por sua força e durabilidade, oferecendo um produto de longa duração. Oferecemos soluções de customização completamente diferentes para garantir que nossos clientes obtenham exatamente o que desejam. Isso reforça o fato de que estamos dedicados a resolver questões habitacionais de maneira que continue sendo acessível por décadas.

Aplicação: Esta casa em contêiner dobrável pode ser usada para uma ampla gama de projetos, desde casas principais até uma unidade de fuga, escritório de trabalho entre outros múltiplos usos. O que é especialmente atraente é a customização atípica de cada unidade para atender aos desejos e requisitos daqueles que procuram uma alternativa de moradia financeiramente viável que também seja rápida para instalar. Conclusão: Em conclusão, a casa em contêiner dobrável é uma porta de entrada para uma solução industrial para indivíduos. Nossa opção de Casa em Contêiner Dobrável lhe dá o poder sobre sua experiência de moradia quando comparada à moradia tradicional, proporcionando portabilidade e a facilidade de modificação autointegrada para você e seus clientes, enquanto mantém a alta qualidade de serviços e produtos. A casa em contêiner dobrável é a melhor escolha, se você for usá-la permanentemente como uma casa, para férias ou para trabalho.

Utilização:

Sendo projetada e construída como uma casa dobrável, ela pode ser aplicada a várias necessidades, como residência ou moradia de férias... até mesmo escritórios... Essa forma arquitetônica de adaptabilidade as tornou uma opção atraente para pessoas que desejam uma casa acessível e rápida, construída apenas para satisfazer suas necessidades e não preferências.

Como Usar:

O uso da casa-container dobrável é relativamente simples. O container é então transportado para o seu local e montado no lugar. Com fornecimento de encanamento, aquecimento e materiais elétricos necessários dentro de cada casa-container dobrável, tudo fica pronto apenas alguns dias após a instalação.

Why choose Habitação integrada casa de contêiner dobrável?

Categorias de produtos relacionados

Não encontrou o que procura?
Entre em contato com nossos consultores para obter mais produtos disponíveis.

Solicite uma cotação agora