util.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. import {
  2. getStorage,
  3. setStorage
  4. } from '@/utils/localStorage';
  5. window.sessionTime = new Date();
  6. var util = {
  7. reformParam(methodName, para) {
  8. var parameter = {}
  9. parameter['merchantid'] = '1'
  10. parameter['version'] = '1'
  11. parameter['sign_type'] = 'RSA'
  12. parameter['sign'] = '123'
  13. parameter['charset'] = 'UTF-8'
  14. parameter['method'] = methodName
  15. var context = ''
  16. for (var key in para) {
  17. context += '&' + key + '=' + para[key]
  18. }
  19. parameter['context'] = context
  20. return parameter
  21. },
  22. dateFormat(date, fmt) {
  23. let ret
  24. const opt = {
  25. 'y+': date.getFullYear().toString(), // 年
  26. 'M+': (date.getMonth() + 1).toString(), // 月
  27. 'd+': date.getDate().toString(), // 日
  28. 'H+': date.getHours().toString(), // 时
  29. 'm+': date.getMinutes().toString(), // 分
  30. 's+': date.getSeconds().toString(), // 秒
  31. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  32. }
  33. for (let k in opt) {
  34. ret = new RegExp('(' + k + ')').exec(fmt)
  35. if (ret) {
  36. fmt = fmt.replace(
  37. ret[1],
  38. ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')
  39. )
  40. }
  41. }
  42. return fmt
  43. },
  44. formatDate: function(date, fmt) {
  45. if (/(y+)/.test(fmt)) {
  46. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  47. }
  48. let o = {
  49. 'M+': date.getMonth() + 1,
  50. 'd+': date.getDate(),
  51. 'h+': date.getHours(),
  52. 'm+': date.getMinutes(),
  53. 's+': date.getSeconds()
  54. }
  55. for (let k in o) {
  56. if (new RegExp(`(${k})`).test(fmt)) {
  57. let str = o[k] + ''
  58. fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str))
  59. }
  60. }
  61. return fmt
  62. },
  63. padLeftZero: function(str) {
  64. return ('00' + str).substr(str.length)
  65. },
  66. formatDatetime(val, format) {
  67. const year = val.getFullYear();
  68. const month = val.getMonth() + 1;
  69. const day = val.getDate();
  70. const hour = val.getHours();
  71. const minute = val.getMinutes();
  72. const second = val.getSeconds();
  73. return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ?
  74. minute : '0' + minute) + ':' + (second > 9 ? second : '0' + second);
  75. },
  76. formatDayTime(val) {
  77. const year = val.getFullYear();
  78. const month = val.getMonth() + 1;
  79. const day = val.getDate();
  80. const hour = val.getHours();
  81. const minute = val.getMinutes();
  82. const second = val.getSeconds();
  83. return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ?
  84. minute : '0' + minute);
  85. },
  86. formatTodayTime(val) {
  87. const year = val.getFullYear();
  88. const month = val.getMonth() + 1;
  89. const day = val.getDate();
  90. const hour = val.getHours();
  91. const minute = val.getMinutes();
  92. if (month == new Date().getMonth() + 1 && day + 1 == new Date().getDate()) {
  93. return '昨天' + hour + ':' + (minute > 9 ? minute : '0' + minute);
  94. } else if (month == new Date().getMonth() + 1 && day == new Date().getDate()) {
  95. return hour + ':' + (minute > 9 ? minute : '0' + minute);
  96. } else {
  97. return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ?
  98. minute : '0' + minute);
  99. }
  100. },
  101. /**
  102. * 计算天数
  103. * @param date1
  104. * @param date2
  105. * @returns {number}
  106. * @constructor
  107. */
  108. getNumberOfDays(date1, date2) { //获得天数
  109. if (!date1 || !date2) {
  110. return 0;
  111. }
  112. //date1:开始日期,date2结束日期
  113. var a1 = Date.parse(new Date(date1));
  114. var a2 = Date.parse(new Date(date2));
  115. var day = parseInt((a2 - a1) / (1000 * 60 * 60 * 24)) + 1; //核心:时间戳相减,然后除以天数
  116. return day
  117. },
  118. getUrlParams(url) {
  119. url = url == null ? window.location.href : url;
  120. var search = url.substring(url.lastIndexOf("?") + 1);
  121. var obj = {};
  122. var reg = /([^?&=]+)=([^?&=]*)/g;
  123. // [^?&=]+表示:除了?、&、=之外的一到多个字符
  124. // [^?&=]*表示:除了?、&、=之外的0到多个字符(任意多个)
  125. search.replace(reg, function(rs, $1, $2) {
  126. var name = decodeURIComponent($1);
  127. var val = decodeURIComponent($2);
  128. val = String(val);
  129. obj[name] = val;
  130. return rs;
  131. });
  132. return obj;
  133. },
  134. formatTime(date) {
  135. var year = date.getFullYear()
  136. var month = date.getMonth() + 1
  137. var day = date.getDate()
  138. var hour = date.getHours()
  139. var minute = date.getMinutes()
  140. var second = date.getSeconds()
  141. return [year, month, day].map(this.formatNumber).join('-') + ' ' + [hour, minute, second].map(this
  142. .formatNumber).join(
  143. ':')
  144. },
  145. formatNumber(n) {
  146. n = n.toString()
  147. return n[1] ? n : '0' + n
  148. },
  149. trackRequest(para, app = null) {
  150. if ((para.type && para.type.includes('Error'))) {
  151. //所有报错埋点以及曝光埋点不再发送至服务器
  152. return
  153. }
  154. try {
  155. if(typeof (para.clkParams) == 'object'){
  156. let obj = {
  157. locusBehaviorName: para.locusBehaviorName ? para.locusBehaviorName : ''
  158. }
  159. para.clkParams = Object.assign(obj,para.clkParams)
  160. }
  161. let pvCurPageParams = "";//字符串string对象
  162. if(para.pvCurPageParams){//调用的时候传递进来的-先转为对象
  163. pvCurPageParams = typeof para.pvCurPageParams === 'object' ? para.pvCurPageParams : JSON.parse(para.pvCurPageParams)
  164. }else{
  165. pvCurPageParams = {};
  166. }
  167. let queryObj = getStorage('queryObj') ? JSON.parse(getStorage('queryObj')) : null;
  168. let urlObj = queryObj || util.getUrlParams(location.href) || {};
  169. let brandId = urlObj.special_ID || $config.brandId || ''
  170. //在页面参数里面手动添加path参数
  171. pvCurPageParams.brandId = brandId;
  172. pvCurPageParams.locusBehaviorName = para.locusBehaviorName || currentPage.locusBehaviorName || '';
  173. pvCurPageParams.locusValue = para.locusValue || currentPage.locusValue || '';
  174. pvCurPageParams.locusName = para.locusName || currentPage.locusName || '';
  175. let data = {
  176. session: '',
  177. userAgent: navigator.userAgent.substring(0, 255) || '',
  178. browserName: navigator.appName || '',
  179. browserVersion: navigator.appVersion.substring(0, 255) || '',
  180. platform: 'h5', //iframeUrl代表是顾问分享的外链
  181. fromPlatform: urlObj.fromPlatform || urlObj.fromProduce || 'h5',
  182. ip: window.ip || '',
  183. cookieId: from_cookie || getStorage("cookie_id") || '',
  184. openId: urlObj.openid || '',
  185. userId: urlObj.leavePhoneCustomerId || '',
  186. brandUserId: urlObj.leavePhoneCustomerId || '',
  187. createTime: this.formatTime(new Date()),
  188. uploadTime: this.formatTime(new Date()),
  189. product: 'h5', //iframeUrl代表是顾问分享的外链
  190. project: para.project || urlObj.xcxHouseId || $config.xcxHouseId || '',
  191. brandId: brandId,
  192. expand: JSON.stringify(urlObj), //扩展字段
  193. imTalkId: para.imTalkId || '', //IM对话编号
  194. imTalkType: para.imTalkType || '', //IM对话类型
  195. eventName: para.eventName || '', //事件名称
  196. clkDesPage: para.clkDesPage || '', //点击前往的页面名称
  197. clkId: para.clkId || '', //点击ID
  198. clkName: para.clkName || '',
  199. pvId: para.pvId || '', //PV埋点ID
  200. clkParams: typeof para.clkParams === 'object' ? JSON.stringify(para.clkParams) : (para.clkParams || ''), //点击参数
  201. pvCurPageName: para.pvCurPageName || currentPage.pvCurPageName || '', //当前页面名称
  202. pvCurPageParams: typeof pvCurPageParams === 'object' ? JSON.stringify(pvCurPageParams) : (pvCurPageParams ||''), //当前页面参数
  203. pvLastPageName: para.pvLastPageName || '', //上一页页面名称
  204. pvLastPageParams: para.pvLastPageParams || '', //上一页页面参数
  205. pvPageLoadTime: para.pvPageLoadTime || '', //加载时间
  206. type: para.type || '', //埋点类型
  207. }
  208. let timeNow = new Date().getTime();
  209. let session = getStorage('sessionNumber') ? Number(getStorage('sessionNumber')) : timeNow;
  210. if (timeNow - sessionTime > 180000 && !urlObj.session) {
  211. // session++;
  212. session = timeNow;
  213. setStorage('sessionNumber', session)
  214. }
  215. data.session = urlObj.session || data.userId + "_" + session || '';
  216. sessionTime = timeNow;
  217. // return data;
  218. // app.globalData.session_id = data.session
  219. // app.globalData.sessionTime = timeNow;
  220. requestConfig('upload', data, true);
  221. // let param = ["SEND" +
  222. // "\nproject:" + "elab-marketing-system" +
  223. // "\nmethod:" + 'POST' +
  224. // "\npath:" + '/behavior/brandMiniWeb/upload' +
  225. // "\ndestination:" + '/ws/remote/invoke' +
  226. // "\n\n" + JSON.stringify(data) +
  227. // "\u0000"
  228. // ];
  229. // app.wsSendOrder(param,data);//socket 消息发送
  230. console.warn("***mook***", (data.pvId || data.clkId || data.eventId), data)
  231. } catch (e) {
  232. console.warn("***util.js-onError***", e);
  233. }
  234. },
  235. getSession() { //获取session
  236. let timeNow = new Date().getTime();
  237. let session = uni.getStorageSync('sessionNumber') || timeNow; //session具体的值
  238. uni.setStorage({
  239. key: "sessionNumber",
  240. data: session
  241. })
  242. return session;
  243. },
  244. };
  245. window.from_session = util.getUrlParams(location.href).session || '';
  246. window.from_cookie = util.getUrlParams(location.href).cookie || '';
  247. export default util;
  248. // module.exports = util;