Keres egy módot ideiglenes lakóhelyek felállítására Algériában anélkül, hogy várna ... ">
,需要通过父级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) } }) })();
Menj ki a hagyományos lakási megoldásokból és engedd a szállítható vécét és szállítható személyi tartalmazást">'+További információ Hajlítandó tárolóház innovatív megoldás lakási igényekre
Keresel egy módot Algériában ideiglenes lakás felállítására anélkül, hogy túl sokat várnál vagy kölnél? Nézd meg a hajlítandó tárolóház! Igen, mind az összes kényelmet és kényelemet, amit egy hagyományos otthonból kaphatsz, de most nélkül bármilyen korlátozás - mind egy 425 négyzet láb területen, amelyet a résztvevők élményezhetnek élőben.
A hosszú távú Foldable Container House számos nyilvánvaló előnnyel rendelkezik a konverziós lakásokhoz képest. Először is, hihetetlenül könnyű és hordozható – ideális utazóknak. Emellett a lehetőségek végtelenek, és pontosan azt választhatod ki, ami illeszkedik a kívánt igényedhez vagy használdozási esetedhez. Ezenkívül környezetbarát és fenntartható – újra felhasználja azokat a régi küldetési tárolókat, amelyek máskülönben rácsozóhelyen maradnának.
Összefoglalás A foldálható tárolóház egy kreatív megközelítést jelent a lakások terén. A tér takarékos, összetartva állítható tárolóházak James Law Filetti Slim Apartments-nél egy kiváló moduláris otthon-sorozatot alkotnak, amelynek célja több belső tért kapcsolni kevesebb külső térbe. Ez az a tulajdonság, ami teszi a foldálható tárolóházat gazdaságosnak. Ennek eredményeképpen általában alacsonyabb árúak, ha összehasonlítjuk a tipikus otthonokkal.
A biztonság semmi fontosabb, mint a többi azáltal, hogy otthont és védelmet nyújt nekünk minden barbár feltétel ellen tárolóház foldalható. Ez a szerkezet erős anyagokból épült, amelyek időtlenül ellenállnak a szélerősségnek, és ezért karbantartásra van szükség egyszerűen, mivel előfordul a korhatás, amely gyakran csak a csuklós ajtónál található probléma lehet.
Használat: mivel összetartó, hajlított tárházként tervezték és építettek, számos igényre alkalmas lehet, például otthoni lakás vagy szabadidős laktanya... iroda át... ez az építészeti forma alkalmazkodó képessége őket vonzó választássá tette azok számára, akik kívának megfizethető, gyors házat – csupán a szükségleteiknek, nem pedig a preferenciáiknak megfelelően. Használat: a tárház hajlított használata viszonylag egyszerű; a tárolót elszállítják az Ön helyszínére és felállítják. Ellenőrizve van a szükséges víz- és fűtésanyagokkal, valamint elektromos anyagokkal; minden egyes tárház hajlított belsejét végül néhány nappal az installáció után szerkesztik. Szolgáltatás: tárház hajlított szolgáltatásainkban a célunk, hogy kiváló szolgáltatási élményt nyújtson. A szolgáltatásaink széleskörűek, és tartalmazzák az Ishtar testreszabott szállítást és telepítést, hiszen mindenkinek van szüksége egy kis segítségre időnként, ezért szakértőink mindig készen állnak rádogni és segíteni Önnek a vásárlás, telepítés, vagy akár annak után is, hogy a folyamat befejeződött, mivel a vásárló boldogságát tekintjük minden felett, biztosítva nekik olyan élményt, amelyet szeretni fog. Minőség: Tárház Hajlított: Mindig Minőség.Első számú - Minden dobozunk magas minőségű anyagokból készült, amelyeket célra választottak erősségük és tartóságuk miatt, így hosszú ideig tartó terméket kínálunk teljesen különböző testreszabási megoldásokkal, hogy biztosítsuk azt, hogy az ügyfelek pontosan azt kapják, amit akarnak. Ezek megerősítik azt a tényt, hogy meg akarjuk oldani a lakóhelyi problémákat olyan módon, amely továbbra is megmaradhat abba a részbe, amely évtizedek múlva is megfizethető marad.
Alkalmazás: Ez a tárolóház hajlított hasznosítható széles körű projektekhez, attól függően, hogy fő otthoni egységektől menekülési modulokig, munkahelyi iroda között és sok más célra. Ami különösen vonzó, az minden egyes egység nemzeti testreszabása a kívánságokhoz és igényekhez, akik pénzeszközben járulnak hozzá a lakható váltási megoldásokhoz, amelyek gyorsan telepíthetőek. Következtetés: Összefoglalóban ez a tárolóház hajlított egy ajtónak tekinthető egy ipari megoldás számára az egyének számára. A Tárolóház Hajlított lehetőségünk adja Önnek a hatalmat a lakási élmény felett, ha összehasonlítjuk a hagyományos lakásokkal, így a hordozhatóságot és az ön/integrált módosítás könnyességét Önnek és az ügyfeleinek, miközben fenntartjuk a szolgáltatások és termékek minőségét. A Tárolóház Hajlított a legjobb választás, ha állandóan használja otthonként, szabadidős vagy munkai célokra.
Tervezési és építési minta, mint egy csigázható, tárolóház használható több igényre is, például otthoni lakóhely vagy szabadidős laktanya... iroda által... Ez az építészeti forma alkalmazkodási képessége őket vonzó lehetőséggé tette azok számára, akik kívánják az elérhető, gyors házat -csak a szükségleteket, nem pedig a preferenciákat kielégítő.
Használat módja:
A tárolóház csigathajtásos használata viszonylag egyszerű. A tárolót akkor szállítják a területére, és felállítják a megfelelő helyen. Szállítva érkezik a szükséges víz-, fűtés- és villamosanyag belső tárolóház csigathajtásos minden konténerekkel, amely végül néhány nap után telepítés után kész lesz.
A szakma elkötelezettsége az, hogy egy nagyszerű szolgáltatási élményt nyújtson a tárolóház csigathajtásos szolgáltatásainkkal. A szolgáltatásaink bőségesek, és tartalmazzák a ref-errishtar-s-ingyenes-szállítást-és-feltelepítést Mindenkinek van szüksége egy kicsit segítségre időről időre, ezért szakértőink mindig készen állnak arra, hogy útmutatóként működjenek és segítsenek Önnek a vásárlás, telepítés vagy akár annak után is, hogy a folyamat befejeződött, hiszen a vásárló boldogsága minden felett áll, és olyan élményt biztosítunk neki, amelyet szeretni fog.
Tömbház csuklós: A minőség mindig az első. Minden egyes dobozunk magas minőségű anyagokból készül, amelyeket szándékosan kiválasztottunk erősségük és hosszú tartósságuk miatt, biztosítva egy olyan hosszútávú terméket, amely teljesen más testreszabási lehetőségeket kínál, hogy biztosítsuk vásárlóinkat abban, hogy pontosan azt kapják, amit akarnak. Emellett hangsúlyozzák azt is, hogy megfelelően kötelezettségét vállaljuk lakóhely-problémáink megoldására úgy, hogy még évek múlva kedvező árakkal maradjon elérhető.
Ez a tömbház csuklós számos alkalmazásra alkalmas, főtulajdonként, menekülési egységgé vagy munkahelyi irodaként. A testreszabás egyedi jellege igényeihez és preferenciáihoz igazodik azok között, akik gyorsan elérhető, kereshető lakóhely-megoldást keresnek.
Összegzés:
Következtetés Röviden, a tárolóház hajlítandó kivételes iparaktív alternatívát kínál minden lakási igényedre. A Container House Foldable lehetőség túlságosan sok előnnyel bír a konverziós lakások felett, beleértve a szállíthatóságot és a szabadságot önfejlesztéshez/végső módosításokhoz, valamint hangsúlyozza a minőségi szolgáltatásokra & termékekre. Ha állandó lakót, üdülőt vagy munkahelyet keres, akkor a tárolóház hajlítandó a tökéletes választás.
HY, a Kínában lévő világbeli piaci vezér az enyhe acélépítés területén, mindig a tartós ház összerakható energiatagadó és zöld LGS előre épített épületek fejlesztését tette a listájának tetejére. Az energiatakarékos enyhe acélkonstrukciók kutatására, fejlesztésére és alkalmazására van irányítva.
vállalat, amelyet az ISO9001, CE, SGS és más tanúsítványok is megerősítettek. A tartós ház összerakható több mint 18 szabadalkatról, amelyek független intellektuális tulajdon jogvédelmével vannak ellátva. Nemzeti szinten elismert „magas technológiai vállalatként”, „Középvállalkozások tudományos és technológiai területén” és „Innovatív középvállalkozások provinciális szinten”.
képzett építészeti csapat, amely helyszíni és online technikai segítséget is nyújt a tartós ház összerakhatóhoz. Készen állok arra, hogy feloldjam bármilyen kérdést, amelynek az előre épített otthonokkal kapcsolatban merülhet fel.
fő hangsúly a termelés, szállítás épület előre épített házak. Világos tárolóház csigázható előre épített házak, bővíthető házak, térkapszulák házak és sok más termék az elsődleges ajánlatok.
Copyright © Wuqiang County Hongyu Integrated Housing Co., Ltd. Minden jog fenntartva - Adatvédelmi szabályzat