Potražujete način za postavljanje privremenog smještaja u Alžiru bez čekanja ... ">

,需要通过父级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]
  • Općina Doucun, selo Xuzhuang, okrug Wuqiang, grad Hengshui, provincija Hebei
  • Pon - Sub 8.00 - 18.00Nedjelja Zatvoreno

složiv kućni kontejner

Izađi Iz Tradičnih Stanovnih Rješenja i Dopusti Prijenosne Toalete i Sanitarnu Opremu">'+Saznaj Više Složiv Kontejner kao Inovativno Rješenje za Stanične Potrebe

Tražite način da postavite privremeno stanovanje u Alžiru bez dugačkog čekanja ili velikih troškova? E pa, evo složivog kućnog kontejnera! Da, sva pristupa i udobstva koja možete dobiti iz tradičnog doma, ali ovaj put bez ograničenja - sve u jednoj sobi od 425 kvadratnih stopa koja je postavljena za posjetioce da iskusaju uživo.

Prednosti:

Dugi te foldable kontejnerski kućni dom nudi brojne očigledne prednosti u usporedbi s tradičnim opcijama za stanovanje. Prvo, izuzetno je laki i prijenosan - idealan za putnike. Dodajte da su mogućnosti beskrajne i možete odabrati TOČNO što odgovara vašim željama ili upotrebi. Također je ekološki prihvatljiv i održiv - recikliranje starih transportnih kontejnera koji bi inače ostali na smetnjama.

Inovacije:

Sažetak Foldabilna kontejnerska kuća je kreativan pristup stambenoj nekretnini. Prostor uštede, savijivi kontejneri za kuće u Filetti Slim Apartmanima od James Law-a su impresivna serija modularnih domova dizajnirana za stiskanje više unutrašnjosti u manju vanjsku prostoru. To je značajka koja čini foldabilnu kontejnersku kuću ekonomičnom. Kao rezultat, općenito su jeftinije u usporedbi s tipičnim kućama>[]

Sigurnost:

Sigurnost nije ništa važnije od drugih činjenica kada je riječ o stambenim i zaštitenim uvjetima koji nas štite od svih barbarskih prilika uz pomoć foldabilne kontejnerske kuće. Ova struktura je izgrađena jakom s materijalima koji su otporni na vremenske prilike i trajaju sezona poslije periode, a zato je održavanje u suštini potrebno jednostavno zato što se pojavljuje starost koja često utječe samo na klupačku ploču koja može biti okvirena.

Upotreba: budući da je dizajniran i izgrađen kao složiv, kontejnerski kućni mogu se primijeniti za više potreba, poput stanovanja ili ljetnjake... preko ureda... ovaj arhitektonski oblik prilagodljivosti činio ih je privlačnom opcijom za one koji žele dostupne, brze kuće – izgrađene samo da zadovolje vaše potrebe, a ne preferencije. Kako koristiti: upotreba složivog kontejnerskog doma je relativno jednostavna; kontejner se zatim transportira na vaše mjesto i postavlja na mjesto. Dobavlja se s potrebnim materijalima za vodovod, toplinu i struju; unutar svakog složivog kontejnerskog doma je gotovo uređeno u roku od nekoliko dana nakon instalacije. Usluga: uz naš složivi kontejnerski dom, naša posvećenost je pružanje izvanrednog iskustva usluge. Naše usluge su širokog raspona i uključuju referentnu dostavu i instalaciju po mjeri Ishtar, s svima nam je potrebna malo pomoći od vremena na vrijeme, naši stručnjaci su uvijek dostupni da vas vode i pomažu tijekom kupnje, instalacije, ili čak nakon što je taj proces završen, jer brinemo o šteti kupaca iznad svega, pružajući im iskustvo koje će im se svidjeti. Kvaliteta: Složivi kontejnerski dom: Kvaliteta je uvijek broj jedan. Svaka od naših kutija izgrađena je od visokokvalitetnih materijala specijalno odabranih zbog njihove jačine i trajnosti, pružajući dugotrajnu stavku koju ponudimo apsolutno različite rješenje prilagođavanja kako bismo osigurali da naši kupci dobiju točno ono što žele. Oni potiču činjenicu da smo posvećeni rješavanju naših stambenih problema na način koji bi trebao ostati dostupan decenije od sada.

Primjena: Ovaj složivi kontejnerski kućni modul može se koristiti za širok niz projekata, od glavnih stambenih objekata do izbjegavalačkog jedinice, poslovne kancelarije i drugih mnogobrojnih uporaba. Posebno privlačivo je neobična prilagođenost svakoj jedinici kako bi se ispunile želje i potrebe onih koji traže financijski prihvatljivu stambenu alternativu koja je također brza za instalaciju. Zaključak: U zaključku, složivi kontejnerski kućni modul predstavlja ulazak u industrijsko rješenje za pojedince. Naša opcija Složivog Kontejnerskog Kućnog Modula vam daje moć nad vašim staničnim iskustvom u usporedbi s tradiicionalnim stambenim rješenjima, te time omogućuje prijenosnost i lakoću samointegrirane modifikacije za vas i vaše klijente, istovremeno održavajući visoku kvalitetu usluga i proizvoda. Složivi kontejnerski kućni modul je najbolji izbor, ako ga namjeravate trajno koristiti kao kuću, letovanje ili radno mjesto.

Upotreba:

Budući da je dizajnirana i izgrađena kao složiva, kuća u kontejneru može se koristiti za različite potrebe, kao što su stanovanje ili letnjaku... do ureda... Ova arhitektonička forma prilagodljivosti činila ih je privlačnim opcijom za one koji žele dostupne, brzo građene kuće - izgrađene samo da zadovolje vaše potrebe, a ne preferencije.

Kako koristiti:

Korištenje složivog kontejnerskog kućanstva je relativno jednostavno. Kontejner se zatim transportira na vaše mjesto i postavlja na određeno mjesto. Dobivši sanitarnu opremu, grijanje i električnu materijalu potrebnu unutar svakog složivog kontejnerskog kućanstva, ono je gotovo za korištenje tek nekoliko dana nakon instalacije.

Why choose Integrirano stanovanje složiv kućni kontejner?

Povezane kategorije proizvoda

Ne možete pronaći ono što tražite?
Kontaktirajte naše konsultante za dostupne proizvode.

Zatražite ponudu sada