{"version":3,"sources":["webpack:///./node_modules/@em/ym/lib/utils/callBackProxy.js","webpack:///./src/api/axios.js","webpack:///./src/api/comment.js","webpack:///./src/api/channel.js","webpack:///./src/api/course.js","webpack:///./src/api/coupon.js","webpack:///./src/api/exchange.js","webpack:///./src/api/vote.js","webpack:///./src/api/activity.js","webpack:///./src/api/api.js","webpack:///./node_modules/@em/ym/lib/common/common.js","webpack:///./node_modules/@em/ym/lib/getClientInfo.js","webpack:///./node_modules/@em/ym/lib/appInfo/skstockAppInfo.js","webpack:///./node_modules/@em/ym/lib/appInfo/ymstockAppInfo.js","webpack:///./node_modules/@em/ym/lib/appInfo/AppInfo.js","webpack:///./node_modules/@em/ym/lib/log/share.js","webpack:///./node_modules/@em/ym/lib/common/ajax.js","webpack:///./node_modules/@em/ym/lib/log/funnelLog.js","webpack:///./node_modules/@em/ym/lib/common/Urls.js","webpack:///./node_modules/@em/ym/lib/log/nativeLog.js","webpack:///./node_modules/@em/ym/lib/log/ymstockLog.js","webpack:///./node_modules/@em/ym/lib/log/index.js","webpack:///./node_modules/@em/ym/node_modules/uuid/dist/esm-browser/rng.js","webpack:///./node_modules/@em/ym/node_modules/uuid/dist/esm-browser/regex.js","webpack:///./node_modules/@em/ym/node_modules/uuid/dist/esm-browser/validate.js","webpack:///./node_modules/@em/ym/node_modules/uuid/dist/esm-browser/stringify.js","webpack:///./node_modules/@em/ym/node_modules/uuid/dist/esm-browser/v1.js","webpack:///./node_modules/@em/ym/lib/getUserToken.js","webpack:///./node_modules/@em/ym/lib/common/protocol.js","webpack:///./node_modules/@em/ym/lib/utils/utils.js"],"names":["WEB_CALLBACK","onSuccessCache","Object","create","onFailCache","callbackProxy","options","middlewareCallback","callback","result","json","JSON","parse","e","console","error","msg","onSuccess","onFail","timeStr","Date","getTime","callbackParams","push","window","__EMONEY_MOBILE_WEB_CALLBACK__","type","info","service","axios","baseURL","config","baseUrl","timeout","interceptors","request","use","getUserSign","then","userSign","headers","Promise","reject","response","log","url","data","status","resolve","statusText","message","Comment","params","post","commentId","Channel","appId","path","Course","viewState","method","Coupon","catch","exchange","code","Vote","Activity","comment","channel","course","coupon","vote","activity","LoginType","ControlZxgType","ShareType","openNative","location","href","openurl","test","sourcePath","getSourcePath","stringify","goods","search","indexOf","replace","login","Phone","bindPhone","ClientInfoTokenType","clientInfoCached","clientInfoCache","updateClientInfoCache","keys","map","key","toLowerCase","middleware","callbacks","pending","ymstockCallbacks","ymstockPending","flushCallbacks","clientInfo","isYmstock","copies","slice","length","i","productId","WEB_CALLBACK_APPINFO_CLIENT_INFO","WEB_CALLBACK_APPINFO_CLIENT_INFO2","appInfo","hardwareCode","guid","normalizeOptions","_options","complete","getClientInfo","assign","forceUpdate","callGetAppInfo","getAppInfo","_resolve_1","_callback","success","toString","setTimeout","appInfoResult_1","errorText","warn","skstockAppInfo","isPhone","loginType","compareVersion","version","appVersion","isIncludeEqual","isSupport","versionArr","split","appVersionArr","ymstockAppInfo","parseInt","getParam","hasBindPhone","emoneyLoginType","parseToInt","num","isNaN","name","val","_val","this","pd","factory","isBindPhone","isLogin","statusBarHeight","clientStatusBarHeight","screenHeight","document","documentElement","clientHeight","titleBarHeight","clientTitleBarHeight","args","_i","arguments","Ymstock","apply","FunnelLogType","$pageId","$setPageId","pageId","$sourcePath","$setSourcePath","$getSourcePath","formatData","arr","hasOwnProperty","join","ajax","xhr","XMLHttpRequest","toUpperCase","async","undefined","onreadystatechange","readyState","status_1","responseText","ontimeout","Math","random","open","send","setRequestHeader","contentType","prototype","call","pageViewExtraInfo","testUrl","$isTest","isTest","Ycstock","DOMAIN_YKTAPI","DOMAIN_MSTAT","getOriginalSourcePath","normalizeSourcePath","uploadFunnelLog","getUserToken","Urls","userAnalysis","extraInfo","funnelLog","originalSourcePath","funnelLogType","Source","SourceClick","currentSourcePath","Click","pageView","pageData","setAnalysisPageId","click","eventId","eventData","addEventRecord","ymstockLog","uploadCount","requestUrl","DOMAIN_MLOG","currentDate","uploadLog","TargetView","SourceView","EnterTime","QuitTime","Duration","Attribute","ClickCount","EventId","EventDate","_this","uploadLogApi","UserId","HardwareCode","Version","SystemVersion","ProductId","PlatformId","normalizePageViewOptions","targetView","attribute","normalizeClickOptions","Log","nativeLog","disableFunnelLog","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","byteToHex","substr","offset","TypeError","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","b","Array","node","clockseq","seedBytes","msecs","now","nsecs","dt","tl","tmh","n","userToken","emoneyToken","token","mv","Number","vd","ar","authorization","onlyYcstock","setUserSign","HtmlApiKey","HtmlSecret","valueOf","signStr","NativeProtocolMap","Map","Skstock","nativeProtocol","get","setNativeProtocol","protocol","setNativeProtocolByProductId","isClient","isServer","isObject","isFunction","isDef","isUndef","u","navigator","userAgent","queryStringArgsCached","queryString","resArr","str","res","forEach","item","_a","value","urlQueryString","_url","searchObj","__url","__search","_search","getQueryStringArgs","qs","substring","items","len","regx","RegExp","match","decodeURIComponent","s","getDocumentHeight","body","html","max","offsetHeight","scrollHeight","formatDate","date","formatStr","_date","Week","getFullYear","getYear","getMonth","getDay","getDate","getHours","getMinutes","getSeconds"],"mappings":"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","file":"js/chunk-6abd6947.a1bd1783.js","sourcesContent":["// 声明全局回调\r\nimport { isClient } from './utils';\r\nvar WEB_CALLBACK = [];\r\nvar onSuccessCache = Object.create(null);\r\nvar onFailCache = Object.create(null);\r\nif (isClient) {\r\n window.__EMONEY_MOBILE_WEB_CALLBACK__ = WEB_CALLBACK;\r\n window.onSuccess = function (type, callbackParams) {\r\n console.info('onSuccess', type, callbackParams);\r\n if (onSuccessCache[callbackParams]) {\r\n onSuccessCache[callbackParams](type);\r\n }\r\n };\r\n window.onFail = function (type, callbackParams) {\r\n console.info('onFail', type, callbackParams);\r\n if (onFailCache[callbackParams]) {\r\n onFailCache[callbackParams](type);\r\n }\r\n };\r\n}\r\n/**\r\n * 回调函数代理\r\n */\r\nexport function callbackProxy(options) {\r\n var middlewareCallback = options.callback || function () { };\r\n var result = options;\r\n var callback = function (json) {\r\n if (typeof json === 'string') {\r\n try {\r\n json = JSON.parse(json);\r\n }\r\n catch (e) {\r\n console.error(\"\\u56DE\\u8C03\\u53C2\\u6570(\" + json + \")\\u9519\\u8BEF\\uFF0C\\u65E0\\u6CD5\\u89E3\\u6790\\u4E3Ajson\");\r\n json = {\r\n msg: e\r\n };\r\n }\r\n }\r\n if (middlewareCallback) {\r\n middlewareCallback(json);\r\n }\r\n };\r\n if (options.onSuccess || options.onFail) {\r\n var timeStr = new Date().getTime() + '';\r\n result.callbackParams = timeStr;\r\n onSuccessCache[timeStr] = options.onSuccess || function () { };\r\n onFailCache[timeStr] = options.onFail || function () { };\r\n }\r\n else {\r\n result.callback = \"__EMONEY_MOBILE_WEB_CALLBACK__[\" + (WEB_CALLBACK.push(callback) - 1) + \"]\";\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=callBackProxy.js.map","import { getUserSign } from '@em/ym'\r\nimport axios from 'axios'\r\nimport config from './config'\r\n\r\nconst service = axios.create({\r\n baseURL: config.baseUrl,\r\n timeout: 3 * 1000\r\n})\r\n\r\nservice.interceptors.request.use(\r\n config => {\r\n return getUserSign().then(userSign => {\r\n config.headers = {\r\n ...config.headers,\r\n ...userSign\r\n }\r\n return config\r\n })\r\n },\r\n error => {\r\n Promise.reject(error)\r\n }\r\n)\r\n\r\nservice.interceptors.response.use(\r\n response => {\r\n console.log(\r\n '=====url',\r\n response.config.url,\r\n '\\n=====response',\r\n response.data\r\n )\r\n if (response.status == 200) {\r\n return response.data\r\n }\r\n return Promise.resolve(response.statusText)\r\n },\r\n error => {\r\n if (error && error.response) {\r\n switch (error.response.status) {\r\n case 400:\r\n error.message = '错误请求'\r\n break\r\n case 401:\r\n error.message = '未授权,请重新登录'\r\n break\r\n case 403:\r\n error.message = '拒绝访问'\r\n break\r\n case 404:\r\n error.message = '请求错误,未找到该资源'\r\n break\r\n case 405:\r\n error.message = '请求方法未允许'\r\n break\r\n case 408:\r\n error.message = '请求超时'\r\n break\r\n case 500:\r\n error.message = '服务器端出错'\r\n break\r\n case 501:\r\n error.message = '网络未实现'\r\n break\r\n case 502:\r\n error.message = '网络错误'\r\n break\r\n case 503:\r\n error.message = '服务不可用'\r\n break\r\n case 504:\r\n error.message = '网络超时'\r\n break\r\n case 505:\r\n error.message = 'http版本不支持该请求'\r\n break\r\n default:\r\n error.message = `连接错误${error.response.status}`\r\n }\r\n } else {\r\n // if (JSON.stringify(error).includes('timeout')) {\r\n //\r\n // }\r\n error.message('连接服务器失败')\r\n }\r\n return Promise.resolve(error.response)\r\n }\r\n)\r\n\r\nexport default service\r\n","import axios from './axios'\r\n\r\nclass Comment {\r\n commitComment(params) {\r\n let url = '/Comments/Comments/CreateComments'\r\n return axios.post(url, params)\r\n }\r\n\r\n getComments(params = {}) {\r\n let url = '/Comments/Comments/GetComments'\r\n return axios.post(url, params)\r\n }\r\n\r\n getSubComments(params = {}) {\r\n let url = '/Comments/Comments/GetSubComments'\r\n return axios.post(url, params)\r\n }\r\n\r\n deleteComment(commentId = '') {\r\n let url = '/Comments/Comments/DeleteComment'\r\n let params = {\r\n commentId: commentId\r\n }\r\n return axios.post(url, params)\r\n }\r\n\r\n getCommentList(params = {}) {\r\n let url = '/Comments/Comments/List'\r\n return axios.post(url, params)\r\n }\r\n //分页获取直播评论\r\n getLiveComments(params = {}) {\r\n let url = '/Comments/Api/Page'\r\n return axios.post(url, params)\r\n }\r\n //直播评论\r\n commitLiveComment(params = {}) {\r\n let url = '/Comments/Api/Comment'\r\n return axios.post(url, params)\r\n }\r\n}\r\n\r\nexport default new Comment()\r\n","import axios from './axios'\r\n\r\nclass Channel {\r\n getChannel(params) {\r\n const url = '/resource/live/Channel'\r\n return axios.post(url, params)\r\n }\r\n /***\r\n * 直播领福利\r\n */\r\n getWechatSchemaLink(appId = 34) {\r\n return axios.post(\r\n 'https://yktapi.emoney.cn/account/WeChat/GetWechatSchemaLink?appId=34&emapp-apikey=zhimakaimen',\r\n {\r\n appId: appId,\r\n path: 'pages/service/service'\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport default new Channel()\r\n","import axios from './axios'\r\n\r\nclass Course {\r\n getCourseList(params, viewState) {\r\n return axios({\r\n url: '/course/Subscribe/CourseList',\r\n method: 'post',\r\n headers: {\r\n 'Ykt-ViewState': viewState\r\n },\r\n data: params\r\n })\r\n }\r\n}\r\n\r\nexport default new Course()\r\n","import axios from './axios'\r\n\r\nclass Coupon {\r\n /**\r\n * 获取优惠券\r\n * data {userId,type,statusList}\r\n * @param {number} userId 用户id\r\n * @param {number} type 用户id 1.平台通用券 2. 指定商品通用券 3.指定商品优惠券\r\n * @param {number} statusList []返回指定状态的优惠券 0. 生效 1.已使用 2.已锁定 3.已过期\r\n */\r\n getCouponApi(data, viewState) {\r\n return axios({\r\n url: `/Coupon/Api/Page`,\r\n method: 'post',\r\n data,\r\n headers: {\r\n 'Ykt-ViewState': viewState\r\n }\r\n })\r\n .then(result => {\r\n return result\r\n })\r\n .catch(() => null)\r\n }\r\n}\r\n\r\nexport default new Coupon()\r\n","import axios from './axios'\r\n\r\nclass exchange {\r\n // 兑换邀请码\r\n toExchange(code) {\r\n const url = '/Resource/Invatation/exchange'\r\n return axios.post(url, { code: code })\r\n }\r\n /***\r\n * 直播领福利\r\n */\r\n getHistory() {\r\n const url = '/Resource/Invatation/history'\r\n return axios.post(url, {})\r\n }\r\n}\r\n\r\nexport default new exchange()\r\n","import axios from './axios'\r\nclass Vote {\r\n // 获取大咖列表\r\n getPopularList(params) {\r\n return axios.post('/Account/PopularAuthor/List', params)\r\n }\r\n // 用户投票\r\n postVoteName(params) {\r\n return axios.post('/Account/PopularAuthor/Vote', params)\r\n }\r\n}\r\n\r\nexport default new Vote()\r\n","import axios from './axios'\r\n/***\r\n * 提交预定人信息\r\n */\r\n\r\nclass Activity {\r\n submitApi(params) {\r\n return axios({\r\n url: '/Order/Extend/Submit',\r\n method: 'post',\r\n data: params\r\n })\r\n }\r\n}\r\n\r\nexport default new Activity()\r\n","import comment from '@/api/comment'\r\nimport channel from '@/api/channel'\r\nimport course from '@/api/course'\r\nimport coupon from '@/api/coupon'\r\nimport exchange from '@/api/exchange'\r\nimport vote from '@/api/vote'\r\nimport activity from '@/api/activity'\r\n\r\nexport default {\r\n comment: comment,\r\n channel: channel,\r\n course: course,\r\n coupon: coupon,\r\n exchange: exchange,\r\n vote: vote,\r\n activity: activity\r\n}\r\n","/**\r\n * 产品id\r\n */\r\nimport { callbackProxy, getDocumentHeight, isClient, queryString, urlQueryString } from '../utils';\r\nimport { Log } from '../log';\r\nimport { appInfo } from '../appInfo';\r\nimport { isDef } from '../utils';\r\nimport { nativeProtocol, ProductId } from './protocol';\r\n/**\r\n * 打开Native页面\r\n * @param path Native路由,可参考 https://192.168.7.6:5858/svn/EMAPP/doc/%E5%8D%8F%E8%AE%AE/%E5%86%85%E5%B5%8CWEB%E6%89%93%E5%BC%80Native%E9%A1%B5%E9%9D%A2%E8%B7%AF%E7%94%B1%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md\r\n */\r\nexport function openNative(path) {\r\n console.log('[openNative]: ' + path);\r\n if (typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development') {\r\n // 仅本地开发有效,防止阻塞热更新\r\n var iframeElm = document.createElement('iframe');\r\n iframeElm.style.display = 'none';\r\n iframeElm.src = path;\r\n document.body.appendChild(iframeElm);\r\n }\r\n else {\r\n location.href = path;\r\n }\r\n}\r\n/**\r\n * 保留当前页面,打开指定链接,\r\n * @param url 要打开的页面url,支持Native路由,如果url没有sourcePath,则自动截取当前页面的sourcePath并拼接到url中\r\n * @param data\r\n * @returns\r\n */\r\nexport function openurl(url, data) {\r\n if (!url) {\r\n console.error('请传入要打开的页面地址');\r\n return;\r\n }\r\n console.info('打开地址:', url, data || '');\r\n if (!/^https?/.test(url)) {\r\n openNative(url);\r\n return;\r\n }\r\n var sourcePath = Log.getSourcePath();\r\n if (sourcePath && !/sourcePath/i.test(url)) {\r\n url = urlQueryString.stringify(url, {\r\n sourcePath: sourcePath\r\n });\r\n }\r\n if (typeof window.goods !== 'undefined' && window.goods.openurl) {\r\n if (data) {\r\n window.goods.openurl(url, typeof data === 'string' ? data : JSON.stringify(data));\r\n }\r\n else {\r\n window.goods.openurl(url);\r\n }\r\n }\r\n else {\r\n var search = location.search;\r\n // let url = params.url;\r\n if (url.indexOf('?') > -1) {\r\n url = url + search.replace('?', '&');\r\n }\r\n else {\r\n url = url + search;\r\n }\r\n // 防止sourcePath被url覆盖\r\n if (sourcePath) {\r\n url = urlQueryString.stringify(url, {\r\n sourcePath: sourcePath\r\n });\r\n }\r\n // 使用原生打开失败时,尝试使用location直接跳转\r\n location.href = url;\r\n }\r\n}\r\n/**\r\n * 打开网页,适用于智盈、有看投\r\n */\r\nexport function openBrowser(options) {\r\n openNative(nativeProtocol + \"://browser?\" + queryString.stringify(options));\r\n}\r\n/**\r\n * 关闭当前页面(webview)\r\n */\r\nexport function goBack() {\r\n if (isClient && window.goods) {\r\n if (window.goods.goback) {\r\n window.goods.goback();\r\n }\r\n else if (window.goods.closeWebPage) {\r\n window.goods.closeWebPage();\r\n }\r\n else {\r\n console.info('goods.goback and goods.closeWebPage are undefined');\r\n }\r\n }\r\n else {\r\n console.warn('goods or goods.goback is undefined');\r\n }\r\n}\r\n/**\r\n * 轻提示(弹出类似于toast的提示框)\r\n * 网页关闭后仍能显示\r\n * @param text - 提示的内容\r\n */\r\nexport function showNotify(text) {\r\n if (isClient && window.goods) {\r\n if (window.goods.showNotify) {\r\n window.goods.showNotify(text);\r\n }\r\n else if (window.goods.showTips) {\r\n window.goods.showTips(text);\r\n }\r\n else {\r\n console.info('goods.showNotify and goods.showTips are undefined');\r\n }\r\n }\r\n else {\r\n console.info('goods or goods.showNotify is undefined');\r\n }\r\n}\r\n/**\r\n * 修改页面标题\r\n * 接修改title,ios设备不能自动刷新,需要调用客户端的方法进行更新\r\n * @param {string} title 标题\r\n */\r\nexport function updateTitle(title) {\r\n if (isClient) {\r\n document.title = title;\r\n // 直接修改title,ios设备不能自动刷新,需要调用客户端的方法进行更新\r\n if (window.goods && window.goods.updateTitle) {\r\n window.goods.updateTitle({ title: title });\r\n }\r\n }\r\n}\r\n/**\r\n * 显示右上角菜单\r\n * @param options 菜单配置\r\n */\r\nexport function showMenuItems(options) {\r\n var menuItems = [];\r\n options.menuItems.forEach(function (item) { return menuItems.push(callbackProxy(item)); });\r\n if (isClient && window.goods && window.goods.showMenuItems) {\r\n console.info('[native] goods.showMenuItems', JSON.stringify({ menuItems: menuItems }));\r\n window.goods.showMenuItems(JSON.stringify({ menuItems: menuItems }));\r\n }\r\n else {\r\n console.info('[native] goods.showMenuItems is undefined', { menuItems: menuItems });\r\n }\r\n}\r\n/**\r\n * 在线客服(IM)\r\n * @param code 位置码例如:个人中心-客服-在线客服\r\n * @param title 页面标题 默认为在线客服\r\n */\r\nexport function openOnLineService(code, title) {\r\n var url = \"skstock://onlineservice?code=\" + encodeURIComponent(code);\r\n if (title) {\r\n url += \"&title=\" + encodeURIComponent(title);\r\n }\r\n openNative(url);\r\n}\r\n/**\r\n * 登录类型\r\n */\r\nexport var LoginType;\r\n(function (LoginType) {\r\n /**\r\n * 微信\r\n */\r\n LoginType[LoginType[\"Wechat\"] = 1] = \"Wechat\";\r\n /**\r\n * 手机号\r\n */\r\n LoginType[LoginType[\"Phone\"] = 2] = \"Phone\";\r\n})(LoginType || (LoginType = {}));\r\n/**\r\n * 登录\r\n * @param type\r\n */\r\nexport function login(type) {\r\n if (type === void 0) { type = LoginType.Phone; }\r\n openNative(nativeProtocol + \"://login?type=\" + type + \"&uitype=1\");\r\n}\r\n/**\r\n * 绑定手机号\r\n */\r\nexport function bindPhone() {\r\n openNative(nativeProtocol + \"://phonebind\");\r\n}\r\n/**\r\n * 打开单个个股\r\n */\r\nexport function openStock(options) {\r\n var stockId = options.stockId, clName = options.clName, clDate = options.clDate, clId = options.clId;\r\n var openStocksOptions = {\r\n stockIds: [stockId],\r\n stockId: stockId\r\n };\r\n if (clName) {\r\n openStocksOptions.clNames = [clName];\r\n }\r\n if (clDate) {\r\n openStocksOptions.clDates = [clDate];\r\n }\r\n if (clId) {\r\n openStocksOptions.clIds = [clId];\r\n }\r\n openStocks(openStocksOptions);\r\n}\r\n/**\r\n * 打开多个个股,并打开策略小旗帜\r\n */\r\nexport function openStocks(options) {\r\n var stockIds = options.stockIds, stockId = options.stockId, clNames = options.clNames, clDates = options.clDates, clIds = options.clIds;\r\n if (stockIds && stockId) {\r\n var codeArray = [];\r\n codeArray = stockIds;\r\n // 确保为字符串数组\r\n var tempArray = [];\r\n for (var index = 0; index < codeArray.length; index++) {\r\n var element = codeArray[index];\r\n tempArray.push(element + '');\r\n }\r\n codeArray = tempArray;\r\n var codeIndex = codeArray.indexOf(stockId + '');\r\n var codes = codeArray.join(',');\r\n var url = 'skstock://stock?codes=' + codes;\r\n if (codeIndex > -1) {\r\n if (appInfo.productId === ProductId.Skstock &&\r\n appInfo.compareVersion('3.5.2') &&\r\n codeArray.every(function (id) { return id.toString().startsWith('2'); })) {\r\n url = 'skstock://sector-more?codes=' + codes + '&index=' + codeIndex;\r\n }\r\n else {\r\n url = 'skstock://stock?codes=' + codes + '&index=' + codeIndex;\r\n }\r\n }\r\n else {\r\n console.warn(\"\\u8981\\u6253\\u5F00\\u7684\\u4E2A\\u80A1stockId:\" + stockId + \"\\u4E0D\\u5728\\u80A1\\u7968\\u5217\\u8868stockIds:\" + stockIds + \"\\u4E2D\");\r\n }\r\n if (clNames) {\r\n url += \"&clNames=\" + clNames + \"&fk=1\";\r\n }\r\n if (clDates) {\r\n url += \"&clDates=\" + clDates;\r\n }\r\n if (clIds) {\r\n url += \"&clIds=\" + clIds;\r\n }\r\n openNative(url);\r\n }\r\n}\r\n/**\r\n * 页面高度变化时,通知app调整webview高度,个股下方的页面需要调用该方法\r\n * @param container 页面容器,为空时则获取文档高度\r\n */\r\nexport function onHeightChange(container) {\r\n setTimeout(function () {\r\n var currentHeight = 0;\r\n if (isDef(container)) {\r\n if (typeof container === 'string') {\r\n var el = document.querySelector(container);\r\n if (el) {\r\n currentHeight = el.getBoundingClientRect().height;\r\n }\r\n }\r\n else if (typeof container === 'number') {\r\n currentHeight = container;\r\n }\r\n }\r\n else {\r\n currentHeight = getDocumentHeight();\r\n }\r\n if (isClient && window.goods && window.goods.onHeightChange) {\r\n console.info('[native] goods.onHeightChange: ', currentHeight);\r\n window.goods.onHeightChange(JSON.stringify({\r\n height: currentHeight\r\n }));\r\n }\r\n else {\r\n console.info('[native] goods.onHeightChange is undefined', currentHeight);\r\n }\r\n }, 500);\r\n}\r\n/**\r\n * 打开pdf文件\r\n * @param url pdf地址\r\n */\r\nexport function openPdf(url) {\r\n if (isClient && window.goods && window.goods.downloadPdf) {\r\n window.goods.downloadPdf(url);\r\n }\r\n else {\r\n openurl(url);\r\n }\r\n}\r\nexport var ControlZxgType;\r\n(function (ControlZxgType) {\r\n /**\r\n * 添加自选股\r\n */\r\n ControlZxgType[ControlZxgType[\"Add\"] = 1] = \"Add\";\r\n /**\r\n * 删除自选股\r\n */\r\n ControlZxgType[ControlZxgType[\"Delete\"] = 2] = \"Delete\";\r\n})(ControlZxgType || (ControlZxgType = {}));\r\n/**\r\n * 添加/删除 自选股\r\n */\r\nexport function controlZxg(options) {\r\n if (window.goods && window.goods.controlZxg) {\r\n window.goods.controlZxg(JSON.stringify(callbackProxy(options)));\r\n }\r\n else {\r\n console.info('goods or goods.controlZxg is undefined');\r\n }\r\n}\r\n/**\r\n * 是否已添加到自选股\r\n * @param options\r\n */\r\nexport function isGoodsAddedZxg(options) {\r\n if (window.goods && window.goods.isGoodsAddedZxg) {\r\n window.goods.isGoodsAddedZxg(JSON.stringify(callbackProxy(options)));\r\n }\r\n else {\r\n console.info('goods or goods.isGoodsAddedZxg is undefined');\r\n }\r\n}\r\n/**\r\n * 分享类型\r\n */\r\nexport var ShareType;\r\n(function (ShareType) {\r\n /**\r\n * 微信\r\n */\r\n ShareType[ShareType[\"Wechat\"] = 1] = \"Wechat\";\r\n /**\r\n * 新浪微博\r\n */\r\n ShareType[ShareType[\"Weibo\"] = 2] = \"Weibo\";\r\n /**\r\n * 微信朋友圈\r\n */\r\n ShareType[ShareType[\"WechatTimeline\"] = 4] = \"WechatTimeline\";\r\n /**\r\n * QQ好友\r\n */\r\n ShareType[ShareType[\"QQ\"] = 5] = \"QQ\";\r\n})(ShareType || (ShareType = {}));\r\n/**\r\n * 分享\r\n */\r\nexport function share(options) {\r\n var content = options.content || '';\r\n // 去除html标签\r\n content = content.replace(/<[^>]+>/g, '');\r\n content = content.replace(/ /g, '');\r\n content = content.replace(/"/g, '');\r\n content = content.replace(/Result=/, '');\r\n if (content && content.length > 100) {\r\n content = content.substr(0, 100) + '....';\r\n }\r\n var optionsProxy = callbackProxy(options);\r\n console.info('[@em/ym]: share-', optionsProxy);\r\n if (window.goods && window.goods.share) {\r\n window.goods.share(options.title, options.url, options.type, options.imageUrl || '', '', content, '', optionsProxy.callbackParams);\r\n }\r\n else {\r\n console.info('goods or goods.share is undefined');\r\n }\r\n}\r\n//# sourceMappingURL=common.js.map","import { isClient, isObject, isFunction } from './utils';\r\nimport { setNativeProtocolByProductId } from './common';\r\nimport { appInfo } from './appInfo';\r\nexport var ClientInfoTokenType;\r\n(function (ClientInfoTokenType) {\r\n /**\r\n * 未登录\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"NotLogin\"] = 0] = \"NotLogin\";\r\n /**\r\n * 邮箱\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"Email\"] = 1] = \"Email\";\r\n /**\r\n * 手机号\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"Phone\"] = 2] = \"Phone\";\r\n /**\r\n * 匿名\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"Anonymous\"] = 4] = \"Anonymous\";\r\n /**\r\n * QQ\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"QQ\"] = 100] = \"QQ\";\r\n /**\r\n * 微博\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"Blog\"] = 101] = \"Blog\";\r\n /**\r\n * 微信\r\n */\r\n ClientInfoTokenType[ClientInfoTokenType[\"Wechat\"] = 102] = \"Wechat\";\r\n})(ClientInfoTokenType || (ClientInfoTokenType = {}));\r\nvar clientInfoCached;\r\n/**\r\n * 客户端信息\r\n */\r\nexport var clientInfoCache = Object.create(null);\r\n/**\r\n * 更新通过getClientInfo获取的客户端信息缓存,所有key值均转换为小写,方便获取信息\r\n * @param info 客户端信息\r\n */\r\nexport function updateClientInfoCache(info) {\r\n Object.keys(info).map(function (key) {\r\n clientInfoCache[key.toLowerCase()] = info[key];\r\n });\r\n}\r\nvar callbacks = [];\r\nvar pending = false;\r\nvar ymstockCallbacks = [];\r\nvar ymstockPending = false;\r\nfunction flushCallbacks(clientInfo, isYmstock) {\r\n if (isYmstock === void 0) { isYmstock = false; }\r\n clientInfoCached = clientInfo;\r\n updateClientInfoCache(clientInfo);\r\n var copies;\r\n if (isYmstock) {\r\n ymstockPending = false;\r\n copies = ymstockCallbacks.slice(0);\r\n ymstockCallbacks.length = 0;\r\n }\r\n else {\r\n pending = false;\r\n copies = callbacks.slice(0);\r\n callbacks.length = 0;\r\n }\r\n for (var i = 0; i < copies.length; i++) {\r\n copies[i](clientInfo);\r\n }\r\n // 设置客户端协议\r\n setNativeProtocolByProductId(appInfo.productId);\r\n}\r\nvar middleware;\r\nfunction WEB_CALLBACK_APPINFO_CLIENT_INFO(clientInfo) {\r\n if (typeof clientInfo === 'string') {\r\n try {\r\n clientInfo = JSON.parse(clientInfo);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n flushCallbacks(clientInfo);\r\n try {\r\n middleware && middleware(clientInfo);\r\n }\r\n catch (error) {\r\n }\r\n}\r\n/**\r\n * 经典版打点调用getAppInfo专用\r\n */\r\nfunction WEB_CALLBACK_APPINFO_CLIENT_INFO2(appInfo) {\r\n var clientInfo;\r\n if (typeof appInfo === 'string') {\r\n try {\r\n clientInfo = JSON.parse(appInfo);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n else {\r\n clientInfo = appInfo;\r\n }\r\n // 防止和getClientInfo的guid冲突\r\n clientInfo.hardwareCode = clientInfo.guid;\r\n delete clientInfo.guid;\r\n flushCallbacks(clientInfo, true);\r\n}\r\nif (isClient) {\r\n if (window.WEB_CALLBACK_APPINFO_CLIENT_INFO) {\r\n console.warn('WEB_CALLBACK_APPINFO_CLIENT_INFO in defined', window.WEB_CALLBACK_APPINFO_CLIENT_INFO);\r\n middleware = window.WEB_CALLBACK_APPINFO_CLIENT_INFO;\r\n }\r\n window.WEB_CALLBACK_APPINFO_CLIENT_INFO = WEB_CALLBACK_APPINFO_CLIENT_INFO;\r\n window.WEB_CALLBACK_APPINFO_CLIENT_INFO2 = WEB_CALLBACK_APPINFO_CLIENT_INFO2;\r\n}\r\nfunction normalizeOptions(options) {\r\n var _options = {};\r\n if (isObject(options)) {\r\n _options = options;\r\n }\r\n else if (isFunction(options)) {\r\n _options = {\r\n complete: options\r\n };\r\n }\r\n return _options;\r\n}\r\n/**\r\n * 获取客户端信息\r\n */\r\nexport function getClientInfo(options) {\r\n var _options = normalizeOptions(options);\r\n _options = Object.assign({\r\n forceUpdate: true\r\n }, _options);\r\n if (isClient && window.goods && (_options.callGetAppInfo ? window.goods.getAppInfo : window.goods.getClientInfo)) {\r\n var _resolve_1;\r\n var _callback = function (clientInfo) {\r\n if (_options.success) {\r\n try {\r\n _options.success(clientInfo);\r\n }\r\n catch (error) {\r\n console.error('[goods.getClientInfo]: ', _options.success.toString(), error);\r\n }\r\n }\r\n _options.complete && _options.complete(clientInfo);\r\n _resolve_1(clientInfo);\r\n };\r\n if (_options.callGetAppInfo) {\r\n ymstockCallbacks.push(_callback);\r\n // 经典版专用\r\n if (!ymstockPending) {\r\n ymstockPending = true;\r\n if (clientInfoCached && !_options.forceUpdate) {\r\n setTimeout(function () { return flushCallbacks(clientInfoCached); }, 0);\r\n }\r\n else {\r\n try {\r\n var appInfoResult_1;\r\n try {\r\n appInfoResult_1 = window.goods.getAppInfo(JSON.stringify({\r\n callback: 'WEB_CALLBACK_APPINFO_CLIENT_INFO2'\r\n }));\r\n }\r\n catch (e) {\r\n appInfoResult_1 = window.goods.getAppInfo();\r\n }\r\n if (appInfoResult_1) {\r\n setTimeout(function () { return WEB_CALLBACK_APPINFO_CLIENT_INFO2(appInfoResult_1); }, 0);\r\n }\r\n }\r\n catch (error) {\r\n console.error('[goods.getClientInfo]: ', error);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n callbacks.push(_callback);\r\n if (!pending) {\r\n pending = true;\r\n if (clientInfoCached && !_options.forceUpdate) {\r\n setTimeout(function () { return flushCallbacks(clientInfoCached); }, 0);\r\n }\r\n else {\r\n try {\r\n window.goods.getClientInfo('WEB_CALLBACK_APPINFO_CLIENT_INFO');\r\n }\r\n catch (error) {\r\n console.error('[goods.getClientInfo]: ', error);\r\n }\r\n }\r\n }\r\n }\r\n return new Promise(function (resolve) {\r\n _resolve_1 = resolve;\r\n });\r\n }\r\n else {\r\n var errorText = 'goods is undefined';\r\n if (_options.error) {\r\n try {\r\n _options.error(errorText);\r\n }\r\n catch (error) {\r\n console.error('[goods.getClientInfo]: ', _options.error.toString(), error);\r\n }\r\n }\r\n _options.complete && _options.complete();\r\n if (!_options.success && !_options.error && !_options.complete) {\r\n return Promise.reject(errorText);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=getClientInfo.js.map","import { appInfo } from './AppInfo';\r\nvar skstockAppInfo = {\r\n isPhone: function () {\r\n return appInfo.loginType === 2;\r\n },\r\n /**\r\n * 比较当前app版本号是否大于或等于目标版本号\r\n * @param version 目标版本号\r\n * @param options\r\n * @returns\r\n */\r\n compareVersion: function (version, options) {\r\n if (!version) {\r\n console.warn('版本比对异常:请传入要比对的版本号', version);\r\n return false;\r\n }\r\n var _options = {\r\n appVersion: appInfo.appVersion,\r\n isIncludeEqual: true\r\n };\r\n if (options) {\r\n Object.assign(_options, options);\r\n }\r\n var isSupport = false;\r\n var appVersion = _options.appVersion, isIncludeEqual = _options.isIncludeEqual;\r\n if (version === appVersion) {\r\n isSupport = isIncludeEqual;\r\n }\r\n else {\r\n var versionArr = version.split('.');\r\n var appVersionArr = appVersion.split('.');\r\n if (appVersionArr.length === versionArr.length) {\r\n for (var i = 0; i < appVersionArr.length; i++) {\r\n if (appVersionArr[i] !== versionArr[i]) {\r\n isSupport = appVersionArr[i] > versionArr[i];\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n isSupport = appVersionArr.length > versionArr.length;\r\n }\r\n }\r\n return isSupport;\r\n },\r\n};\r\nexport default skstockAppInfo;\r\n//# sourceMappingURL=skstockAppInfo.js.map","import { appInfo } from './AppInfo';\r\nvar ymstockAppInfo = {\r\n isPhone: function () {\r\n var loginType = parseInt(appInfo.getParam('loginType'), 10);\r\n //经典版\r\n var hasBindPhone = appInfo.getParam('hasBindPhone');\r\n var emoneyLoginType = appInfo.getParam('emoneyLoginType');\r\n if (emoneyLoginType === 7) {\r\n return false;\r\n }\r\n //低于8.8.3的版本没有emoneyLoginType等参数,仍按照loginType判断登录\r\n if (emoneyLoginType === '') {\r\n if (loginType === 2) {\r\n return true;\r\n }\r\n }\r\n else {\r\n if (hasBindPhone) {\r\n return true;\r\n }\r\n if (loginType === 2) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n};\r\nexport default ymstockAppInfo;\r\n//# sourceMappingURL=ymstockAppInfo.js.map","import { clientInfoCache } from '../getClientInfo';\r\nimport { getParam, isDef } from '../utils';\r\nimport { bindPhone, login, ProductId } from '../common';\r\nimport { isUndef } from '../utils';\r\nimport skstockAppInfo from './skstockAppInfo';\r\nimport ymstockAppInfo from './ymstockAppInfo';\r\n/**\r\n * 转化为int类型*\r\n * 如果不是无法转换为有效的int类型,则返回-1\r\n */\r\nfunction parseToInt(num) {\r\n if (!num)\r\n return -1;\r\n if (typeof num === 'string') {\r\n num = parseInt(num, 10);\r\n }\r\n return isNaN(num) ? -1 : num;\r\n}\r\nvar appInfo = {\r\n /**\r\n * 获取getClientInfo和url中的参数\r\n * @param name 参数名,不区分大小写\r\n * @returns\r\n */\r\n getParam: function (name) {\r\n var val;\r\n if (clientInfoCache) {\r\n val = clientInfoCache[name.toLowerCase()];\r\n }\r\n if (isUndef(val)) {\r\n var _val = getParam(name);\r\n val = isDef(_val) ? _val : '';\r\n }\r\n return val;\r\n },\r\n /**\r\n * 登录类型\r\n * 2 - 手机号登录\r\n * 0 - 匿名登录\r\n */\r\n get loginType() {\r\n return parseToInt(this.getParam('loginType'));\r\n },\r\n /**\r\n * app平台id\r\n */\r\n get productId() {\r\n var pd = parseToInt(this.getParam('appId') ||\r\n this.getParam('pd') ||\r\n this.getParam('pid') ||\r\n this.getParam('productId'));\r\n if (pd === -1) {\r\n pd = 4;\r\n }\r\n return pd;\r\n },\r\n /**\r\n * app平台id\r\n */\r\n get pd() {\r\n return this.productId;\r\n },\r\n /**\r\n * 渠道号\r\n */\r\n get vd() {\r\n return parseToInt(this.getParam('vd') || this.getParam('channelId'));\r\n },\r\n /**\r\n * 用户token\r\n */\r\n get token() {\r\n return this.getParam('token') || this.getParam('emoneyToken') || '';\r\n },\r\n /**\r\n * 是否为实名登录,\r\n * 支持的平台:智盈、有看投、基金APP\r\n */\r\n get isLogin() {\r\n var loginType = this.loginType;\r\n return !(loginType === -1 || loginType === 4);\r\n },\r\n /**\r\n * 是否为手机号实名登陆\r\n */\r\n get isPhone() {\r\n return factory('isPhone');\r\n },\r\n /**\r\n * 1. 是否已绑定手机号\r\n * 2. 包含手机号登录和第三方已绑定手机号\r\n * 3. 支持的平台:智盈、有看投、基金APP\r\n */\r\n get isBindPhone() {\r\n return this.loginType === 2 || this.getParam('hasBindPhone');\r\n },\r\n /**\r\n * 1. 检查是否登录手机号或已绑定手机号的第三方登录\r\n * 2. 如果未登录则自动触发登录\r\n * 3. 如果是第三方登录但未绑定手机号,则自动跳转绑定手机号\r\n * 4. 支持的平台:智盈、有看投、基金APP\r\n */\r\n get checkBindPhone() {\r\n var isBindPhone = true;\r\n if (!this.isLogin) {\r\n login();\r\n isBindPhone = false;\r\n }\r\n else if (!this.isPhone && !this.getParam('hasBindPhone')) {\r\n bindPhone();\r\n isBindPhone = false;\r\n }\r\n return isBindPhone;\r\n },\r\n /**\r\n * app版本号: '3.5.2',\r\n * 经典版返回352(number)\r\n */\r\n get appVersion() {\r\n return this.getParam('mv') || this.getParam('appVersion') || '';\r\n },\r\n /**\r\n * 比较当前app版本号是否大于或等于目标版本号\r\n * @param version 目标版本号\r\n * @param options\r\n * @returns\r\n */\r\n compareVersion: function (version, options) {\r\n return factory('compareVersion', version, options);\r\n },\r\n /**\r\n * 状态栏高度\r\n */\r\n get statusBarHeight() {\r\n var statusBarHeight = 15;\r\n var clientStatusBarHeight = this.getParam('statusBarHeight');\r\n var screenHeight = this.getParam('screenHeight');\r\n if (clientStatusBarHeight && screenHeight) {\r\n statusBarHeight =\r\n (document.documentElement.clientHeight * clientStatusBarHeight) /\r\n screenHeight;\r\n }\r\n return statusBarHeight;\r\n },\r\n /**\r\n * 标题栏高度\r\n */\r\n get titleBarHeight() {\r\n var titleBarHeight = 50;\r\n var clientTitleBarHeight = this.getParam('titleBarHeight');\r\n var screenHeight = this.getParam('screenHeight');\r\n if (clientTitleBarHeight && screenHeight) {\r\n titleBarHeight =\r\n (document.documentElement.clientHeight * clientTitleBarHeight) /\r\n screenHeight;\r\n }\r\n return titleBarHeight;\r\n }\r\n};\r\nfunction factory(name) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (!clientInfoCache) {\r\n console.warn(\"[@em/ym]\\u8C03\\u7528\\u51FD\\u6570appInfo.\" + name + \"\\u65B9\\u6CD5\\u4E4B\\u524D, \\u8BF7\\u5148\\u8C03\\u7528getClientInfo\");\r\n }\r\n var result;\r\n switch (appInfo.productId) {\r\n case ProductId.Ymstock:\r\n result = ymstockAppInfo[name].apply(ymstockAppInfo, args);\r\n break;\r\n default:\r\n result = skstockAppInfo[name].apply(skstockAppInfo, args);\r\n break;\r\n }\r\n return result;\r\n}\r\nexport { appInfo };\r\n//# sourceMappingURL=AppInfo.js.map","import { isClient } from '../utils';\r\n/**\r\n * 漏斗打点类型枚举\r\n */\r\nexport var FunnelLogType;\r\n(function (FunnelLogType) {\r\n /**\r\n * 源入口,如蹦蹦等\r\n */\r\n FunnelLogType[\"Source\"] = \"source\";\r\n /**\r\n * 源入口中的点击事件,如点击蹦蹦中的广告按钮\r\n */\r\n FunnelLogType[\"SourceClick\"] = \"source-click\";\r\n /**\r\n * 页面访问\r\n */\r\n FunnelLogType[\"PageView\"] = \"page-view\";\r\n /**\r\n * 点击事件,如点击收银台中的支付按钮\r\n */\r\n FunnelLogType[\"Click\"] = \"click\";\r\n})(FunnelLogType || (FunnelLogType = {}));\r\n/**\r\n * 是否为debug模式\r\n * 为真则上传打点日志时,会调用测试接口\r\n * 8888渠道默认开启debug模式\r\n */\r\nexport var $isDebug = isClient &&\r\n /^https?:\\/\\/(mobiletest|yktpre|mobilelan)\\.emoney\\.cn/.test(location.href);\r\n/**\r\n * 设置debug模式\r\n * @param isDebug 是否开启debug模式\r\n */\r\nexport function $setDebug(isDebug) {\r\n if (isDebug === void 0) { isDebug = true; }\r\n $isDebug = isDebug;\r\n}\r\nexport var $pageId = '';\r\nexport function $setPageId(pageId) {\r\n $pageId = pageId;\r\n}\r\n/**\r\n * 当前页面漏斗路径\r\n * @type {string}\r\n */\r\nexport var $sourcePath = '';\r\n/**\r\n * 设置当前页面漏斗路径\r\n * @param sourcePath\r\n */\r\nexport function $setSourcePath(sourcePath) {\r\n $sourcePath = sourcePath;\r\n}\r\nexport function $getSourcePath() {\r\n return $sourcePath;\r\n}\r\n//# sourceMappingURL=share.js.map","function formatData(data) {\r\n if (typeof data !== 'object') {\r\n return data;\r\n }\r\n var arr = [];\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n arr.push(key + \"=\" + data[key]);\r\n }\r\n }\r\n return arr.join('&');\r\n}\r\nfunction ajax(params) {\r\n if (params === void 0) { params = {}; }\r\n var xhr = new XMLHttpRequest();\r\n var type = (params.type || 'GET').toUpperCase();\r\n var data = formatData(params.data || {});\r\n var async = params.async === undefined ? true : params.async;\r\n var timeout = params.timeout || 15000;\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n var status_1 = xhr.status;\r\n if (status_1 >= 200 && status_1 < 300) {\r\n params.success && params.success(JSON.parse(xhr.responseText));\r\n }\r\n else {\r\n params.error && params.error(status_1, xhr.responseText);\r\n }\r\n }\r\n };\r\n xhr.ontimeout = function () {\r\n console.info('ajax timeout');\r\n params.error && params.error(arguments);\r\n };\r\n async && (xhr.timeout = timeout);\r\n var url = params.url;\r\n url += (url.indexOf('?') > -1 ? '&' : '?') + \"r=\" + Math.random();\r\n if (type === 'GET') {\r\n xhr.open(type, url + \"&\" + data, async);\r\n xhr.send(null);\r\n }\r\n else {\r\n xhr.open(type, url, async);\r\n xhr.setRequestHeader('Content-Type', params.contentType === 'json'\r\n ? 'application/json; charset=UTF-8'\r\n : 'application/x-www-form-urlencoded;charset=UTF-8');\r\n if (params.headers) {\r\n for (var key in params.headers) {\r\n if (Object.prototype.hasOwnProperty.call(params.headers, key)) {\r\n xhr.setRequestHeader(key, params.headers[key]);\r\n }\r\n }\r\n }\r\n xhr.send(data);\r\n }\r\n}\r\nexport default ajax;\r\n//# sourceMappingURL=ajax.js.map","import { $pageId, $setSourcePath, FunnelLogType } from './share';\r\nimport { getParam } from '../utils';\r\nimport { getUserToken } from '../getUserToken';\r\nimport ajax from '../common/ajax';\r\nimport Urls, { isTest } from '../common/Urls';\r\nvar originalSourcePath = '';\r\n/**\r\n * 页面打点附加信息缓存\r\n */\r\nvar pageViewExtraInfo;\r\nexport function getOriginalSourcePath() {\r\n if (originalSourcePath)\r\n return originalSourcePath;\r\n originalSourcePath = getParam('sourcePath');\r\n if (originalSourcePath) {\r\n originalSourcePath = originalSourcePath.toLowerCase();\r\n }\r\n else {\r\n originalSourcePath = 'other';\r\n }\r\n return originalSourcePath;\r\n}\r\nexport function normalizeSourcePath(sourcePath) {\r\n if (!sourcePath)\r\n return '';\r\n return sourcePath.replace(/:/g, '_').toLowerCase();\r\n}\r\n/**\r\n * 上传漏斗打点数据\r\n * @param data 打点数据\r\n */\r\nexport function uploadFunnelLog(data) {\r\n getUserToken().then(function (userSign) {\r\n ajax({\r\n url: Urls.userAnalysis,\r\n type: 'post',\r\n headers: userSign,\r\n data: Object.assign({}, data, {\r\n extraInfo: data.extraInfo ? JSON.stringify(data.extraInfo) : ''\r\n }),\r\n success: function () {\r\n if (isTest) {\r\n console.info(\"[log] \\u6F0F\\u6597\\u6253\\u70B9\\u4E0A\\u4F20\\u6210\\u529F\\uFF1A\", data);\r\n }\r\n },\r\n error: function (error) {\r\n if (isTest) {\r\n console.info(\"[log] \\u6F0F\\u6597\\u6253\\u70B9\\u4E0A\\u4F20\\u5931\\u8D25\\uFF1A\", error);\r\n }\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * 漏斗打点\r\n * @param options\r\n * @returns\r\n */\r\nexport function funnelLog(options) {\r\n /**\r\n * 数据源路径,用:分隔\r\n * @type string\r\n */\r\n var originalSourcePath = getOriginalSourcePath();\r\n if (options.funnelLogType === FunnelLogType.Source ||\r\n options.funnelLogType === FunnelLogType.SourceClick\r\n ? !options.sourcePath\r\n : !originalSourcePath) {\r\n console.warn('[Log] 未知来源,停止漏斗打点', options);\r\n return;\r\n }\r\n var sourcePath = normalizeSourcePath(options.sourcePath);\r\n var currentSourcePath = '';\r\n switch (options.funnelLogType) {\r\n // 源入口,如蹦蹦等\r\n case FunnelLogType.Source:\r\n currentSourcePath = sourcePath || originalSourcePath || '';\r\n $setSourcePath(currentSourcePath);\r\n break;\r\n // 源入口中的点击事件,如点击蹦蹦中的广告按钮\r\n case FunnelLogType.SourceClick:\r\n currentSourcePath = (sourcePath || originalSourcePath) + \":sourceclick\";\r\n break;\r\n // 点击事件,如点击收银台中的支付按钮\r\n case FunnelLogType.Click:\r\n currentSourcePath = originalSourcePath + \":\" + normalizeSourcePath($pageId) + \":\" + sourcePath;\r\n if (pageViewExtraInfo) {\r\n options.extraInfo = Object.assign({}, pageViewExtraInfo, options.extraInfo);\r\n }\r\n break;\r\n // 页面访问\r\n default:\r\n currentSourcePath = originalSourcePath + \":\" + sourcePath;\r\n $setSourcePath(currentSourcePath);\r\n // 缓存页面打点的附加信息\r\n if (options.extraInfo) {\r\n pageViewExtraInfo = options.extraInfo;\r\n }\r\n break;\r\n }\r\n uploadFunnelLog({\r\n sourcePath: currentSourcePath,\r\n extraInfo: options.extraInfo || ''\r\n });\r\n}\r\n//# sourceMappingURL=funnelLog.js.map","import { appInfo } from '../appInfo';\r\nimport { ProductId } from '../common';\r\nimport { getParam } from '../utils';\r\n/**\r\n * 是否为测试环境的url\r\n */\r\nvar testUrl = getParam('test') === 'true';\r\n/**\r\n * 是否为debug模式\r\n * 为真则上传打点日志时,会调用测试接口\r\n * 8888渠道默认开启debug模式(可能已经废弃)\r\n */\r\nvar $isTest = /^https?:\\/\\/(mobiletest|yktpre|mobilelan)\\.emoney\\.cn/.test(location.href);\r\nexport var isTest = testUrl || $isTest;\r\nexport default {\r\n get DOMAIN_YKTAPI() {\r\n if (isTest) {\r\n return 'https://yktpre.emoney.cn/yktapi';\r\n }\r\n else {\r\n return \"https://yktapi.emoney.cn\";\r\n }\r\n },\r\n get DOMAIN_MSTAT() {\r\n if (isTest) {\r\n return 'http://mobiletest.emoney.cn/stat';\r\n }\r\n else {\r\n return \"https://mstat.emoney.cn\";\r\n }\r\n },\r\n /**\r\n * 漏斗打点地址\r\n */\r\n get userAnalysis() {\r\n var url = '';\r\n if (ProductId.Ycstock === appInfo.productId) {\r\n url = this.DOMAIN_YKTAPI + \"/statistics/UserAnalysis/ActivityTrackOne\";\r\n }\r\n else {\r\n url = this.DOMAIN_MSTAT + \"/UserAnalysis/Advert/AddStatistics\";\r\n }\r\n return url;\r\n },\r\n /**\r\n * 积分模块Url\r\n */\r\n get DOMAIN_EMAPP() {\r\n return isTest\r\n ? 'https://mobiletest.emoney.cn/emapp'\r\n : 'https://emapp.emoney.cn';\r\n },\r\n get DOMAIN_APPSTATIC() {\r\n return isTest\r\n ? 'https://mobiletest.emoney.cn/appstatic'\r\n : 'https://appstatic.emoney.cn';\r\n },\r\n get DOMAIN_APIMINAPP() {\r\n return isTest\r\n ? 'https://apiminapp.emoney.cn'\r\n : 'https://apiminapp.emoney.cn';\r\n },\r\n get DOMAIN_POINT() {\r\n return isTest\r\n ? 'http://mobilelan.emoney.cn/emapp/transfer/test.point.emoney.cn/'\r\n : 'https://emapp.emoney.cn/transfer/point.emoney.cn';\r\n },\r\n get DOMAIN_MLOG() {\r\n return 'https://emapp.emoney.cn/transfer/mlog.emoney.cn';\r\n }\r\n};\r\n//# sourceMappingURL=Urls.js.map","import { $pageId } from './share';\r\nexport default {\r\n pageView: function (options) {\r\n var json = {\r\n pageId: options.pageId,\r\n pageData: options.pageData || ''\r\n };\r\n if (typeof json.pageData === 'object') {\r\n json.pageData = JSON.stringify(json.pageData);\r\n }\r\n console.info('调用客户端页面统计:', json);\r\n if (window.goods && window.goods.setAnalysisPageId) {\r\n window.goods && window.goods.setAnalysisPageId(JSON.stringify(json));\r\n }\r\n },\r\n click: function (options) {\r\n var pageId = options.pageId || $pageId;\r\n var eventId = options.eventId;\r\n if (eventId.indexOf(pageId) !== 0) {\r\n eventId = pageId + \":\" + eventId;\r\n }\r\n var eventData = options.eventData || '';\r\n if (typeof eventData === 'object') {\r\n eventData = JSON.stringify(eventData);\r\n }\r\n var json = {\r\n eventId: eventId,\r\n pageId: pageId,\r\n eventData: eventData\r\n };\r\n console.info('调用客户端事件统计:', json);\r\n if (window.goods && window.goods.addEventRecord) {\r\n window.goods && window.goods.addEventRecord(JSON.stringify(json));\r\n }\r\n }\r\n};\r\n//# sourceMappingURL=nativeLog.js.map","import Urls, { isTest } from '../common/Urls';\r\nimport ajax from '../common/ajax';\r\nimport { appInfo } from '../appInfo';\r\nimport { getClientInfo } from '../getClientInfo';\r\nimport { formatDate, isObject } from '../utils';\r\nimport { $pageId } from './share';\r\nexport var ymstockLog = {\r\n uploadCount: 0,\r\n pageView: function (options) {\r\n var requestUrl = isTest\r\n ? 'http://192.168.8.198:808/userasy/action/AddPage'\r\n : Urls.DOMAIN_MLOG + \"/ub2/action/AddPage\";\r\n var currentDate = formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');\r\n this.uploadLog(requestUrl, {\r\n TargetView: options.pageId,\r\n SourceView: options.pageId,\r\n EnterTime: currentDate,\r\n QuitTime: currentDate,\r\n Duration: 0,\r\n Attribute: isObject(options.pageData) ? JSON.stringify(options.pageData) : options.pageData\r\n });\r\n },\r\n click: function (options) {\r\n var requestUrl = isTest\r\n ? 'http://192.168.8.198:808/userasy/action/addevent'\r\n : Urls.DOMAIN_MLOG + \"/ub2/action/addevent\";\r\n var currentDate = formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');\r\n var pageId = options.pageId || $pageId;\r\n var eventId = options.eventId;\r\n if (eventId.indexOf(pageId) !== 0) {\r\n eventId = pageId + \":\" + eventId;\r\n }\r\n this.uploadLog(requestUrl, {\r\n ClickCount: 0,\r\n EventId: eventId,\r\n EventDate: currentDate,\r\n Attribute: isObject(options.eventData) ? JSON.stringify(options.eventData) : options.eventData\r\n });\r\n },\r\n uploadLog: function (url, data) {\r\n var _this = this;\r\n getClientInfo({\r\n callGetAppInfo: true,\r\n success: function () {\r\n _this.uploadLogApi(url, data);\r\n },\r\n error: function () {\r\n if (_this.uploadCount <= 5) {\r\n setTimeout(function () {\r\n _this.uploadCount++;\r\n _this.uploadLog(url, data);\r\n }, 1000);\r\n }\r\n }\r\n });\r\n },\r\n uploadLogApi: function (url, data) {\r\n var params = Object.assign({\r\n //用户id\r\n UserId: appInfo.getParam('userId'),\r\n //硬件码\r\n HardwareCode: appInfo.getParam('hardwareCode'),\r\n //软件版本\r\n Version: appInfo.appVersion,\r\n //sdk 版本\r\n SystemVersion: appInfo.getParam('systemVersion'),\r\n //产品号\r\n ProductId: appInfo.productId,\r\n //平台号\r\n PlatformId: appInfo.getParam('ar')\r\n }, data);\r\n ajax({\r\n url: url,\r\n data: params,\r\n type: 'post',\r\n success: function () {\r\n console.info(\"\\u7ECF\\u5178\\u7248\\u6253\\u70B9\\u4E0A\\u4F20\\u6210\\u529F\\uFF1A\", data);\r\n },\r\n error: function (error) {\r\n console.info(\"\\u7ECF\\u5178\\u7248\\u6253\\u70B9\\u4E0A\\u4F20\\u5931\\u8D25\\uFF1A\", error, data);\r\n }\r\n });\r\n }\r\n};\r\n//# sourceMappingURL=ymstockLog.js.map","import { funnelLog, uploadFunnelLog } from './funnelLog';\r\nimport nativeLog from './nativeLog';\r\nimport { $getSourcePath, $setPageId, FunnelLogType } from './share';\r\nimport { ymstockLog } from './ymstockLog';\r\nimport { getClientInfo } from '../getClientInfo';\r\nimport { appInfo } from '../appInfo';\r\nimport { ProductId } from '../common';\r\nexport * from './share';\r\nfunction normalizePageViewOptions(options) {\r\n if (options.targetView) {\r\n options.pageId = options.targetView;\r\n }\r\n if (options.attribute) {\r\n options.pageData = options.attribute;\r\n }\r\n if (typeof options.pageData === 'string') {\r\n try {\r\n options.pageData = JSON.parse(options.pageData);\r\n }\r\n catch (e) {\r\n console.error('[Log]错误的打点数据,pageData应该为合法的json字符串', options.pageData);\r\n }\r\n }\r\n return options;\r\n}\r\nfunction normalizeClickOptions(options) {\r\n if (options.attribute) {\r\n options.eventData = options.attribute;\r\n }\r\n if (typeof options.eventData === 'string') {\r\n try {\r\n options.eventData = JSON.parse(options.eventData);\r\n }\r\n catch (e) {\r\n console.error('[Log]错误的打点数据,eventData应该为合法的json字符串', options.eventData);\r\n }\r\n }\r\n return options;\r\n}\r\nexport var Log = {\r\n /**\r\n * 页面打点\r\n * @param options\r\n */\r\n pageView: function (options) {\r\n normalizePageViewOptions(options);\r\n $setPageId(options.pageId);\r\n // app打点\r\n nativeLog.pageView(options);\r\n getClientInfo({\r\n forceUpdate: false,\r\n complete: function () {\r\n // 漏斗打点\r\n if (!options.disableFunnelLog) {\r\n funnelLog({\r\n funnelLogType: options.funnelLogType,\r\n sourcePath: options.pageId,\r\n extraInfo: options.pageData\r\n });\r\n }\r\n if (appInfo.productId === ProductId.Ymstock) {\r\n ymstockLog.pageView(options);\r\n }\r\n }\r\n });\r\n },\r\n /**\r\n * 时间打点\r\n * @param options\r\n */\r\n click: function (options) {\r\n normalizeClickOptions(options);\r\n // app打点\r\n nativeLog.click(options);\r\n if (!options.disableFunnelLog) {\r\n funnelLog({\r\n funnelLogType: options.funnelLogType || FunnelLogType.Click,\r\n sourcePath: options.eventId,\r\n extraInfo: options.eventData\r\n });\r\n }\r\n if (appInfo.productId === ProductId.Ymstock) {\r\n ymstockLog.click(options);\r\n }\r\n },\r\n /**\r\n * 获取漏斗打点源路径\r\n */\r\n getSourcePath: $getSourcePath,\r\n /**\r\n * 漏斗打点\r\n */\r\n funnelLog: funnelLog,\r\n /**\r\n * 经典版打点\r\n */\r\n ymstockLog: ymstockLog,\r\n /**\r\n * 上传漏斗打点数据\r\n */\r\n uploadFunnelLog: uploadFunnelLog\r\n};\r\n//# sourceMappingURL=index.js.map","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import { ProductId } from './common';\r\nimport { getClientInfo } from './getClientInfo';\r\nimport { appInfo } from './appInfo';\r\n//@ts-ignore\r\nimport md5 from 'js-md5';\r\n//@ts-ignore\r\nimport * as nodeUuid from 'uuid';\r\n/**\r\n * 获取用户token\r\n */\r\nexport function getUserToken() {\r\n return new Promise(function (resolve) {\r\n getClientInfo({\r\n forceUpdate: false,\r\n complete: function () {\r\n var userToken;\r\n switch (appInfo.productId) {\r\n case ProductId.Ymstock:\r\n userToken = {\r\n emoneyToken: appInfo.token,\r\n appId: appInfo.productId\r\n };\r\n if (appInfo.appVersion) {\r\n userToken.mv = Number(appInfo.appVersion.replace(/\\./g, ''));\r\n }\r\n if (appInfo.vd) {\r\n userToken.vd = appInfo.vd;\r\n }\r\n var ar = appInfo.getParam('ar');\r\n if (ar) {\r\n userToken.ar = ar;\r\n }\r\n break;\r\n case ProductId.Ycstock:\r\n userToken = {\r\n 'Ykt-Token': appInfo.token\r\n };\r\n break;\r\n default:\r\n userToken = {\r\n authorization: appInfo.token\r\n };\r\n if (appInfo.productId) {\r\n userToken.appId = appInfo.productId;\r\n }\r\n break;\r\n }\r\n resolve(userToken);\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * 获取接口签名及用户token\r\n * 仅限有看投,直接返回有看投签名\r\n * @param onlyYcstock 默认为true,为false时请确保传入正确的productId(已调用getClientInfo),其他平台则只返回token\r\n */\r\nexport function getUserSign(onlyYcstock) {\r\n if (onlyYcstock === void 0) { onlyYcstock = true; }\r\n return new Promise(function (resolve, reject) {\r\n getClientInfo({\r\n forceUpdate: false,\r\n complete: function () {\r\n var userSign = undefined;\r\n function setUserSign() {\r\n var HtmlApiKey = 'ykt.html';\r\n var HtmlSecret = 'no.secret';\r\n userSign = {\r\n 'Emapp-ApiKey': HtmlApiKey,\r\n 'Emapp-Timestamp': new Date().valueOf(),\r\n 'Emapp-Nonce': nodeUuid.v1(),\r\n 'Emapp-Sign': '',\r\n 'Ykt-Token': appInfo.token\r\n };\r\n var signStr = \"\" + userSign['Emapp-Nonce'] + userSign['Emapp-Timestamp'] + HtmlSecret;\r\n userSign['Emapp-Sign'] = md5(signStr).toLowerCase();\r\n }\r\n if (onlyYcstock) {\r\n setUserSign();\r\n }\r\n else {\r\n switch (appInfo.productId) {\r\n case ProductId.Ycstock:\r\n setUserSign();\r\n break;\r\n case ProductId.Ymstock:\r\n userSign = {\r\n emoneyToken: appInfo.token\r\n };\r\n break;\r\n default:\r\n userSign = {\r\n authorization: appInfo.token\r\n };\r\n break;\r\n }\r\n }\r\n resolve(userSign);\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=getUserToken.js.map","export var ProductId;\r\n(function (ProductId) {\r\n /**\r\n * 经典版\r\n */\r\n ProductId[ProductId[\"Ymstock\"] = 2] = \"Ymstock\";\r\n /**\r\n * 智盈\r\n */\r\n ProductId[ProductId[\"Skstock\"] = 4] = \"Skstock\";\r\n /**\r\n * 有看投\r\n */\r\n ProductId[ProductId[\"Ycstock\"] = 28] = \"Ycstock\";\r\n})(ProductId || (ProductId = {}));\r\nexport var NativeProtocolMap = new Map([\r\n [ProductId.Ymstock, 'ymstock'],\r\n [ProductId.Skstock, 'skstock'],\r\n [ProductId.Ycstock, 'ycstock']\r\n]);\r\n/**\r\n * 客户端协议\r\n */\r\nexport var nativeProtocol = NativeProtocolMap.get(ProductId.Skstock);\r\n/**\r\n * 设置客户端协议\r\n */\r\nexport function setNativeProtocol(protocol) {\r\n if (!protocol) {\r\n console.warn(\"[setNativeProtocol]: \\u534F\\u8BAE\\u4E0D\\u80FD\\u4E3A\\u7A7A\\uFF08\" + protocol + \"\\uFF09\");\r\n return;\r\n }\r\n nativeProtocol = protocol;\r\n}\r\n/**\r\n * 通过pd获取客户端协议\r\n */\r\nexport function getNativeProtocolByProductId(productId) {\r\n var protocol = NativeProtocolMap.get(productId);\r\n if (!protocol) {\r\n console.warn(\"[getNativeProtocolByProductId]: \\u672A\\u77E5\\u7684productId(\" + productId + \")\\uFF0C\\u672A\\u627E\\u5230\\u5BF9\\u5E94\\u7684\\u5BA2\\u6237\\u7AEF\\u534F\\u8BAE\");\r\n }\r\n return protocol;\r\n}\r\n/**\r\n * 通过pd设置客户端协议\r\n * @param productId 产品id\r\n */\r\nexport function setNativeProtocolByProductId(productId) {\r\n var protocol = NativeProtocolMap.get(productId);\r\n if (protocol) {\r\n setNativeProtocol(protocol);\r\n }\r\n else {\r\n console.warn(\"[setNativeProtocolByProductId]: \\u672A\\u77E5\\u7684productId(\" + productId + \")\\uFF0C\\u672A\\u627E\\u5230\\u5BF9\\u5E94\\u7684\\u5BA2\\u6237\\u7AEF\\u534F\\u8BAE\");\r\n }\r\n}\r\n//# sourceMappingURL=protocol.js.map","/**\r\n * 是否为客户端\r\n */\r\nexport var isClient = typeof window !== 'undefined';\r\n/**\r\n * 是否为服务端\r\n */\r\nexport var isServer = typeof window === 'undefined';\r\n/**\r\n * 是否处于app内\r\n */\r\nexport var isApp = isClient && typeof window.goods !== 'undefined';\r\n/**\r\n * 检查是否处于app内\r\n * 防止window.goods在页面加载时尚未就绪,可以手动调用该方法\r\n */\r\nexport function checkIsApp() {\r\n return isClient && window.goods !== 'undefined';\r\n}\r\nexport var isString = function (val) { return typeof val === 'string'; };\r\nexport var isObject = function (val) {\r\n return val !== null && typeof val === 'object';\r\n};\r\nexport var isNullObject = function (val) { return Object.keys(val).length === 0; };\r\nexport var isArray = function (val) {\r\n return Object.prototype.toString.call(val) === '[object Array]';\r\n};\r\nexport var isFunction = function (val) {\r\n return Object.prototype.toString.call(val) === '[object Function]';\r\n};\r\nexport var isDef = function (val) { return val !== undefined && val !== null; };\r\nexport var isUndef = function (val) { return val === undefined || val === null; };\r\nvar u = isClient ? navigator.userAgent : '';\r\nexport var isIos = /ipad|iphone|mac/i.test(u);\r\nexport var isAndroid = /android/i.test(u);\r\nexport var isWechat = /micromessenger/i.test(u);\r\n/**\r\n * 获取当前页面url,会自动移除#后的参数\r\n */\r\nexport function getUrl() {\r\n return isClient ? location.href.split('#')[0] : '';\r\n}\r\n/**\r\n * 处理参数\r\n */\r\nexport var queryString = {\r\n /**\r\n * 把对象转换为字符串\r\n * @param params 参数对象\r\n * @returns {string}\r\n */\r\n stringify: function (params) {\r\n var resArr = [];\r\n for (var key in params) {\r\n if (Object.prototype.hasOwnProperty.call(params, key)) {\r\n // @ts-ignore\r\n resArr.push(key + \"=\" + params[key]);\r\n }\r\n }\r\n return resArr.join('&');\r\n },\r\n /**\r\n * 把参数字符串转换为对象\r\n * @param {string} str 参数字符串\r\n * @returns {Object}\r\n */\r\n parse: function (str) {\r\n if (!str)\r\n return str;\r\n var res = {};\r\n var arr = str.split('&');\r\n arr.forEach(function (item) {\r\n var _a = item.split('='), key = _a[0], value = _a[1];\r\n res[key] = value;\r\n });\r\n return res;\r\n }\r\n};\r\n/**\r\n * 处理url地址中的参数\r\n */\r\nexport var urlQueryString = {\r\n /**\r\n * 把对象转换为字符串并拼接到url中,已存在的参数会被覆盖\r\n * @param url url地址\r\n * @param params 参数对象\r\n */\r\n stringify: function (url, params) {\r\n var _url = url.split('#')[0];\r\n var searchObj = {};\r\n if (~url.indexOf('?')) {\r\n var _a = url.split('?'), __url = _a[0], __search = _a[1];\r\n _url = __url;\r\n searchObj = queryString.parse(__search);\r\n }\r\n var _search = queryString.stringify(Object.assign({}, searchObj, params));\r\n return _url + '?' + _search;\r\n },\r\n /**\r\n * 截取url中问号后面的参数,并转换为对象\r\n * @param {string} url url地址\r\n */\r\n parse: function (url) {\r\n var _url = url.split('#')[0];\r\n var _search = {};\r\n if (~url.indexOf('?')) {\r\n var _a = url.split('?'), __url = _a[0], __search = _a[1];\r\n _url = __url;\r\n _search = queryString.parse(__search);\r\n }\r\n return {\r\n url: _url,\r\n search: _search\r\n };\r\n }\r\n};\r\nexport var queryStringArgsCached;\r\n/**\r\n * 解析url search\r\n */\r\nexport function getQueryStringArgs() {\r\n if (isServer) {\r\n return {};\r\n }\r\n if (queryStringArgsCached) {\r\n return queryStringArgsCached;\r\n }\r\n var qs = location.search.length > 0 ? location.search.substring(1) : '';\r\n var args = Object.create(null);\r\n var items = qs.length ? qs.split('&') : [];\r\n var item = null;\r\n var name = null;\r\n var value = null;\r\n var i = 0;\r\n var len = items.length;\r\n var regx = new RegExp('(.*)=([^$].*)$', 'i');\r\n for (i = 0; i < len; i++) {\r\n item = items[i].match(regx);\r\n if (!item) {\r\n continue;\r\n }\r\n // decodeURIComponent解码\r\n name = decodeURIComponent(item[1]).toLowerCase();\r\n // 移除某些版本的意外字符(换行符)\r\n var s = item[2].replace(/%0A/g, '');\r\n value = decodeURIComponent(s);\r\n if (name.length && !args[name]) {\r\n args[name] = value;\r\n }\r\n }\r\n queryStringArgsCached = args;\r\n return args;\r\n}\r\n/**\r\n * 获取文档高度\r\n */\r\nexport function getDocumentHeight() {\r\n var body = document.body;\r\n var html = document.documentElement;\r\n return Math.max(body.offsetHeight, body.scrollHeight, html.clientHeight, html.offsetHeight, html.scrollHeight);\r\n}\r\n/**\r\n * 从url中获取参数\r\n * @param name 参数名\r\n * @returns 对应的值\r\n */\r\nexport function getParam(name) {\r\n // 转换为小写\r\n name = name.toLowerCase();\r\n return queryStringArgsCached\r\n ? queryStringArgsCached[name]\r\n : getQueryStringArgs()[name];\r\n}\r\n/**\r\n * 延时函数\r\n * @param ms 时间毫秒\r\n */\r\nexport function sleep(ms) {\r\n return new Promise(function (resolve) { return setTimeout(resolve, ms); });\r\n}\r\n/**\r\n * 日期格式化\r\n */\r\nexport function formatDate(date, formatStr) {\r\n var _date = date;\r\n var str = formatStr;\r\n var Week = ['日', '一', '二', '三', '四', '五', '六'];\r\n str = str.replace(/yyyy|YYYY/, _date.getFullYear());\r\n str = str.replace(/yy|YY/, _date.getYear() % 100 > 9 ? (_date.getYear() % 100).toString() : '0' + _date.getYear() % 100);\r\n str = str.replace(/MM/, _date.getMonth() + 1 > 9 ? (_date.getMonth() + 1).toString() : '0' + (_date.getMonth() + 1));\r\n str = str.replace(/M/g, _date.getMonth() + 1);\r\n str = str.replace(/w|W/g, Week[_date.getDay()]);\r\n str = str.replace(/dd|DD/, _date.getDate() > 9 ? _date.getDate().toString() : '0' + _date.getDate());\r\n str = str.replace(/d|D/g, _date.getDate());\r\n str = str.replace(/hh|HH/, _date.getHours() > 9 ? _date.getHours().toString() : '0' + _date.getHours());\r\n str = str.replace(/h|H/g, _date.getHours());\r\n str = str.replace(/mm/, _date.getMinutes() > 9 ? _date.getMinutes().toString() : '0' + _date.getMinutes());\r\n str = str.replace(/m/g, _date.getMinutes());\r\n str = str.replace(/ss|SS/, _date.getSeconds() > 9 ? _date.getSeconds().toString() : '0' + _date.getSeconds());\r\n str = str.replace(/s|S/g, _date.getSeconds());\r\n return str;\r\n}\r\n//# sourceMappingURL=utils.js.map"],"sourceRoot":""}