{"version":3,"file":"static/js/app.f00ec365.js","mappings":"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","sources":["webpack://ly-m/./src/views/App.vue","webpack://ly-m/./src/views/App.vue?c12b","webpack://ly-m/./src/store/index.js","webpack://ly-m/./src/mixins/durationLogMixin.js","webpack://ly-m/./src/initMApp.js","webpack://ly-m/./src/main.js","webpack://ly-m/./src/router/index.js","webpack://ly-m/./src/conf/index.js","webpack://ly-m/./src/utils/globalState.js","webpack://ly-m/./src/utils/verify.js","webpack://ly-m/./src/utils/ajax.js","webpack://ly-m/./src/utils/cache.js","webpack://ly-m/./src/utils/dom.js","webpack://ly-m/./src/utils/log.js","webpack://ly-m/./src/utils/ua.js","webpack://ly-m/./src/utils/util.js","webpack://ly-m/webpack/bootstrap","webpack://ly-m/webpack/runtime/chunk loaded","webpack://ly-m/webpack/runtime/compat get default export","webpack://ly-m/webpack/runtime/create fake namespace object","webpack://ly-m/webpack/runtime/define property getters","webpack://ly-m/webpack/runtime/ensure chunk","webpack://ly-m/webpack/runtime/get javascript chunk filename","webpack://ly-m/webpack/runtime/get mini-css chunk filename","webpack://ly-m/webpack/runtime/global","webpack://ly-m/webpack/runtime/hasOwnProperty shorthand","webpack://ly-m/webpack/runtime/load script","webpack://ly-m/webpack/runtime/make namespace object","webpack://ly-m/webpack/runtime/publicPath","webpack://ly-m/webpack/runtime/css loading","webpack://ly-m/webpack/runtime/jsonp chunk loading","webpack://ly-m/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=5447cb38&scoped=true\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&id=5447cb38&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5447cb38\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n state: {\n // 页面时长上报状态\n durationState: false,\n // 页面开始时间\n pageStartTime: 0,\n },\n mutations: {\n // 设置页面时长上报状态\n SET_DURATION_STATE(state, status) { \n state.durationState = status;\n },\n // 设置页面开始时间\n SET_PAGE_START_TIME(state, time) {\n state.pageStartTime = time;\n }\n },\n actions: {\n },\n modules: {\n }\n})\n","/**\n * @file 用户停留时长打点mixin\n * @author wangjiaqi(wangjiaqi17@baidu.com)\n * @date 2022-06-13\n */\nimport { log } from '@/utils/log';\nimport store from '@/store';\n\nexport default {\n beforeCreate() {\n document.addEventListener('visibilitychange', () => {\n // 页面不在可视区域时\n if (document.visibilityState === 'hidden' && !store.state.durationState) {\n this.setDurationLog();\n }\n // 页面回到可视区域时 设置页面停留初始时间\n else if (document.visibilityState === 'visible') {\n store.commit('SET_PAGE_START_TIME', new Date().getTime());\n // 为避免重复打点,在用户离开时置一个标志位 TRUE,回来时再置回 FALSE\n store.commit('SET_DURATION_STATE', false);\n }\n });\n // 兼容 safari 下, 当 visibleStateState 属性的值转换为 hidden 时,Safari 不会按预期触发visibilitychange的问题\n window.addEventListener('pagehide', () => {\n if (!store.state.durationState) {\n this.setDurationLog();\n }\n });\n // 跳出站内的情况,包括前进、后退、以及点击外链跳转以及关闭页签\n window.addEventListener('beforeunload', () => {\n if (!store.state.durationState) {\n this.setDurationLog();\n }\n });\n },\n methods: {\n // 用户停留时长打点\n setDurationLog() {\n log({\n act: 'duration',\n statetime: new Date().getTime() - store.state.pageStartTime\n })\n // 为避免重复打点,在用户离开时置一个标志位 TRUE,回来时再置回 FALSE\n store.commit('SET_DURATION_STATE', true);\n }\n }\n};\n","/**\n * @file 初始化站点的主入口(ly)\n * @author wangjaiqi17@baidu.com\n */\n\n/* globals _hmt */\nimport Vue from 'vue';\nimport App from '@/views/App';\n// import VConsole from 'vconsole';\n\nimport {setLog, log} from '@/utils/log';\nimport {genPageId} from '@/utils/util';\nimport Router from 'vue-router';\nimport VueClipboard from 'vue-clipboard2';\nimport store from './store'\n\nimport durationLogMixin from '@/mixins/durationLogMixin';\n\nimport(/* webpackChunkName: \"iconfont\" */'@/assets/font/iconfont.js');\n\n// 引入全局样式\nimport '@/assets/font/fonts.css';\n// 引入 MUI 样式\nimport 'm-ui/comm.less';\nimport $toast from 'm-ui/plugins/toast';\n\n// 移动端调试可开启\n// new VConsole();\n\nVue.config.productionTip = false;\n\n// 声明为 wise 平台,方便 Search UI 做样式定制\nVue.prototype.$platform = 'wise';\n// 声明 Search UI 是 lightmode 还是 darkmode\nVue.prototype.$theme = 'lightmode';\n\n// 全局toast\nVue.prototype.$toast = $toast;\n\n// 剪切板\nVue.use(VueClipboard);\n\n// 全局 mixin\nVue.mixin(durationLogMixin);\n\nconst routerMethods = ['push', 'replace'];\n\nexport default router => {\n // vue-router push replace 进行跳转时,Uncaught (in promise) undefined异常捕获\n routerMethods.map(method => {\n const originalCall = Router.prototype[method];\n Router.prototype[method] = function (location, onResolve, onReject) {\n if (onResolve || onReject) {\n return originalCall.call(this, location, onResolve, onReject);\n }\n return originalCall.call(this, location).catch(err => err);\n };\n });\n router.beforeEach((to, from, next) => {\n\n // 设置body背景色\n if (from.meta.bodyBg !== to.meta.bodyBg) {\n document.body.style.background = to.meta.bodyBg || '#fff';\n }\n\n const toName = to.name;\n setLog({\n page: toName,\n pageid: genPageId()\n });\n\n // 记录用户停留时间\n if (from.name) {\n log({\n act: 'duration',\n statetime: new Date().getTime() - store.state.pageStartTime\n })\n store.commit('SET_DURATION_STATE', true);\n }\n\n // 设置当前页面进入时间\n store.commit('SET_PAGE_START_TIME', new Date().getTime());\n store.commit('SET_DURATION_STATE', false);\n\n next();\n });\n \n /* eslint-disable no-new */\n new Vue({\n el: '#app',\n router,\n store,\n render: h => h(App),\n }).$mount('#app');\n /* eslint-enable no-new */\n};\n","/**\n * @file 入口文件\n * @author wangjaiqi(wangjiaqi17@baidu.com)\n * @date 2024-04-26\n */\n\nimport initMApp from './initMApp';\nimport '@/assets/css/index.less';\nimport router from './router';\n\ninitMApp(router);\n","/**\n * @file vue router\n * @author wangjiaqi(wangjiaqi17@baidu.com)\n * @date 2020-05-11\n */\nimport Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// 攻略\nconst StrategyDetail = () => import(/* webpackChunkName: \"Strategy\" */ '@/views/Strategy/Detail.vue');\n\n// 线路\n// const WayDetail = () => import(/* webpackChunkName: \"Way\" */ '@/views/Way/Detail.vue');\n// POI详情页\nconst PoiDetail = () => import(/* webpackChunkName: \"Poi\" */ '@/views/POI/Detail.vue');\n\nVue.use(VueRouter)\n\n// META 配置使用说明\n// ├── title 标题\n// ├── bottomBar 底部 Bar 配置\n// └── bodyBg 背景颜色\n\nconst routes = [\n\t{\n\t\tpath: '/strategy/detail/:id',\n\t\tname: 'StrategyDetail',\n\t\tcomponent: StrategyDetail,\n\t\tmeta: {\n\t\t\ttitle: '攻略详情页'\n\t\t}\n\t},\n\t// {\n\t// \tpath: '/way/detail',\n\t// \tname: 'WayDetail',\n\t// \tcomponent: WayDetail,\n\t// \tmeta: {\n\t// \t\ttitle: '线路详情页'\n\t// \t}\n\t// },\n\t{\n\t\tpath: '/poi/detail/:id',\n\t\tname: 'PoiDetail',\n\t\tcomponent: PoiDetail,\n\t\tmeta: {\n\t\t\ttitle: 'POI详情页'\n\t\t}\n\t},\n\t\n]\n\nconst router = new VueRouter({\n\tmode: 'history',\n\tbase: 'm',\n\troutes\n})\n\nexport default router\n","/**\n * @file 通用配置文件\n * @author wangjiaqi17@baidu.com\n */\n\n/**\n * 不需要统计PV的页面列表\n *\n * @const\n * @type {string}\n */\nexport const NO_PV_LOG_PAGES = [];\n\n\n/**\n * 不需要将 logId 存到全局变量的 Ajax 列表(不然会污染正常请求的 logid)\n *\n * @const\n * @type {string}\n */\nexport const NO_LOGID_AJAX = [\n // 待添加\n];\n\n","/**\n * @file 简易的全局响应式状态,用于跨组件通信\n * @author maomingyang@baidu.com\n * @date 2019.05.08\n */\nimport Vue from 'vue';\n\n/**\n * 全局响应式状态,请先买票后上车\n *\n * @const\n * @type {Object}\n */\nconst STATE = Vue.observable({\n // 登录状态信息\n loginInfo: {},\n requestArr: [],\n});\n\n/**\n * 获取状态\n *\n * @param {string} field 字段名\n * @return {any} 状态值\n */\nexport const get = field => STATE[field];\n\n/**\n * 修改状态\n *\n * @param {string} field 字段名\n * @param {any} value 状态值\n */\nexport const commit = (field, value) => {\n STATE[field] = value;\n};\n\nVue.prototype.$globalState = {get, commit};\n","/**\n * @file 登录\n * @author chengong03(chengong03@baidu.com)\n * @date 2019-01-14\n */\n\nimport {get, commit} from './globalState';\nimport {isSC, isBB, isBBMp} from './ua';\nimport {invokeSC, invokeBB} from './app';\n\n/**\n * 登录状态信息\n *\n * @const\n * @type {Object}\n */\nconst PASS_DOMAIN = 'https://passport.baidu.com';\n/**\n * wise 登录地址(优先短信验证码登录)\n *\n * @const\n * @type {string}\n */\nconst WISE_LOGIN_URL = PASS_DOMAIN + '/passport/login?sms=1&tpl=lvyou&u=';\n\n/**\n * wise 注册地址\n *\n * @const\n * @type {string}\n */\nconst WISE_REG_URL = PASS_DOMAIN + '/passport/reg?tpl=lvyou&u=';\n\n/**\n * wise 登出地址\n *\n * @const\n * @type {string}\n */\nconst WISE_LOGOUT_URL = PASS_DOMAIN + '/?logout&tpl=lvyou&u=';\n\n/**\n * 登录地址\n */\nexport const loginUrl = WISE_LOGIN_URL;\n\n/**\n * 注册地址\n */\nexport const regUrl = WISE_REG_URL;\n\n/**\n * 登出地址\n */\nexport const logoutUrl = WISE_LOGOUT_URL;\n\n/**\n * 更新登录信息\n * 比如用户登录后回退,则需要将后端 Ajax 中的 loginInfo 重置下\n *\n * @param {Object} loginInfo 登录信息\n */\nexport function refreshLogin(loginInfo) {\n let tplData = window._tplData || {};\n let newLoginStatus = {\n ...tplData.loginInfo,\n ...loginInfo\n };\n commit('loginInfo', newLoginStatus);\n\n let newTplData = {\n ...tplData,\n loginInfo: newLoginStatus\n };\n window._tplData = newTplData;\n\n}\n\n/**\n * 登录\n *\n * @param {Object} params 传参\n */\nexport function login(params) {\n // 手百配置方法:http://wiki.baidu.com/pages/viewpage.action?pageId=685216717\n // 简搜登录\n if (isSC()) {\n scLogin();\n }\n // 手百登录(不包括手百小程序)\n else if (isBB() && !isBBMp()) {\n bbLogin(params);\n }\n // html 登录\n else {\n h5Login(params);\n }\n}\n\n/**\n * 登出\n *\n * @param {string} url 登出后跳转的url\n */\nexport function logout(url) {\n window.location.href = logoutUrl + encodeURIComponent(url ? url : window.location.href);\n return;\n}\n\n/**\n * 跳到站外某个页面,并且需要强登录\n * 跳到站内不用此方法,直接在 router meta 里配置即可\n *\n * @param {string|Function} url 登录的地址,如果传函数,则用户自己控制登录完的逻辑\n */\nexport function loginJump(url) {\n let isLogin = get('loginInfo').isLogin;\n\n if (!isLogin) {\n login();\n return;\n }\n\n if (typeof url === 'function') {\n url();\n return;\n }\n\n window.location.href = url;\n}\n\n/**\n * html 登录\n *\n * @param {Object} params 传参\n */\nexport function h5Login(params = {}) {\n let paramsList = [];\n Object.keys(params).forEach(key => {\n paramsList.push(`&${key}=${params[key]}`);\n });\n let ques = window.location.href.indexOf('?') === -1 && paramsList.length ? '?' : '';\n window.location.href = WISE_LOGIN_URL + encodeURIComponent(\n window.location.href + ques\n + (ques ? paramsList.join('').slice(1) : paramsList.join('')));\n\n}\n\n/**\n * 简搜登录 SearchCraft\n * http://agroup.baidu.com/simplesearchapi/md/article/989442\n */\nexport function scLogin() {\n // 回调函数\n window.BaiduSCPassCallBack = function (ret = {}) {\n\n // 登录错误时,尝试使用 h5 登录\n if (ret.status) {\n h5Login();\n return;\n }\n \n // 登录成功重刷页面\n window.location.reload();\n };\n\n // 调起简搜登录能力\n invokeSC(\n {\n func: 'invokeModule',\n moduleName: 'BaiduPassport',\n options: {\n // \b取值 login | logout | isLoggedIn\n action: 'login'\n },\n callback: 'window.BaiduSCPassCallBack'\n },\n function () {\n // 不支持端能力,调用 h5 登录\n h5Login();\n }\n );\n}\n\n/**\n * 手百登录 BaiduBox\n * http://invoker.baidu.com/invokers?id=546d74b92870cf906ddafc9b\n */\nexport function bbLogin(params = {}) {\n // 回调函数\n window.BaiduBBPassCallBack = function (ret) {\n // ret 0:登录成功;1:失败\n if (ret) {\n return;\n }\n // 回传参数处理\n let paramsList = [];\n Object.keys(params).forEach(key => {\n paramsList.push(`&${key}=${params[key]}`);\n });\n let ques = window.location.href.indexOf('?') === -1 && paramsList.length ? '?' : '';\n // 登录成功重刷页面\n window.location.href = window.location.href + ques\n + (ques ? paramsList.join('').slice(1) : paramsList.join(''));\n };\n\n const funcName = 'window.BaiduBBPassCallBack';\n const options = JSON.stringify({\n tpl: 'b2b',\n // 1:支持第三方登录;0或者不设置:不支持第三方登录\n // third_login: '0',\n // sms 为短信登录;username 为用户名密码登录,缺省使用框内默认的规则\n // login_type: 'sms',\n func: funcName\n });\n\n invokeBB(\n // iOS\n [\n 'account',\n {\n action: 'logindialog',\n params: options\n },\n ''\n ],\n // Andiord\n [\n 'Bdbox_android_account',\n 'loginDialog',\n [\n options,\n funcName\n ]\n ],\n function () {\n // 不支持端能力,调用 h5 登录\n h5Login();\n }\n );\n}\n","/**\n * @file Ajax\n * @author chengong03(sunyueran@baidu.com)\n * @date 2018-11-28\n */\nimport Vue from 'vue';\nimport qs from 'qs';\nimport axios from 'axios';\nimport {NO_LOGID_AJAX} from '@/conf';\nimport {getQuery, getAccessid} from '@/utils/util';\nimport {refreshLogin} from '@/utils/verify';\nimport {get, commit} from './globalState';\nimport {setLog} from '@/utils/log';\n\n// 构建默认参数\nlet defaultParams = function () {\n const accessid = getAccessid();\n const { rid } = getQuery();\n let params = {\n // 前端 mock 时根据这个字段去区分是否为 ajax 请求,后端的 jump 接口也需要用\n ajax: 1,\n accessid: accessid.join(''),\n device: 'wise'\n };\n rid && (params.rid = rid);\n return params;\n};\n\n/**\n * 当前请求是否在 NO_LOGID_AJAX 列表中\n *\n * @param {string} url url\n * @return {boolean} 是否在 NO_LOGID_AJAX 列表中\n */\nfunction inNoLogidList(url) {\n for (let item of NO_LOGID_AJAX) {\n if (url && url.indexOf(item) === 0) {\n return true;\n }\n }\n\n return false;\n}\n\n// 添加请求拦截器\naxios.interceptors.request.use(\n function (config) {\n // 接口请求开始\n const sendDate = new Date().getTime();\n config.interFace_startTime = sendDate;\n const originUrl = config.url;\n let prefix = config.url.indexOf('?') === -1 ? '?' : '&';\n // 所有请求附带默认参数\n let queryString = qs.stringify(defaultParams());\n if (queryString) {\n config.url += prefix + queryString;\n }\n\n // 添加 csrftoken 防止crsf漏洞\n let csrftoken = window._tplData && window._tplData.trace.csrftoken;\n // abtest上报数据接口不添加csrftoken。之后删除abtest上报接口时,需要删除这个逻辑\n if (csrftoken && originUrl.indexOf('/api/open/v1/report') === -1) {\n // 将csrftoken放到请求头发送给服务器\n config.headers.csrftoken = csrftoken;\n }\n config.cancelToken = new axios.CancelToken(cancel => {\n let requestArr = get('requestArr');\n requestArr.push(cancel);\n commit('requestArr', requestArr);\n });\n return config;\n },\n function (error) {\n // Do something with request error\n return Promise.reject(error);\n }\n);\n\n// 添加响应拦截器\naxios.interceptors.response.use(\n response => {\n // 接口请求结束\n const {data, config = {}, request} = response;\n const trace = data.trace || {};\n const logid = data.traceid;\n const loginInfo = data.loginInfo;\n\n // 如果有 logid,则重写全局 logid\n // 方便统计取最新的 logid,正常打点不需要关注 logid\n if (logid) {\n // 如果此请求不在 NO_LOGID_AJAX 列表里,则需要修改 logId\n let changeLogId = !inNoLogidList(config.url);\n \n if (changeLogId) {\n setLog({\n logid\n })\n }\n }\n\n // 页面数据追踪\n if (Array.isArray(window.traceMap)) {\n window.traceMap.push({\n url: request.responseURL,\n trace\n });\n }\n // 如果有登录状态,则更新登录状态\n if (loginInfo) {\n refreshLogin(loginInfo);\n }\n\n return data;\n },\n function (error) {\n if (axios.isCancel(error)) {\n return new Promise(() => {});\n }\n return Promise.reject(error);\n }\n);\n\nVue.prototype.$http = axios;\n\nexport default axios;\n","/**\n * @file 缓存数据,方便回退后保留现场\n * @author chengong03(chengong03@baidu.com)\n * @date 2018-12-04\n */\nimport {getScrollTop, setScrollTop} from '@/utils/dom';\nimport {stringifyJson, parseJson} from '@/utils/util';\n\n/**\n * scrolltop 缓存的 key\n *\n * @const\n * @type {string}\n */\nconst CACHE_SCROLL_TOP = 'V_TOP_';\n\n/**\n * 数据缓存的 key 前缀\n *\n * @const\n * @type {string}\n */\nconst CACHE_DATA = 'V_DATA_';\n\n/**\n * 对象数据缓存的 key 前缀\n *\n * @const\n * @type {string}\n */\nconst META = 'V_META_';\n\n// localStorage 在低版本 iOS Safari 的隐私模式下无法使用,手机Safari浏览器中具体表现是\n// - localStorage对象仍然存在\n// - 但是 setItem 会报异常:QuotaExceededError\n// - getItem 和 removeItem 直接忽略\nconst {sessionStorage: sessionStore, localStorage: localStore} = window;\n\n/**\n * 缓存 scrollTop\n *\n * @public\n * @param {string} key key\n * @return {boolean} 是否设置成功\n */\nexport function setCacheScroll(key) {\n try {\n const scrollTop = getScrollTop();\n sessionStore.setItem(CACHE_SCROLL_TOP + key, scrollTop);\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 重新设置 scrollTop\n *\n * @public\n * @param {string} key key\n * @return {boolean} 是否设置成功\n */\nexport function restoreCacheScroll(key) {\n try {\n const initScrollTop = +sessionStore.getItem(CACHE_SCROLL_TOP + key) || 0;\n if (initScrollTop) {\n setScrollTop(initScrollTop);\n }\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 清理 scrollTop 缓存\n *\n * @public\n * @param {string} key key\n * @return {boolean} 是否设置成功\n */\nexport function delCacheScroll(key) {\n try {\n sessionStore.removeItem(CACHE_SCROLL_TOP + key);\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 取出缓存的scrollTop\n * \n * @param {string} key key 缓存的键值\n * @return {Object}\n */\n export function getCacheScroll(key) {\n try {\n const fullKey = CACHE_SCROLL_TOP + key;\n return JSON.parse(sessionStore.getItem(fullKey));\n }\n catch (error) {\n return undefined;\n }\n}\n\n/**\n * 缓存列表数据\n *\n * @public\n * @param {string} key key\n * @param {Object} cacheData 数据\n * @param {boolean} useLocal 是否永久缓存\n * @return {boolean} 是否设置成功\n */\nexport function setCacheData(key, cacheData, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n const fullKey = CACHE_DATA + key;\n store.setItem(fullKey, JSON.stringify(cacheData));\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 取出列表数据\n *\n * @public\n * @param {string} key key\n * @param {boolean} useLocal 是否永久缓存\n * @return {Object}\n */\nexport function getCacheData(key, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n const fullKey = CACHE_DATA + key;\n return (store && store.getItem(fullKey))\n ? JSON.parse(store.getItem(fullKey))\n : undefined;\n }\n catch (error) {\n return undefined;\n }\n}\n\n/**\n * 清理 data 缓存\n *\n * @public\n * @param {string} key key\n * @param {boolean} useLocal 是否永久缓存\n * @return {boolean} 是否设置成功\n */\nexport function delCacheData(key, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n const fullKey = CACHE_DATA + key;\n store.removeItem(fullKey);\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n\n/**\n * 设置对象缓存的信息\n *\n * @param {string} key key\n * @param {string} query query\n * @param {string} val val\n * @param {boolean} useLocal 是否永久缓存\n * @return {boolean} 是否设置成功\n */\nexport function setCacheMeta(key, query, val, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n let item = store.getItem(META + key) || '{}';\n let queryObj = JSON.parse(item);\n queryObj[query] = val;\n store.setItem(META + key, JSON.stringify(queryObj));\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 获取对象缓存的信息\n *\n * @param {string} key key\n * @param {string} query query\n * @param {boolean} useLocal 是否永久缓存\n * @return {string}\n */\nexport function getCacheMeta(key, query, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n let item = store.getItem(META + key) || '{}';\n const queryObj = JSON.parse(item);\n\n if (queryObj[query]) {\n return queryObj[query];\n }\n\n return '';\n }\n catch (error) {\n return '';\n }\n}\n\n/**\n * 删除对象缓存的信息\n *\n * @param {string} key key\n * @param {string} query query\n * @param {boolean} useLocal 是否永久缓存\n * @return {boolean} 是否设置成功\n */\nexport function delCacheMeta(key, query, useLocal = false) {\n try {\n setCacheMeta(key, query, '', useLocal);\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 取出列表数据\n *\n * @public\n * @param {string} key key\n * @param {boolean} useLocal 是否永久缓存\n * @return {Object}\n */\n export function getCacheRegData(key, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n const fullKey = CACHE_DATA + key;\n return (store && store.getItem(fullKey))\n ? parseJson(store.getItem(fullKey))\n : undefined;\n }\n catch (error) {\n return undefined;\n }\n}\n\n/**\n * 缓存列表数据\n *\n * @public\n * @param {string} key key\n * @param {Object} cacheData 数据\n * @param {boolean} useLocal 是否永久缓存\n * @return {boolean} 是否设置成功\n */\n export function setCacheRegData(key, cacheData, useLocal = false) {\n const store = useLocal ? localStore : sessionStore;\n try {\n const fullKey = CACHE_DATA + key;\n store.setItem(fullKey, stringifyJson(cacheData));\n return true;\n }\n catch (error) {\n return false;\n }\n}\n\n/**\n * 生成 urlKey\n *\n * @return {string} 生成的 key\n */\nexport function genUrlKey() {\n return decodeURI(location.pathname) + location.search;\n}","/**\n * @file dom 处理\n * @author chengong03(chengong03@baidu.com)\n * @date 2018-11-23\n */\n\n// ****************************************************\n// * class *\n// ****************************************************\n\n/**\n * 为目标元素添加className\n *\n * @public\n * @param {HTMLElement} element 目标元素\n * @param {string} className 要添加的className\n *\n * @return {HTMLElement} 目标元素\n */\nexport function addClass(element, className) {\n // 优先使用classList. 在iOS 5, Android 3 之后开始支持\n if (element.classList) {\n element.classList.add(className);\n }\n else {\n let classes = element.className\n ? element.className.split(/\\s+/)\n : [];\n\n for (let i = 0, n = classes.length; i < n; i++) {\n if (classes[i] === className) {\n return element;\n }\n }\n\n classes.push(className);\n element.className = classes.join(' ');\n }\n\n return element;\n}\n\n/**\n * 移除目标元素的className\n *\n * @public\n * @param {HTMLElement} element 目标元素\n * @param {string} className 要移除的className\n *\n * @return {HTMLElement} 目标元素\n */\nexport function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n }\n else {\n let classes = element.className\n ? element.className.split(/\\s+/)\n : [];\n\n for (let i = 0, n = classes.length; i < n; i++) {\n if (classes[i] === className) {\n classes.splice(i, 1);\n i--;\n }\n }\n element.className = classes.join(' ');\n }\n\n return element;\n}\n\n/**\n * 判断元素是否拥有指定的className\n *\n * @public\n * @param {HTMLElement} element 目标元素\n * @param {string} className 要判断的className\n *\n * @return {boolean} 是否拥有指定的className\n */\nexport function hasClass(element, className) {\n // 方法名用 hasClass,是因为 contains 在 dom 模块中可能引起歧义\n if (element.classList) {\n return element.classList.contains(className);\n }\n\n let classes = element.className.split(/\\s+/);\n for (let i = 0, n = classes.length; i < n; i++) {\n if (classes[i] === className) {\n return true;\n }\n }\n\n return false;\n}\n\n// ****************************************************\n// * selector *\n// ****************************************************\n\n/**\n * 根据id获取指定的DOM元素\n *\n * @public\n * @param {string|HTMLElement} id 元素的id或DOM元素\n * @return {HTMLElement|null} 获取的元素,找不到时返回null\n */\nexport function g(id) {\n if (!id) {\n return null;\n }\n\n return typeof id === 'string' ? document.getElementById(id) : id;\n}\n\n/**\n * 根据选择器获取指定DOM元素\n *\n * @public\n * @param {string} selector 元素的selector\n * @param {HTMLElement=} context 上下文\n * @return {HTMLElement|null} 获取的元素,找不到时返回null\n */\nexport function query(selector, context) {\n if ('string' !== typeof selector) {\n return selector;\n }\n\n context = context || document.body;\n\n return context.querySelector(selector);\n}\n\n/**\n * 根据选择器选择DOM元素列表\n *\n * @public\n * @param {string} selector 元素的selector\n * @param {HTMLElement=} context 上下文\n * @return {Array} 获取的元素列表,找不到时为空数组\n */\nexport function queryAll(selector, context) {\n if (Array.isArray(selector)) {\n return selector;\n }\n\n context = context || document.body;\n\n let nodeList = context.querySelectorAll(selector);\n\n return Array.prototype.slice.call(nodeList);\n}\n\n/**\n * 判断DOM元素与选择器是否匹配\n *\n * @param {HTMLElement} element 目标DOM元素\n * @param {string} selector 待判断的selector\n * @return {boolean} 是否匹配\n */\nexport function matches(element, selector) {\n let proto = Element.prototype;\n let matches = proto.matches\n || proto.webkitMatchesSelector\n || proto.mozMatchesSelector\n || proto.msMatchesSelector;\n\n if (matches) {\n return matches.call(element, selector);\n }\n\n let elements = queryAll(selector, element.parentNode);\n for (let i = 0; i < elements.length; i++) {\n if (elements[i] === element) {\n return true;\n }\n }\n return false;\n}\n\n\n// ****************************************************\n// * traversal *\n// ****************************************************\n\n/**\n * 获取元素的子节点\n *\n * @public\n * @param {HTMLElement} element 目标元素\n * @return {Array.} 子节点\n */\nexport function children(element) {\n let res = [];\n\n let items = element.children;\n /* eslint-disable no-cond-assign */\n for (let i = 0, item; item = items[i]; i++) {\n if (item.nodeType === 1) {\n res.push(item);\n }\n }\n /* eslint-enable no-cond-assign */\n\n return res;\n}\n\n/**\n * 查找第一个匹配条件的祖先元素\n *\n * @param {HTMLElement} element 目标元素\n * @param {string} selector 查询条件\n * @param {HTMLElement=} context 遍历范围\n * @return {HTMLElement|null} 匹配到的节点,找不到时返回null\n */\nexport function closest(element, selector, context) {\n context = context || document;\n\n do {\n if (matches(element, selector)) {\n return element;\n }\n\n if (element === context) {\n return null;\n }\n }\n while ((element = element.parentNode) && element !== document);\n\n return null;\n}\n\n// ****************************************************\n// * position *\n// ****************************************************\n\n/**\n * 获取 scrollTop\n *\n * @return {number} scrollTop 高\n */\nexport function getScrollTop() {\n return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n}\n\n/**\n * 设置滚动高度\n *\n * @param {number} offset 高度\n */\nexport function setScrollTop(offset) {\n document.body.scrollTop = offset;\n document.documentElement.scrollTop = offset;\n}\n\n/**\n * 获取 clientWidth\n *\n * @return {number} clientWidth 屏幕宽\n */\nexport function getClientWidth() {\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n}\n\n/**\n * 获取 clientHeight\n *\n * @return {number} clientHeight 屏幕高\n */\nexport function getClientHeight() {\n return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n}\n\n/**\n * 获取元素的相对位置\n *\n * @public\n * @param {HTMLElement} element 目标元素\n * @param {HTMLElement=} offsetEle 相对元素\n * @return {Object}\n */\nexport function position(element, offsetEle) {\n let res = {left: 0, top: 0};\n let pos = element && element.getBoundingClientRect && element.getBoundingClientRect();\n\n if (offsetEle) {\n let fixPos = offsetEle.getBoundingClientRect();\n res.left = pos.left - fixPos.left;\n res.top = pos.top - fixPos.top;\n }\n else if (pos){\n res.left = pos.left + Math.max(\n document.documentElement.scrollLeft,\n document.body.scrollLeft\n );\n res.top = pos.top + Math.max(\n document.documentElement.scrollTop,\n document.body.scrollTop\n );\n }\n\n return res;\n}\n\n// ****************************************************\n// * css *\n// ****************************************************\n\n/**\n * 检测当前浏览器是否支持某个属性或者某个属性值\n *\n * @param {string} property 检测的CSS属性名\n * @param {string} value 检测的CSS属性值\n * @return {boolean} 是否支持\n */\nlet element = null;\nexport function isSupportCssProperty(property, value) {\n if (!element) {\n element = document.createElement('div');\n }\n if (property in element.style) {\n if (value) {\n element.style[property] = value;\n return element.style[property] === value;\n }\n return true;\n }\n return false;\n}\n","/**\n * @file log.js 打点\n * @author chengong03(chengong03@baidu.com)\n * @date 2019-01-09\n */\nimport Vue from 'vue';\nimport qs from 'qs';\nimport throttle from 'lodash/throttle';\nimport axios from './ajax';\nimport {getQuery, getCookie} from '@/utils/util';\nimport {getOS, isBBMp} from '@/utils/ua';\nimport {getCacheData, setCacheData, delCacheData} from '@/utils/cache';\n\n/**\n * 日志路径\n *\n * @const\n * @type {string}\n */\nconst LOG_URL = 'https://istats.baidu.com/report/a.gif';\n\n/**\n * ABTest日志路径\n *\n * @const\n * @type {string}\n */\nconst ABTEST_LOG_URL = (window.location.hostname === 'jiameng.baidu.com'\n && 'https://istats.baidu.com'\n || 'http://10.138.36.83:8999') + '/api/open/v1/report/';\n/**\n * 原始来源ofr key\n *\n * @const\n * @type {string}\n */\nconst OFR_CACHE_KEY = 'OFR';\n\n/**\n * 原始来源延时(毫秒)\n * 超过这个时间,自动删除原始来源\n *\n * @const\n * @type {number}\n */\nconst OFR_DELAY_TIME = 36e5;\n\n/**\n * 原始FROM搜索from key\n *\n * @const\n * @type {string}\n */\nconst FROM_CACHE_KEY = 'FROM';\n\n/**\n * 原始FROM延时(毫秒)\n * 超过这个时间,自动删除原始来源\n *\n * @const\n * @type {number}\n */\nconst FROM_DELAY_TIME = 36e5;\n\n// 初始打点参数\nlet initLogParams = {\n tpl: 'ly',\n biz: isBBMp() ? 'swan' : 'wise',\n os: getOS()\n};\n\n/**\n * 发送日志\n *\n * @param {string=} url 打点地址\n * @param {Object} params 打点参数\n */\nconst sendLog = (() => {\n const list = [];\n\n return (url, params) => {\n let logUrl = url + '?' + qs.stringify(params);\n\n if (navigator.sendBeacon) {\n let retryTimes = 5;\n while (retryTimes-- > 0 && !navigator.sendBeacon(logUrl)) {\n // 加入队列失败时,重试5次\n }\n }\n else {\n let index = list.push(document.createElement('img')) - 1;\n\n list[index].onload = list[index].onerror = list[index].onabort = function () {\n list[index] = list[index].onload = list[index].onerror = list[index].onabort = null;\n delete list[index];\n };\n list[index].src = logUrl;\n }\n };\n})();\n\n/**\n * 设置原始来源\n *\n * @param {Object.string=} from 原始from\n * @param {Object.string=} ofr ofr 原始搜from索来源\n */\nexport function setOfrLog({from, ofr}) {\n if (!from && !ofr) {\n return;\n }\n if (from) {\n setCacheData(FROM_CACHE_KEY, {\n name: from,\n time: new Date().getTime()\n });\n }\n\n if (ofr) {\n setCacheData(OFR_CACHE_KEY, {\n name: ofr,\n time: new Date().getTime()\n });\n }\n\n}\n\n/**\n * 查看 ofr 日志是否需要打\n */\nfunction checkOfrLog() {\n let ofrObj = getCacheData(OFR_CACHE_KEY);\n let fromObj = getCacheData(FROM_CACHE_KEY);\n const now = new Date().getTime();\n // 如果超过设定时间,则删除 ofr 日志\n if (ofrObj && ofrObj.name) {\n if (now - ofrObj.time > OFR_DELAY_TIME) {\n delLog('ofr');\n delCacheData(OFR_CACHE_KEY);\n }\n // 设置 ofr 日志\n setLog({ofr: ofrObj.name});\n }\n // 如果超过设定时间,则删除 from 日志\n if (fromObj && fromObj.name) {\n if (now - fromObj.time > FROM_DELAY_TIME) {\n delLog('from');\n delCacheData(FROM_CACHE_KEY);\n }\n\n // 设置from 日志\n setLog({from: fromObj.name});\n\n }\n\n}\n\n/**\n * jmx打点\n *\n * @param {Object} params 打点参数\n */\nexport function log(params) {\n // 查看 ofr 日志是否需要打\n checkOfrLog();\n const {logTest, testParams, ...otherParams} = params\n let logParams = {\n _t: new Date().getTime(),\n url: window.location.href,\n ...initLogParams,\n act: 'click',\n ...otherParams\n };\n\n if (process.env.NODE_ENV === 'development'\n && logParams && (!logParams.page || logParams.page && logParams.page === 'error')\n && window.location.href.indexOf('error') === -1\n ) {\n console.error('打点上报错误,page和url不匹配,请检查上报的打点数据');\n }\n\n // 有些字段可能从 url 传过来,以 url 为主\n const {origin} = getQuery();\n\n // 来自哪\n if (origin) {\n logParams.origin = origin;\n }\n\n // 发送日志\n sendLog(LOG_URL, logParams);\n\n if (logTest) {\n logABTest(testParams)\n }\n}\n\n/**\n * abtest打点\n *\n * @param {Object} params 打点参数\n */\nexport function logABTest(params) {\n const current = window.currentABTest;\n const logParams = {\n uid: getCookie('BAIDUID'),\n create_at: new Date().getTime(),\n type: params.type,\n ext: params.ext || undefined\n };\n const rid = current && current.rid || params.rid;\n const url = ABTEST_LOG_URL + rid;\n // 发送日志\n sendLogABTest(url, logParams);\n}\n\n\n\n/**\n * 获取当前日志\n *\n * @return {Object} 日志对象\n */\nexport function getLog() {\n return initLogParams;\n}\n\n// 设置参数,主要用来设置当前页打出的 page 参数,这样不用手动去打了\nexport function setLog(params) {\n initLogParams = {\n ...initLogParams,\n ...params\n };\n}\n\n// 删除参数\nexport function delLog(key) {\n delete initLogParams[key];\n}\n\n/**\n * 是否在可视区域内\n *\n * @param {HTMLElement} el 需要判断的模块元素\n * @param {boolean} partiallyVisible 是否是部分出现就可以\n *\n * @return {boolean} 是否在可视区域内\n */\nconst inViewport = (el, partiallyVisible) => {\n const {top, bottom, left, right} = el.getBoundingClientRect();\n const {innerHeight, innerWidth} = window;\n\n return partiallyVisible\n ? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) \n && ((left < innerWidth) && (right > 0))\n : top >= 0 && bottom <= innerHeight && left >= 0 && right <= innerWidth;\n};\n\n/**\n * 可视区域打点\n *\n * @param {HTMLElement} ele 待打点模块\n * @param {Object} params 打点参数\n * @param {HTMLElement} scrollElem 待监听的ele外层滚动模块\n * @param {boolean=} partiallyVisible 是否部分出现算展现\n */\nfunction viewAreaLog(ele, params, scrollElem, partiallyVisible = true) {\n if (!ele) return;\n // 第一次就在可视区域\n if (inViewport(ele, partiallyVisible)) {\n params && log(params);\n }\n else {\n const lazyLoading = throttle(() => {\n if (!inViewport(ele, partiallyVisible)) {\n return;\n }\n\n params && log(params);\n\n window.removeEventListener('scroll', lazyLoading);\n scrollElem?.removeEventListener('scroll', lazyLoading);\n }, 100);\n\n window.addEventListener('scroll', lazyLoading);\n scrollElem?.addEventListener('scroll', lazyLoading);\n }\n}\n\n/**\n * 轮播打点\n *\n * @param {string} type 类型\n * @param {Array} list 来源\n * @param {number=} prevIndex 上一次统计长度\n * @param {Object=} other 其他参数\n */\nexport function carouselLog(type, index) {\n log({\n act: 'click',\n elem: `carousel-${type}`,\n pos: index,\n actType: type\n });\n}\n\n/**\n * 列表展现打点\n *\n * @param {string} type 类型\n * @param {Array} list 来源\n * @param {number=} prevIndex 上一次统计长度\n * @param {Object=} other 其他参数\n */\nexport function listLog(type, list, prevIndex = 0, currentPage, other = {}, AEtype) {\n let projectList = [];\n list.forEach((item, index) => {\n let logObj = {\n elem: `${type}-${item.isAd ? 'ad' : 'product'}`,\n adtype: item.ad_type,\n projectidx: prevIndex + index,\n pos: prevIndex + index,\n projectid: item.isAd ? item.product_id : item.project_id || (AEtype && item.guid),\n // 后续打点所有的id都传id即可,之前的projectid和articleid不变。\n id: item.isAd ? item.product_id : item.project_id || (AEtype && item.guid),\n /**\n * 当前打点中logid会跟随接口进行更新,同时回退时点击会上报新的logid,不便找到源头\n * 所以在这里新增listLogId上报,保存列表当页logid,以便list点击时溯源\n * 注意,需要给list的每一个item添加listLogId字段,以便show与click同源\n */\n listLogId: item.listLogId\n };\n if (!item.isAd) {\n logObj.projecttype = item.level || (AEtype && item.channel) || '';\n }\n projectList.push(logObj);\n });\n log({\n act: 'show',\n ...other,\n currentPage: currentPage,\n projectlist: JSON.stringify(projectList)\n });\n}\n\n/**\n * 内容中心列表展现打点\n *\n * @param {string} type 类型\n * @param {Array} list 来源\n * @param {number=} prevIndex 上一次统计长度\n */\nexport function contentListLog(type, list, prevIndex = 0, currentPage, other = {}) {\n let contentList = [];\n list.forEach((item, index) => {\n let logObj = {\n elem: item.product_id ? `${type}-ad` : type,\n contentidx: prevIndex + index,\n contentid: item.displayId,\n projectid: item.product_id,\n listLogId: item.listLogId,\n };\n contentList.push(logObj);\n });\n log({\n act: 'show',\n currentPage: currentPage,\n contentList: JSON.stringify(contentList),\n ...other\n });\n}\n\n/**\n * 收藏页展现打点\n *\n * @param {string} type 类型\n * @param {Array} list 来源\n * @param {number=} prevIndex 上一次统计长度\n */\nexport function heartLog(type, list, prevIndex = 0) {\n let heartList = [];\n list.forEach((item, index) => {\n let logObj = {\n elem: type,\n heartidx: prevIndex + index,\n heartid: item.projects && item.projects.project_id\n };\n heartList.push(logObj);\n });\n log({\n act: 'show',\n heartList: JSON.stringify(heartList)\n });\n}\n\n/**\n * 找相似页展现打点\n *\n * @param {string} type 类型\n * @param {Array} list 来源\n * @param {number=} prevIndex 上一次统计长度\n */\nexport function similarLog(type, list, prevIndex = 0) {\n let similarList = [];\n list.forEach((item, index) => {\n let logObj = {\n elem: type,\n similaridx: prevIndex + index,\n similarid: item.project_id\n };\n similarList.push(logObj);\n });\n log({\n act: 'show',\n heartList: JSON.stringify(similarList)\n });\n}\n\n/**\n * 商业曝光回传\n *\n * @param {string} url 回传url\n * @return {Promise} promise\n */\nexport function sendLogBusinessBack(url) {\n let list = [];\n return new Promise(() => {\n if (navigator.sendBeacon) {\n let retryTimes = 5;\n while (retryTimes-- > 0 && !navigator.sendBeacon(url)) {\n // 加入队列失败时,重试5次\n }\n }\n else {\n let index = list.push(document.createElement('img')) - 1;\n\n list[index].onload = list[index].onerror = list[index].onabort = function () {\n list[index] = list[index].onload = list[index].onerror = list[index].onabort = null;\n delete list[index];\n };\n list[index].src = url;\n }\n })\n}\n\n/**\n * ABTest 实验数据上报\n *\n * @param {string} url url\n * @param {string} params 参数\n */\nexport function sendLogABTest(url, params) {\n axios.get(url, {\n params\n });\n}\n\n// 基础方法\nVue.prototype.$log = log;\nVue.prototype.$logABTest = logABTest;\nVue.prototype.$getLog = getLog;\nVue.prototype.$setLog = setLog;\nVue.prototype.$setOfrLog = setOfrLog;\nVue.prototype.$delLog = delLog;\n// 业务封装\nVue.prototype.$viewAreaLog = viewAreaLog;\nVue.prototype.$listLog = listLog;\nVue.prototype.$carouselLog = carouselLog;\nVue.prototype.$contentListLog = contentListLog;\nVue.prototype.$heartLog = heartLog;\nVue.prototype.$similarLog = similarLog;\n\n","/**\n * @file UserAgent\n * @author chengong03(chengong03@baidu.com)\n */\n/* globals Box */\n// 浏览器 ua\nconst ua = window.navigator.userAgent;\n\n/**\n * 是否为 iOS 系统\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isIOS() {\n return /(iPhone|iPod|iPad)/.test(ua);\n}\n\n/**\n * 是否为 Android 系统\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isAndroid() {\n // 爱采购卖家版的 ua 只有 Android 这个字母,需要注意\n return /Android/.test(ua);\n}\n\n/**\n * 是否为 Android 系统\n *\n * @return {string} 特定系统\n */\nexport function getOS() {\n if (isIOS()) {\n return 'ios';\n }\n else if (isAndroid()) {\n return 'android';\n }\n return '';\n}\n\n/**\n * 是否为简搜\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isSC() {\n return /SearchCraft/.test(ua);\n}\n\n/**\n * 是否为手百\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isBB() {\n return /baiduboxapp/.test(ua);\n}\n\n/**\n * 是否为手百小程序\n * 1. 在开发者工具内是没有 /baiduboxapp/\n * 2. 百度小程序只能在手百打开\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isBBMp() {\n return /swan-baiduboxapp/.test(ua);\n}\n\n/**\n * 是否为微信\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isWx() {\n return /MicroMessenger/.test(ua);\n}\n\n/**\n * 是否为微信小程序\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isWxMp() {\n return isWx() && (/miniProgram/.test(ua) || window.__wxjs_environment === 'miniprogram');\n}\n\n/**\n * 是否为小程序\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isMp() {\n return isBBMp() || isWxMp();\n}\n\n/**\n * 是否为 PWA\n *\n * @return {boolean} 是否为特定系统\n */\nexport function isPWA() {\n return (window.matchMedia('(display-mode: standalone)').matches);\n}\n","/**\n * @file 工具函数\n * @author chengong03(chengong03@baidu.com)\n * @date 2018-11-23\n */\nimport qs from 'qs';\nimport md5 from 'md5.js';\nimport {query, queryAll, position, getScrollTop} from '@/utils/dom';\nimport {isIOS, isBB} from '@/utils/ua';\nimport {getCacheData, setCacheData} from '@/utils/cache';\n\n/**\n * accessid key\n *\n * @const\n * @type {string}\n */\nconst ACCESSID_CACHE_KEY = 'ACCESSID';\n\n/**\n * 通用延时(毫秒)\n * 超过这个时间,自动删除\n *\n * @const\n * @type {number}\n */\nconst COMMON_DELAY_TIME = 36e5;\n\n/**\n * CAP_AK\n *\n * @const\n * @type {string}\n */\nconst CAP_AK = '3biSkLPY1';\n\n/**\n * CAP_SK\n *\n * @const\n * @type {string}\n */\nconst CAP_SK = '2I7XVuhzr';\n\n/**\n * 数据分组\n *\n * @param {Array} arr 数字源\n * @param {number} size 每组的数量\n * @return {Array} 计算后的数组\n */\nexport function chunk(arr, size) {\n let result = [];\n\n size = window.parseInt(size) || 2;\n\n for (let x = 0; x < Math.ceil(arr.length / size); x++) {\n let start = x * size;\n let end = start + size;\n\n result.push(arr.slice(start, end));\n }\n\n return result;\n}\n\n/**\n * 获取 url query\n *\n * @return {Object} url 参数对下\n */\nexport function getQuery() {\n return qs.parse(window.location.search.slice(1));\n}\n\n/**\n * 拼接 url query\n *\n * @param {Object} urlParams 参数对下\n * @return {string} 拼接过的 url string\n */\nexport function setQuery(urlParams) {\n let query = getQuery();\n\n let newQuery = {\n ...query,\n ...urlParams\n };\n\n return qs.stringify(newQuery);\n}\n\nexport function replaceStateQuery(urlParams) {\n let search = setQuery(urlParams);\n window.history.replaceState(null, '', `?${search}`);\n}\n\n/**\n * 删除url query\n *\n * @param {string} name 删除的参数键名\n * @return {string} 删除指定参数后的queryString\n */\nexport function delQuery(name) {\n let query = getQuery();\n delete query[name];\n return qs.stringify(query);\n}\n\n/**\n * 补全 url\n *\n * @param {string} url 连接地址\n * @return {string}\n */\nexport function fullUrl(url) {\n if (!url) {\n return '';\n }\n\n // 如果有协议,则直接返回\n if (/^https?:/.test(url)) {\n return url;\n }\n\n // 如果以//开头,直接拼上协议头\n if (/^\\/\\//.test(url)) {\n return window.location.protocol + url;\n }\n\n // 否则拼上协议头&域名\n return window.location.origin + url;\n}\n\n/**\n * 对目标字符串进行html编码\n * 参考:https://github.com/BaiduFE/Tangram-base/blob/master/src/baidu/string/encodeHTML.js\n *\n * @param {string} source 目标字符串\n * @return {string} html编码后的字符串\n */\nexport function encodeHTML(source) {\n return String(source)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * 对目标字符串进行html解码\n * 参考:https://github.com/BaiduFE/Tangram-base/blob/master/src/baidu/string/decodeHTML.js\n *\n * @param {string} source 目标字符串\n * @return {string} html解码后的字符串\n */\nexport function decodeHTML(source) {\n let str = String(source)\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/ /g, ' ');\n // 处理转义的中文和实体字符\n return str.replace(/&#([\\d]+);/g, function (_0, _1) {\n return String.fromCharCode(parseInt(_1, 10));\n });\n}\n\n/**\n * 异步加载 script\n *\n * @param {string} url 链接\n * @param {Function} callback 回调函数\n * @param {Object} opt script标签属性\n */\nexport function loadScript(url, callback, opt = {}) {\n let script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.async = true;\n if (opt.charset) {\n script.charset = opt.charset;\n }\n if (opt.id) {\n script.id = opt.id;\n }\n\n script.onload = function () {\n callback();\n };\n script.onerror = function () {\n callback(new Error('load script err!'));\n };\n\n script.src = url;\n document.body.appendChild(script);\n}\n\n/**\n * 页面垂直平滑滚动到指定滚动高度\n *\n * @param {number} position 高度\n */\nexport function scrollSmoothTo(position) {\n // 当前滚动高度\n let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n // 滚动step方法\n let step = function () {\n // 距离目标滚动距离\n let distance = position - scrollTop;\n // 目标滚动位置\n scrollTop = scrollTop + distance / 5;\n if (Math.abs(distance) < 1) {\n window.scrollTo(0, position);\n }\n else {\n window.scrollTo(0, scrollTop);\n requestAnimationFrame(step);\n }\n };\n step();\n}\n\n/**\n * 页面垂直平滑滚动到指定元素\n *\n * @param {string} selector 元素的selector\n * @param {number} space 预留空间(顶格贴边会很难看)\n */\nexport function scrollSmoothToEle(selector, space = 0) {\n // 需要滚动到的目标元素距离顶部的高度 position\n let height = position(query(selector)).top - space;\n scrollSmoothTo(height);\n}\n\n/**\n * 获取元素在指定容器中的数量\n *\n * @param {HTMLElement} wrapEle 容器元素\n * @param {string} itemSelector 子元素选择器\n * @return {number} 展示的数量\n */\nexport function getInWrapCount(wrapEle, itemSelector) {\n let items = queryAll(itemSelector, wrapEle);\n let wrapHeight = wrapEle.offsetHeight;\n let num = 0;\n items.forEach(item => {\n let pos = position(item, wrapEle);\n if (pos.top < wrapHeight) {\n num++;\n }\n });\n return num;\n}\n\n/**\n * 返回数组中满足条件的索引\n *\n * @param {Array} array 数组\n * @param {Function} callback 检测函数\n * @param {Object} thisArgs this对象\n * @return {number} 索引值\n */\nexport function findIndex(array, callback, thisArgs) {\n // 类型校验\n if (!Array.isArray(array)) {\n throw new TypeError('@/utils/util/findIndex: array must be a Array');\n }\n if (typeof callback !== 'function') {\n throw new TypeError('@/utils/util/findIndex: callback must be a Function');\n }\n\n // 原生方法\n if (Array.prototype.findIndex) {\n return array.findIndex(callback, thisArgs);\n }\n\n // ployfill\n let index = 0;\n let length = array.length;\n\n while (index < length) {\n let value = array[index];\n if (callback.call(thisArgs, value, index, array)) {\n return index;\n }\n index++;\n }\n\n return -1;\n}\n\n/**\n * 是否为对象\n *\n * @param {Object} obj 目标对象\n * @return {boolean} 是否为对象\n */\nexport function isObj(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\n/**\n * 是否为空对象\n *\n * @param {Object} obj 目标对象\n * @return {boolean} 是否为空对象\n */\nexport function isEmptyObj(obj) {\n return JSON.stringify(obj) === '{}';\n}\n\n/**\n * 获取对象指定key或key包含的字符串对应的value\n *\n * @param {Object} obj 目标对象\n * @param {Object} target key或者key包含的字符串\n * @param {boolean} type 指定key 为true,key片段为false\n * @return {Any} result\n */\nexport function getObjAnyVal(obj, target, type = true) {\n let result;\n Object.keys(obj).map(key => {\n if (type && key === target) {\n result = obj[key];\n }\n\n if (!type && key.indexOf(target) !== -1) {\n result = obj[key];\n }\n\n if (isObj(obj[key])) {\n result = getObjAnyVal(obj[key], target);\n }\n });\n\n return result;\n}\n\n\n/**\n * 深拷贝\n *\n * @param {Object} obj 目标对象\n * @return {Object} 拷贝后的对象\n */\nexport function deepCopy(obj) {\n return obj && JSON.parse(JSON.stringify(obj));\n}\n\n/**\n * 数字前是否添加0\n *\n * @param {number} num 目标数字\n * @return {string} 处理后的数字\n */\nexport function isAddZero(num) {\n return num < 10 ? '0' + num : num;\n}\n\n/**\n * 获取 url 参数\n *\n * @param {string} rawUrl 原始链接\n * @return {Object} query值\n */\nexport function getUrlQuery(rawUrl) {\n if (!rawUrl) {\n return '';\n }\n const [url] = rawUrl.split('#');\n return qs.parse(url.split('?')[1] || '');\n}\n\n/**\n * 拼接 url query\n *\n * @param {string} rawUrl 原始链接\n * @param {Object} urlParams 参数对象\n * @return {string} 拼接过的 url string\n */\nexport function addUrlQuery(rawUrl, urlParams) {\n if (!rawUrl) {\n return '';\n }\n const [url, hash = ''] = rawUrl.split('#');\n const [path, queryStr = ''] = url.split('?');\n const query = qs.parse(queryStr);\n\n let newQueryStr = qs.stringify({\n ...query,\n ...urlParams\n });\n\n return `${path}?${newQueryStr}${hash ? '#' : ''}${hash}`;\n}\n\n/**\n * jump url 拼接 timeSign\n * 含 '/b2bsearch/jump?' 字段的广告链接需要拼接 timeSign,统计用\n *\n * @param {string} rawUrl 原始链接\n * @param {string} timeSign timeSign\n * @return {string} 结果url\n */\nexport function jumpUrlAddTimeSign(rawUrl = '', timeSign = '') {\n // 普通链接直接返回原链接\n if (rawUrl.indexOf('/b2bsearch/jump?') === -1) {\n return rawUrl;\n }\n\n let query = timeSign ? ('&timeSign=' + timeSign) : '';\n\n // 注意后端有时会返回含有两个?的链接,如果用 addUrlQuery 方法会导致链接不可用\n return rawUrl + query;\n}\n\n/**\n * 生成随机的 pageId\n *\n * @return {string} pageId\n */\nexport function genPageId() {\n return Math.random().toString().substr(3, 17);\n}\n\n/**\n * 读取cookie值\n *\n * @param {string} name 键名\n * @return {string} 值\n */\nexport function getCookie(name) {\n if (name) {\n let cookie = ' ' + document.cookie + ';';\n let searchName = ' ' + name + '=';\n let startIndex = cookie.indexOf(searchName);\n if (startIndex !== -1) {\n let endIndex = cookie.substring(startIndex).indexOf(';');\n return cookie.substring(startIndex + searchName.length, startIndex + endIndex);\n }\n }\n return null;\n}\n\n/**\n * 判断链接是否为广告链接\n *\n * @param {string} url 是否为广告链接\n * @return {boolean} 是否为广告链接\n */\nexport function isAdLink(url) {\n return /\\.php\\?url=([^.]+)\\./.test(decodeURIComponent(url));\n}\n\n/**\n * 数字千位增加分割逗号\n *\n * @param {number} num 原始数据\n * @return {number} 处理后的数据\n */\nexport function kSplit(num) {\n return (num || 0).toString().replace(/(\\d)(?=(?:\\d{3})+$)/g, '$1,');\n}\n\n/**\n * 即将进入搜索页时,搜索框能否可以自动聚焦\n *\n * @return {boolean} 是否可以自动聚焦\n */\nexport function searchDetailAutoFocus() {\n // 安卓永远自动聚焦\n // iOS 在滚动距离较小时自动聚焦,否则会闪抖\n if (isIOS() && getScrollTop() > 44) {\n return false;\n }\n return true;\n}\n\n/**\n * 生成uuid\n *\n * @return {string} uuid\n */\nexport function uuid() {\n let s = [];\n let hexDigits = '0123456789abcdef';\n for (let i = 0; i < 36; i++) {\n s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);\n }\n s[14] = '4';\n s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);\n s[8] = s[13] = s[18] = s[23] = '-';\n return s.join('');\n}\n\n/**\n * 判断rgb颜色是否为深色\n *\n * @param {string} rgb 6位rgb颜色\n * @return {boolean} 是否为深色\n */\nexport function isColorDark(rgb) {\n let rgbArr = rgb.match(/[a-zA-Z0-9]{2}/g);\n let res = rgbArr.reduce((res, i) => {\n i = parseInt(i, 16) / 255;\n res[0] = Math.max(res[0], i);\n res[1] = Math.min(res[1], i);\n return res;\n }, [0, 1]);\n return (res[0] + res[1]) / 2 < 0.5;\n}\n\nlet initRouterKey;\n\n/**\n * 初始化首次进入的判断\n */\nexport function initFirstHistory() {\n initRouterKey = (window.history.state || {}).key || '';\n}\n\n/**\n * 判断是否首次进入\n *\n * @return {boolean} 是否首次进入\n */\nexport function isFirstHistory() {\n if (!initRouterKey) {\n initRouterKey = (window.history.state || {}).key || '';\n return true;\n }\n\n let key = (window.history.state || {}).key;\n\n return key === initRouterKey;\n}\n\n/**\n * 初始化列表页来自aladdin首次加载完成的标记\n */\nexport function initAladdinListHistory() {\n setCacheData('FIRSTLOADALADDINLIST', 1);\n}\n\n/**\n * 判断是否是首次加载完成来自aladdin的列表\n *\n * @return {boolean} 是否首次加载完成来自aladdin的列表\n */\nexport function isAladdinListHistory() {\n return !getCacheData('FIRSTLOADALADDINLIST');\n}\n\n/**\n * 判断是否是固话\n *\n * @param {string} phone 固话号码\n * @return {boolean} 是否是固话\n */\nexport function isTel(phone) {\n const regTel = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\n return regTel.test(phone);\n}\n\n/**\n * 价格格式化\n *\n * @param {boolean} isAd 是否是广告\n * @param {Object} data 价格数据\n * @param {number} digits 保留位数\n * @param {number} specific 当只有min时 显示具体数值 不要 “起”\n * @return {Object} ret 格式化数据\n */\nexport function formatInvestment(isAd = false, data = {}, digits = -1, specific = false) {\n let ret = {};\n let {min, max, amount, amountUnit} = data || {};\n if (isAd) {\n ret = {\n amount,\n unit: amountUnit\n };\n return ret;\n }\n if (digits > 0) {\n let base = Math.pow(10, digits);\n min = Math.floor(min * base) / base;\n max = Math.floor(max * base) / base;\n }\n\n if (max && max !== -1) {\n ret = {\n amount: `${ (!min || min === -1) ? 0\n : min}-${max}`,\n unit: '万'\n };\n return ret;\n }\n // specific: 如果需要展示具体的数额 不要 “起”\n ret = {\n amount: `${ (!min || min === -1) ? 0\n : min}`,\n unit: specific ? '万' : '万起'\n };\n\n return ret;\n}\n\n/**\n *针对IOS系统,解决Input中的focus问题[IOS系统默认在用户没有发生交互前拒绝自动聚焦]\n *\n * @export\n * @param {*} el DOM节点\n * @param {*} timeout 延迟出现的时间\n */\nexport function focusAndOpenKeyboard(el, timeout) {\n let time;\n if (!timeout) {\n time = 500;\n }\n if (el) {\n time = timeout;\n // Align temp input element approximately where the input element is\n // so the cursor doesn't jump around\n const __tempEl__ = document.createElement('input');\n __tempEl__.style.position = 'absolute';\n __tempEl__.style.top = (el.offsetTop + 7) + 'px';\n __tempEl__.style.left = el.offsetLeft + 'px';\n __tempEl__.style.height = 0;\n __tempEl__.style.opacity = 0;\n // Put this temp element as a child of the page and focus on it\n document.body.appendChild(__tempEl__);\n __tempEl__.focus();\n\n // The keyboard is open. Now do a delayed focus on the target element\n setTimeout(function () {\n el.focus();\n el.click();\n // Remove the temp element\n document.body.removeChild(__tempEl__);\n }, time);\n }\n}\n\n// set accessid\nexport function setAccessid({add = false}) {\n let accessidObj = getCacheData(ACCESSID_CACHE_KEY);\n const now = new Date().getTime();\n // 页面没改变一次,深度+1\n if (add && accessidObj && accessidObj.value) {\n accessidObj.value[2]++;\n }\n\n // 如果没有accessidObj || 超过设定时间 重新set\n if (!accessidObj\n || accessidObj && (now - accessidObj.time > COMMON_DELAY_TIME)) {\n const accessid = window._tplData && window._tplData.trace.logid || '';\n accessidObj = {\n value: [accessid, 'D', 0],\n time: new Date().getTime()\n };\n }\n\n setCacheData(ACCESSID_CACHE_KEY, accessidObj);\n}\n\n/**\n * get accessid\n *\n * @return {Array} value\n */\nexport function getAccessid() {\n const accessidObj = getCacheData(ACCESSID_CACHE_KEY);\n return accessidObj && accessidObj.value || [];\n}\n\n/**\n * 节流函数\n *\n * @param {Function} func 执行的函数\n * @param {number} delay 延迟\n * @return {Function} 包装的节流函数\n */\nexport const debounce = (func, delay) => {\n let timer = null;\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n func.apply(this);\n timer = null;\n }, delay);\n };\n};\n\n/**\n * 判断是否是spider监控\n *\n * @return {boolean} 是/否\n */\nexport function isSpider() {\n let userAgent = navigator.userAgent.toLowerCase();\n return userAgent.indexOf('spider/monitor') > -1;\n}\n\n/**\n * 初始化表单Json 缓存\n *\n * @param {boolean} version json 版本\n * @param {Array} list 数组对象\n */\nexport function setInquiryFormCache(version, list = []) {\n setCacheData('INQUIRYFORMJSON', {version, cacheList: list});\n}\n\n/**\n * 获取表单Json 缓存\n *\n * @return {Object} 表单Json\n */\nexport function getInquiryFormCache() {\n return getCacheData('INQUIRYFORMJSON') || {};\n}\n\n/**\n * set使用哪种搜索结果页\n *\n * @param {String} name 列表页名称\n * @return {string} 搜过结果页类型\n */\nexport function setSearchResultList(name) {\n return setCacheData('SET_SEARCH_RESULT_LIST', name);\n}\n\n/**\n * 获取使用哪种搜索结果页\n *\n * @return {string} 搜过结果页类型\n */\nexport function getSearchResultList() {\n return getCacheData('SET_SEARCH_RESULT_LIST') || 'List';\n}\n\n/**\n * 获取网络类型\n *\n */\nexport function getNetworkType(callback) {\n // 手百环境使用协议获取网络类型\n if (isBB()) {\n // 加上时间戳,防止同时有多个组件调用函数\n const cbKey = 'get_network_type_cb' + new Date().getTime();\n // 注册手百回调函数\n window[cbKey] = function (res) {\n try {\n const objRes = typeof res === 'string' ? JSON.parse(res) : res;\n callback(objRes && objRes.data && objRes.data.networkType || '');\n }\n catch (e) {\n callback();\n }\n finally {\n // 移除手百回调函数\n delete window[cbKey];\n }\n };\n // 调起协议\n let node = document.createElement('iframe');\n node.style.display = 'none';\n node.src = 'baiduboxapp://v19/utils/getNetworkType?callback=' + cbKey;\n let body = document.body || document.getElementByTagName('body')[0];\n body.appendChild(node);\n // 销毁iframe\n setTimeout(() => {\n body.removeChild(node);\n node = null;\n }, 0);\n }\n else {\n // 浏览器环境使用connection对象获取网络类型\n const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n const connNetType = connection && connection.type;\n // 大搜环境使用ecom对象获取网络类型\n const ecomParams = window.ecom && window.ecom.wise && window.ecom.wise.PARAMS;\n const ecomNetType = (ecomParams && ecomParams.netType === '1') ? 'wifi' : ''; // netType为1时代表wifi\n // 优先使用浏览器connection对象获取网络类型\n callback(connNetType || ecomNetType);\n }\n}\n\n/**\n * 搜索词高亮\n *\n */\nexport function brightenKeyWord(val, keyword) {\n if(!keyword) return val;\n const Reg = new RegExp(keyword, 'g');\n if (val) {\n return val.replace(Reg, `${keyword}`)\n }\n}\n\n/**\n * 格式化时间\n *\n */\nexport function secondToDate(allSecond) {\n let retShow = '';\n if (+allSecond) {\n let h = Math.floor(+allSecond / 3600);\n let m = Math.floor((+allSecond / 60 % 60));\n let s = Math.floor((+allSecond % 60));\n if (h) {\n let showH = timeToStringShow(h);\n retShow = retShow + showH + ':';\n !m && (retShow += '00');\n !s && (retShow += ':00');\n }\n if (m) {\n let showM = timeToStringShow(m);\n retShow = retShow + showM + ':';\n !s && (retShow += '00');\n }\n if (s) {\n !m && (retShow = retShow + '00'+ ':')\n let showS = timeToStringShow(s);\n retShow = retShow + showS;\n }\n }\n return retShow;\n}\n\n/**\n * 时间格式化\n *\n */\nexport function timeToStringShow(time) {\n let ret = '';\n if (+time > 0 && +time < 10) {\n ret = '0' + time;\n }\n else if (+time >= 10 && +time <= 59) {\n ret = time;\n }\n return ret;\n}\n\n/**\n * 设置二维码缓存\n *\n * @param {String} key 二维码type inquiry 咨询弹窗\n * @param {Object} res 二维码相关内容\n */\n export function setQRcodeCache(key, res) {\n let cacheObj = getCacheData('QRCODE_DATA') || {};\n cacheObj[key] = {...res};\n setCacheData('QRCODE_DATA', cacheObj);\n}\n\n/**\n * 获取二维码缓存\n *\n * @param {String} key 二维码type inquiry 咨询弹窗\n * @return {Object} 二维码内容\n */\nexport function getQRcodeCache(key) {\n if (key) {\n return getCacheData('QRCODE_DATA') && getCacheData('QRCODE_DATA')[key] || '';\n }\n\n return getCacheData('QRCODE_DATA') || {};\n}\n\n/**\n * 驼峰转横线分割\n * aBcd -> a-bcd\n */\nexport function camelToLine(name) {\n const str = name.replace(/([A-Z])/g,\"-$1\").toLowerCase();\n return str.replace(/^(-)/, \"\");\n}\n\nexport function checkCaptcha(str) {\n return new md5().update(str).digest('hex');\n}\n\nexport function getCapAkSk() {\n return CAP_AK.substr(0, CAP_AK.length - 1) + CAP_SK.substr(1);\n}\n\n/**\n * 生成指定长度的随机字符串\n *\n */\nexport function randomString(length) {\n const str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let result = '';\n for (let i = length; i > 0; --i) {\n result += str[Math.floor(Math.random() * str.length)];\n }\n return result;\n}\n\n\n/**\n * json字符串转json对象\n * @param { String } jsonStr json字符串\n */\n/* eslint-disable no-eval */\nexport function parseJson(jsonStr){\n return JSON.parse(jsonStr, (k, v) => {\n try{\n // 将正则字符串转成正则对象\n if (eval(v) instanceof RegExp) {\n return eval(v);\n }\n }catch(e){\n // nothing\n }\n\n return v;\n });\n}\n/* eslint-disable no-eval */\n\n/**\n * json对象转json字符串\n * @param { Object } json json对象\n */\nexport function stringifyJson(json){\n return JSON.stringify(json, (k, v) => {\n // 将正则对象转换为正则字符串\n if(v instanceof RegExp){\n return v.toString();\n }\n\n return v;\n });\n}\n\nexport function getQueryString(params, name) {\n const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');\n const r = params.match(reg);\n if (r != null) {\n return unescape(r[2]);\n }\n return null;\n}\n\n/**\n * 替换掉html标签里面的br标签\n * \n * @param {string} src \n * @returns \n */\nfunction removeBrTag(src = '') {\n return src ? src.replaceAll('
', '') : '';\n}\n\n/**\n * 替换掉html标签里面的img标签\n * \n * @param {string} src \n * @returns \n */\nfunction removeImgTag(src = '') {\n let imgReg = /|\\/>)/gi //匹配图片中的img标签\n return src ? src.replaceAll(imgReg, '') : '';\n}\n\n/**\n * 针对多个标签嵌套的情况,手工移除掉前面的起始标签\n * \n * @param {string} src\n * @return\n */\nfunction replaceStartTag(src) {\n let regEx = new RegExp(\"<[a-zA-Z]*?>([\\\\s\\\\S]*?)\", 'g');\n return src ? src.replaceAll(regEx, '') : '';\n}\n\n/**\n * 获取html中的数据\n * @param {string} htmlStr\n * @return\n */\nexport function getCotentFromHtml(htmlStr) {\n // 匹配html标签,例如\"

xxx

\"这种格式\n const HTML_TAG_PATTERN = new RegExp('<[a-zA-Z]+.*?>([\\\\s\\\\S]*?)', 'g');\n let res = [];\n // 数据预处理\n let str = replaceStyle(removeImgTag(removeBrTag(htmlStr)));\n let matches = str.matchAll(HTML_TAG_PATTERN);\n for (const match of matches) {\n let matchContent = match[1].trim();\n // 针对多个标签嵌套的情况进行处理\n matchContent = replaceStartTag(matchContent);\n res.push(matchContent);\n }\n return res.join('');\n}\n/**\n * 格式化为N位,前面补0\n * @param {Number} num 数字\n * @param {Number} n 输出的字符串长度\n */\nexport function prefixInteger(num, n) {\n return num.toString().padStart(n, '0');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"287\":\"iconfont\",\"761\":\"Poi\",\"972\":\"Strategy\"}[chunkId] || chunkId) + \".\" + {\"18\":\"79cad047\",\"287\":\"a5633b17\",\"761\":\"e63ffd3d\",\"972\":\"ab234ac9\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + (chunkId === 972 ? \"Strategy\" : chunkId) + \".\" + {\"18\":\"83f1753a\",\"972\":\"0be0ad29\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"ly-m:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"18\":1,\"972\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkly_m\"] = self[\"webpackChunkly_m\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(7072); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","attrs","staticRenderFns","script","component","Vue","use","Vuex","state","durationState","pageStartTime","mutations","SET_DURATION_STATE","status","SET_PAGE_START_TIME","time","actions","modules","beforeCreate","document","addEventListener","visibilityState","store","commit","Date","getTime","setDurationLog","window","methods","log","act","statetime","config","productionTip","prototype","$platform","$theme","$toast","VueClipboard","mixin","durationLogMixin","routerMethods","router","map","method","originalCall","Router","location","onResolve","onReject","call","catch","err","beforeEach","to","from","next","meta","bodyBg","body","style","background","toName","name","setLog","page","pageid","genPageId","el","h","App","$mount","initMApp","StrategyDetail","PoiDetail","VueRouter","routes","path","title","mode","base","NO_LOGID_AJAX","STATE","observable","loginInfo","requestArr","get","field","value","$globalState","refreshLogin","tplData","_tplData","newLoginStatus","newTplData","defaultParams","accessid","getAccessid","rid","getQuery","params","ajax","join","device","inNoLogidList","url","item","indexOf","axios","interceptors","request","sendDate","interFace_startTime","originUrl","prefix","queryString","qs","csrftoken","trace","headers","cancelToken","CancelToken","cancel","push","error","Promise","reject","response","data","logid","traceid","changeLogId","Array","isArray","traceMap","responseURL","isCancel","$http","CACHE_SCROLL_TOP","CACHE_DATA","META","sessionStorage","sessionStore","localStorage","localStore","setCacheScroll","key","scrollTop","getScrollTop","setItem","restoreCacheScroll","initScrollTop","getItem","setScrollTop","delCacheScroll","removeItem","setCacheData","cacheData","useLocal","arguments","length","undefined","fullKey","JSON","stringify","getCacheData","parse","delCacheData","setCacheMeta","query","val","queryObj","getCacheMeta","delCacheMeta","genUrlKey","decodeURI","pathname","search","addClass","element","className","classList","add","classes","split","i","n","hasClass","contains","documentElement","pageYOffset","offset","getClientWidth","innerWidth","clientWidth","getClientHeight","innerHeight","clientHeight","LOG_URL","ABTEST_LOG_URL","hostname","OFR_CACHE_KEY","OFR_DELAY_TIME","FROM_CACHE_KEY","FROM_DELAY_TIME","initLogParams","tpl","biz","isBBMp","os","getOS","sendLog","list","logUrl","navigator","sendBeacon","retryTimes","index","createElement","onload","onerror","onabort","src","setOfrLog","_ref","ofr","checkOfrLog","ofrObj","fromObj","now","delLog","logTest","testParams","otherParams","logParams","_t","href","origin","logABTest","current","currentABTest","uid","getCookie","create_at","type","ext","sendLogABTest","getLog","inViewport","partiallyVisible","top","bottom","left","right","getBoundingClientRect","viewAreaLog","ele","scrollElem","lazyLoading","throttle","removeEventListener","carouselLog","elem","pos","actType","listLog","prevIndex","currentPage","other","AEtype","projectList","forEach","logObj","isAd","adtype","ad_type","projectidx","projectid","product_id","project_id","guid","id","listLogId","projecttype","level","channel","projectlist","contentListLog","contentList","contentidx","contentid","displayId","heartLog","heartList","heartidx","heartid","projects","similarLog","similarList","similaridx","similarid","$log","$logABTest","$getLog","$setLog","$setOfrLog","$delLog","$viewAreaLog","$listLog","$carouselLog","$contentListLog","$heartLog","$similarLog","ua","userAgent","isIOS","test","isAndroid","ACCESSID_CACHE_KEY","COMMON_DELAY_TIME","CAP_AK","CAP_SK","chunk","arr","size","result","parseInt","x","Math","ceil","start","end","slice","setQuery","urlParams","newQuery","replaceStateQuery","history","replaceState","delQuery","fullUrl","protocol","encodeHTML","source","String","replace","decodeHTML","str","_0","_1","fromCharCode","loadScript","callback","opt","async","charset","Error","appendChild","scrollSmoothTo","position","step","distance","abs","scrollTo","requestAnimationFrame","scrollSmoothToEle","selector","space","height","getInWrapCount","wrapEle","itemSelector","items","queryAll","wrapHeight","offsetHeight","num","findIndex","array","thisArgs","TypeError","isObj","obj","Object","toString","isEmptyObj","getObjAnyVal","target","keys","deepCopy","isAddZero","getUrlQuery","rawUrl","addUrlQuery","hash","queryStr","newQueryStr","jumpUrlAddTimeSign","timeSign","random","substr","cookie","searchName","startIndex","endIndex","substring","isAdLink","decodeURIComponent","kSplit","searchDetailAutoFocus","uuid","s","hexDigits","floor","isColorDark","rgb","rgbArr","match","res","reduce","max","min","initRouterKey","initFirstHistory","isFirstHistory","initAladdinListHistory","isAladdinListHistory","isTel","phone","regTel","formatInvestment","digits","specific","ret","amount","amountUnit","unit","pow","focusAndOpenKeyboard","timeout","__tempEl__","offsetTop","offsetLeft","opacity","focus","setTimeout","click","removeChild","setAccessid","accessidObj","debounce","func","delay","timer","clearTimeout","apply","isSpider","toLowerCase","setInquiryFormCache","version","cacheList","getInquiryFormCache","setSearchResultList","getSearchResultList","getNetworkType","isBB","cbKey","objRes","networkType","e","node","display","getElementByTagName","connection","mozConnection","webkitConnection","connNetType","ecomParams","ecom","wise","PARAMS","ecomNetType","netType","brightenKeyWord","keyword","Reg","RegExp","secondToDate","allSecond","retShow","m","showH","timeToStringShow","showM","showS","setQRcodeCache","cacheObj","getQRcodeCache","camelToLine","checkCaptcha","md5","update","digest","getCapAkSk","randomString","parseJson","jsonStr","k","v","eval","stringifyJson","json","getQueryString","reg","r","unescape","removeBrTag","replaceAll","removeImgTag","imgReg","replaceStartTag","regEx","getCotentFromHtml","htmlStr","HTML_TAG_PATTERN","replaceStyle","matches","matchAll","matchContent","trim","prefixInteger","padStart","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","getter","__esModule","d","a","leafPrototypes","getProto","getPrototypeOf","__proto__","t","then","ns","create","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","needAttach","scripts","getElementsByTagName","getAttribute","nc","setAttribute","onScriptComplete","prev","event","doneFns","parentNode","bind","head","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","resolve","linkTag","rel","nonce","onLinkComplete","errorType","realHref","code","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}