import { getStorage, setStorage } from '@/utils/localStorage'; window.sessionTime = new Date(); var util = { reformParam(methodName, para) { var parameter = {} parameter['merchantid'] = '1' parameter['version'] = '1' parameter['sign_type'] = 'RSA' parameter['sign'] = '123' parameter['charset'] = 'UTF-8' parameter['method'] = methodName var context = '' for (var key in para) { context += '&' + key + '=' + para[key] } parameter['context'] = context return parameter }, dateFormat(date, fmt) { let ret const opt = { 'y+': date.getFullYear().toString(), // 年 'M+': (date.getMonth() + 1).toString(), // 月 'd+': date.getDate().toString(), // 日 'H+': date.getHours().toString(), // 时 'm+': date.getMinutes().toString(), // 分 's+': date.getSeconds().toString(), // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 } for (let k in opt) { ret = new RegExp('(' + k + ')').exec(fmt) if (ret) { fmt = fmt.replace( ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0') ) } } return fmt }, formatDate: function(date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } let o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() } for (let k in o) { if (new RegExp(`(${k})`).test(fmt)) { let str = o[k] + '' fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str)) } } return fmt }, padLeftZero: function(str) { return ('00' + str).substr(str.length) }, formatDatetime(val, format) { const year = val.getFullYear(); const month = val.getMonth() + 1; const day = val.getDate(); const hour = val.getHours(); const minute = val.getMinutes(); const second = val.getSeconds(); return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ? minute : '0' + minute) + ':' + (second > 9 ? second : '0' + second); }, formatDayTime(val) { const year = val.getFullYear(); const month = val.getMonth() + 1; const day = val.getDate(); const hour = val.getHours(); const minute = val.getMinutes(); const second = val.getSeconds(); return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ? minute : '0' + minute); }, formatTodayTime(val) { const year = val.getFullYear(); const month = val.getMonth() + 1; const day = val.getDate(); const hour = val.getHours(); const minute = val.getMinutes(); if (month == new Date().getMonth() + 1 && day + 1 == new Date().getDate()) { return '昨天' + hour + ':' + (minute > 9 ? minute : '0' + minute); } else if (month == new Date().getMonth() + 1 && day == new Date().getDate()) { return hour + ':' + (minute > 9 ? minute : '0' + minute); } else { return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ? minute : '0' + minute); } }, /** * 计算天数 * @param date1 * @param date2 * @returns {number} * @constructor */ getNumberOfDays(date1, date2) { //获得天数 if (!date1 || !date2) { return 0; } //date1:开始日期,date2结束日期 var a1 = Date.parse(new Date(date1)); var a2 = Date.parse(new Date(date2)); var day = parseInt((a2 - a1) / (1000 * 60 * 60 * 24)) + 1; //核心:时间戳相减,然后除以天数 return day }, getUrlParams(url) { url = url == null ? window.location.href : url; var search = url.substring(url.lastIndexOf("?") + 1); var obj = {}; var reg = /([^?&=]+)=([^?&=]*)/g; // [^?&=]+表示:除了?、&、=之外的一到多个字符 // [^?&=]*表示:除了?、&、=之外的0到多个字符(任意多个) search.replace(reg, function(rs, $1, $2) { var name = decodeURIComponent($1); var val = decodeURIComponent($2); val = String(val); obj[name] = val; return rs; }); return obj; }, formatTime(date) { var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() var second = date.getSeconds() return [year, month, day].map(this.formatNumber).join('-') + ' ' + [hour, minute, second].map(this .formatNumber).join( ':') }, formatNumber(n) { n = n.toString() return n[1] ? n : '0' + n }, trackRequest(para, app = null) { if ((para.type && para.type.includes('Error'))) { //所有报错埋点以及曝光埋点不再发送至服务器 return } try { if(typeof (para.clkParams) == 'object'){ let obj = { locusBehaviorName: para.locusBehaviorName ? para.locusBehaviorName : '' } para.clkParams = Object.assign(obj,para.clkParams) } let pvCurPageParams = "";//字符串string对象 if(para.pvCurPageParams){//调用的时候传递进来的-先转为对象 pvCurPageParams = typeof para.pvCurPageParams === 'object' ? para.pvCurPageParams : JSON.parse(para.pvCurPageParams) }else{ pvCurPageParams = {}; } let queryObj = getStorage('queryObj') ? JSON.parse(getStorage('queryObj')) : null; let urlObj = queryObj || util.getUrlParams(location.href) || {}; let brandId = urlObj.special_ID || $config.brandId || '' //在页面参数里面手动添加path参数 pvCurPageParams.brandId = brandId; pvCurPageParams.locusBehaviorName = para.locusBehaviorName || currentPage.locusBehaviorName || ''; pvCurPageParams.locusValue = para.locusValue || currentPage.locusValue || ''; pvCurPageParams.locusName = para.locusName || currentPage.locusName || ''; let data = { session: '', userAgent: navigator.userAgent.substring(0, 255) || '', browserName: navigator.appName || '', browserVersion: navigator.appVersion.substring(0, 255) || '', platform: 'h5', //iframeUrl代表是顾问分享的外链 fromPlatform: urlObj.fromPlatform || urlObj.fromProduce || 'h5', ip: window.ip || '', cookieId: from_cookie || getStorage("cookie_id") || '', openId: urlObj.openid || '', userId: urlObj.leavePhoneCustomerId || '', brandUserId: urlObj.leavePhoneCustomerId || '', createTime: this.formatTime(new Date()), uploadTime: this.formatTime(new Date()), product: 'h5', //iframeUrl代表是顾问分享的外链 project: para.project || urlObj.xcxHouseId || $config.xcxHouseId || '', brandId: brandId, expand: JSON.stringify(urlObj), //扩展字段 imTalkId: para.imTalkId || '', //IM对话编号 imTalkType: para.imTalkType || '', //IM对话类型 eventName: para.eventName || '', //事件名称 clkDesPage: para.clkDesPage || '', //点击前往的页面名称 clkId: para.clkId || '', //点击ID clkName: para.clkName || '', pvId: para.pvId || '', //PV埋点ID clkParams: typeof para.clkParams === 'object' ? JSON.stringify(para.clkParams) : (para.clkParams || ''), //点击参数 pvCurPageName: para.pvCurPageName || currentPage.pvCurPageName || '', //当前页面名称 pvCurPageParams: typeof pvCurPageParams === 'object' ? JSON.stringify(pvCurPageParams) : (pvCurPageParams ||''), //当前页面参数 pvLastPageName: para.pvLastPageName || '', //上一页页面名称 pvLastPageParams: para.pvLastPageParams || '', //上一页页面参数 pvPageLoadTime: para.pvPageLoadTime || '', //加载时间 type: para.type || '', //埋点类型 } let timeNow = new Date().getTime(); let session = getStorage('sessionNumber') ? Number(getStorage('sessionNumber')) : timeNow; if (timeNow - sessionTime > 180000 && !urlObj.session) { // session++; session = timeNow; setStorage('sessionNumber', session) } data.session = urlObj.session || data.userId + "_" + session || ''; sessionTime = timeNow; // return data; // app.globalData.session_id = data.session // app.globalData.sessionTime = timeNow; requestConfig('upload', data, true); // let param = ["SEND" + // "\nproject:" + "elab-marketing-system" + // "\nmethod:" + 'POST' + // "\npath:" + '/behavior/brandMiniWeb/upload' + // "\ndestination:" + '/ws/remote/invoke' + // "\n\n" + JSON.stringify(data) + // "\u0000" // ]; // app.wsSendOrder(param,data);//socket 消息发送 console.warn("***mook***", (data.pvId || data.clkId || data.eventId), data) } catch (e) { console.warn("***util.js-onError***", e); } }, getSession() { //获取session let timeNow = new Date().getTime(); let session = uni.getStorageSync('sessionNumber') || timeNow; //session具体的值 uni.setStorage({ key: "sessionNumber", data: session }) return session; }, }; window.from_session = util.getUrlParams(location.href).session || ''; window.from_cookie = util.getUrlParams(location.href).cookie || ''; export default util; // module.exports = util;