|
@@ -0,0 +1,2217 @@
|
|
|
|
+/*
|
|
|
|
+ * Date Format 1.2.3
|
|
|
|
+ * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
|
|
|
+ * MIT license
|
|
|
|
+ *
|
|
|
|
+ * Includes enhancements by Scott Trenda <scott.trenda.net>
|
|
|
|
+ * and Kris Kowal <cixar.com/~kris.kowal/>
|
|
|
|
+ *
|
|
|
|
+ * Accepts a date, a mask, or a date and a mask.
|
|
|
|
+ * Returns a formatted version of the given date.
|
|
|
|
+ * The date defaults to the current date/time.
|
|
|
|
+ * The mask defaults to dateFormat.masks.default.
|
|
|
|
+ */
|
|
|
|
+var dateFormat = function () {
|
|
|
|
+ var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
|
|
|
|
+ timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
|
|
|
|
+ timezoneClip = /[^-+\dA-Z]/g,
|
|
|
|
+ pad = function (val, len) {
|
|
|
|
+ val = String(val);
|
|
|
|
+ len = len || 2;
|
|
|
|
+ while (val.length < len) val = "0" + val;
|
|
|
|
+ return val;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ // Regexes and supporting functions are cached through closure
|
|
|
|
+ return function (date, mask, utc) {
|
|
|
|
+ var dF = dateFormat;
|
|
|
|
+
|
|
|
|
+ // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
|
|
|
|
+ if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
|
|
|
|
+ mask = date;
|
|
|
|
+ date = undefined;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Passing date through Date applies Date.parse, if necessary
|
|
|
|
+ date = date ? new Date(date) : new Date;
|
|
|
|
+ if (isNaN(date)) throw SyntaxError("invalid date");
|
|
|
|
+
|
|
|
|
+ mask = String(dF.masks[mask] || mask || dF.masks["default"]);
|
|
|
|
+
|
|
|
|
+ // Allow setting the utc argument via the mask
|
|
|
|
+ if (mask.slice(0, 4) == "UTC:") {
|
|
|
|
+ mask = mask.slice(4);
|
|
|
|
+ utc = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var _ = utc ? "getUTC" : "get",
|
|
|
|
+ d = date[_ + "Date"](),
|
|
|
|
+ D = date[_ + "Day"](),
|
|
|
|
+ m = date[_ + "Month"](),
|
|
|
|
+ y = date[_ + "FullYear"](),
|
|
|
|
+ H = date[_ + "Hours"](),
|
|
|
|
+ M = date[_ + "Minutes"](),
|
|
|
|
+ s = date[_ + "Seconds"](),
|
|
|
|
+ L = date[_ + "Milliseconds"](),
|
|
|
|
+ o = utc ? 0 : date.getTimezoneOffset(),
|
|
|
|
+ flags = {
|
|
|
|
+ d: d,
|
|
|
|
+ dd: pad(d),
|
|
|
|
+ ddd: dF.i18n.dayNames[D],
|
|
|
|
+ dddd: dF.i18n.dayNames[D + 7],
|
|
|
|
+ m: m + 1,
|
|
|
|
+ mm: pad(m + 1),
|
|
|
|
+ mmm: dF.i18n.monthNames[m],
|
|
|
|
+ mmmm: dF.i18n.monthNames[m + 12],
|
|
|
|
+ yy: String(y).slice(2),
|
|
|
|
+ yyyy: y,
|
|
|
|
+ h: H % 12 || 12,
|
|
|
|
+ hh: pad(H % 12 || 12),
|
|
|
|
+ H: H,
|
|
|
|
+ HH: pad(H),
|
|
|
|
+ M: M,
|
|
|
|
+ MM: pad(M),
|
|
|
|
+ s: s,
|
|
|
|
+ ss: pad(s),
|
|
|
|
+ l: pad(L, 3),
|
|
|
|
+ L: pad(L > 99 ? Math.round(L / 10) : L),
|
|
|
|
+ t: H < 12 ? "a" : "p",
|
|
|
|
+ tt: H < 12 ? "am" : "pm",
|
|
|
|
+ T: H < 12 ? "A" : "P",
|
|
|
|
+ TT: H < 12 ? "AM" : "PM",
|
|
|
|
+ Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
|
|
|
|
+ o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
|
|
|
|
+ S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ return mask.replace(token, function ($0) {
|
|
|
|
+ return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
|
|
|
|
+ });
|
|
|
|
+ };
|
|
|
|
+}();
|
|
|
|
+
|
|
|
|
+// Some common format strings
|
|
|
|
+dateFormat.masks = {
|
|
|
|
+ "default": "ddd mmm dd yyyy HH:MM:ss",
|
|
|
|
+ shortDate: "m/d/yy",
|
|
|
|
+ mediumDate: "mmm d, yyyy",
|
|
|
|
+ longDate: "mmmm d, yyyy",
|
|
|
|
+ fullDate: "dddd, mmmm d, yyyy",
|
|
|
|
+ shortTime: "h:MM TT",
|
|
|
|
+ mediumTime: "h:MM:ss TT",
|
|
|
|
+ longTime: "h:MM:ss TT Z",
|
|
|
|
+ isoDate: "yyyy-mm-dd",
|
|
|
|
+ isoTime: "HH:MM:ss",
|
|
|
|
+ isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
|
|
|
|
+ isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+// Internationalization strings
|
|
|
|
+dateFormat.i18n = {
|
|
|
|
+ dayNames: [
|
|
|
|
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
|
|
|
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
|
|
|
+ ],
|
|
|
|
+ monthNames: [
|
|
|
|
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
|
|
|
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
|
|
|
|
+ ]
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+// For convenience...
|
|
|
|
+Date.prototype.FormatEnhance = function (mask, utc) {
|
|
|
|
+ return dateFormat(this, mask, utc);
|
|
|
|
+};
|
|
|
|
+Date.prototype.Format = function (fmt) { //author: meizz
|
|
|
|
+ var o = {
|
|
|
|
+ "M+": this.getMonth() + 1, //月份
|
|
|
|
+ "d+": this.getDate(), //日
|
|
|
|
+ "h+": this.getHours(), //小时
|
|
|
|
+ "m+": this.getMinutes(), //分
|
|
|
|
+ "s+": this.getSeconds(), //秒
|
|
|
|
+ "q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
|
|
|
+ "S": this.getMilliseconds() //毫秒
|
|
|
|
+ };
|
|
|
|
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
|
|
|
+ for (var k in o)
|
|
|
|
+ if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
|
|
|
+ return fmt;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//替换input中的非数字
|
|
|
|
+function rePlaceUnDigital (obj) {
|
|
|
|
+ if (/[^\d]/g.test(obj.value)) {
|
|
|
|
+ var pos = getCursorPos(obj);
|
|
|
|
+ var array = obj.value.split("");
|
|
|
|
+ for (var i in array) {
|
|
|
|
+ if (/[^\d]/g.test(array[i])) {
|
|
|
|
+ pos--;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ obj.value = obj.value.replace(/[^\d]/g, '');
|
|
|
|
+ setCursorPos(obj, pos);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//替换input中的空格
|
|
|
|
+function rePlaceSpace (obj) {
|
|
|
|
+ if (obj.value.indexOf(' ') > -1) {
|
|
|
|
+ var pos = getCursorPos(obj);
|
|
|
|
+ var array = obj.value.split("");
|
|
|
|
+ for (var i in array) {
|
|
|
|
+ if (array[i] == " ") {
|
|
|
|
+ pos--;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ obj.value = obj.value.replace(new RegExp(' ', 'gm'), '');
|
|
|
|
+ setCursorPos(obj, pos);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 设置光标在短连接输入框中的位置
|
|
|
|
+ * @param inpObj 输入框
|
|
|
|
+ * @param pos
|
|
|
|
+ */
|
|
|
|
+function setCursorPos (inpObj, pos) {
|
|
|
|
+ if (navigator.userAgent.indexOf("MSIE") > -1) {
|
|
|
|
+ var range = document.selection.createRange();
|
|
|
|
+ var textRange = inpObj.createTextRange();
|
|
|
|
+ textRange.moveStart('character', pos);
|
|
|
|
+ textRange.collapse();
|
|
|
|
+ textRange.select();
|
|
|
|
+ } else {
|
|
|
|
+ inpObj.setSelectionRange(pos, pos);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 获取光标在短连接输入框中的位置
|
|
|
|
+ * @param inpObj 输入框
|
|
|
|
+ */
|
|
|
|
+function getCursorPos (inpObj) {
|
|
|
|
+ if (navigator.userAgent.indexOf("MSIE") > -1) { // IE
|
|
|
|
+ var range = document.selection.createRange();
|
|
|
|
+ range.text = '';
|
|
|
|
+ range.setEndPoint('StartToStart', inpObj.createTextRange());
|
|
|
|
+ return range.text.length;
|
|
|
|
+ } else {
|
|
|
|
+ return inpObj.selectionStart;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取cookie
|
|
|
|
+function getCookie (name) {
|
|
|
|
+ var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
|
|
|
|
+ if (arr = document.cookie.match(reg))
|
|
|
|
+ return unescape(arr[2]);
|
|
|
|
+ else
|
|
|
|
+ return null;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 正则表达式实现endWith效果函数
|
|
|
|
+ * @param str 要判断的字符
|
|
|
|
+ **/
|
|
|
|
+String.prototype.endWith = function (str) {
|
|
|
|
+ var reg = new RegExp(str + "$");
|
|
|
|
+ return reg.test(this);
|
|
|
|
+}
|
|
|
|
+/**
|
|
|
|
+ * 正则表达式实现startWith效果函数
|
|
|
|
+ * @param str 要判断的字符
|
|
|
|
+ **/
|
|
|
|
+String.prototype.startWith = function (str) {
|
|
|
|
+ var reg = new RegExp("^" + str);
|
|
|
|
+ return reg.test(this);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* ios input bugs*/
|
|
|
|
+function fixIOSInputBugs () {
|
|
|
|
+ var windowHeight = window.innerHeight
|
|
|
|
+
|
|
|
|
+ function checkHeightForIOS (e) {
|
|
|
|
+ var windowFocusHeight = window.innerHeight
|
|
|
|
+ if (windowHeight == windowFocusHeight) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if (e.target.hasClass('searchinput') || e.currentTarget.hasClass('searchinput')) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ var currentPosition;
|
|
|
|
+ var speed = 1; //页面滚动距离
|
|
|
|
+ currentPosition = document.documentElement.scrollTop || document.body.scrollTop;
|
|
|
|
+ currentPosition -= speed;
|
|
|
|
+ window.scrollTo(0, currentPosition); //页面向上滚动
|
|
|
|
+ currentPosition += speed; //speed变量
|
|
|
|
+ window.scrollTo(0, currentPosition); //页面向下滚动
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $("body").on('click', '#recList', function (e) {
|
|
|
|
+ checkHeightForIOS(e)
|
|
|
|
+ })
|
|
|
|
+ $("body").on('click', '.inputDiv', function (e) {
|
|
|
|
+ checkHeightForIOS(e)
|
|
|
|
+ })
|
|
|
|
+ $("body").on('blur', 'input', function (e) {
|
|
|
|
+ // checkHeightForIOS(e)
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//动态加载css
|
|
|
|
+function addCssByLink (url) {
|
|
|
|
+ var links = document.getElementsByTagName('link')
|
|
|
|
+ for (var i = 0; i < links.length; i++) {
|
|
|
|
+ if (links[i].href && links[i].href.indexOf(url) > -1) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var doc = document;
|
|
|
|
+ var link = doc.createElement("link");
|
|
|
|
+ link.setAttribute("rel", "stylesheet");
|
|
|
|
+ link.setAttribute("type", "text/css");
|
|
|
|
+ link.setAttribute("href", url);
|
|
|
|
+ var heads = doc.getElementsByTagName("head");
|
|
|
|
+ if (heads.length)
|
|
|
|
+ heads[0].appendChild(link);
|
|
|
|
+ else
|
|
|
|
+ doc.documentElement.appendChild(link);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//动态加载js
|
|
|
|
+function loadJS (url, success) {
|
|
|
|
+ var scripts = document.getElementsByTagName('script')
|
|
|
|
+ for (var i = 0; i < scripts.length; i++) {
|
|
|
|
+ if (scripts[i].src && scripts[i].src.indexOf(url) > -1) {
|
|
|
|
+ if (success) success();
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var domScript = document.createElement('script');
|
|
|
|
+ domScript.src = url;
|
|
|
|
+ success = success || function () {
|
|
|
|
+ };
|
|
|
|
+ domScript.onload = domScript.onreadystatechange = function () {
|
|
|
|
+ if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
|
|
|
|
+ success();
|
|
|
|
+ this.onload = this.onreadystatechange = null;
|
|
|
|
+ //this.parentNode.removeChild(this);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ document.getElementsByTagName('head')[0].appendChild(domScript);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//判断对象是否为空对象{}
|
|
|
|
+function isNullObj (obj) {
|
|
|
|
+ for (var i in obj) {
|
|
|
|
+ if (obj.hasOwnProperty(i)) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return true;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var JyObjMessage = new Object();
|
|
|
|
+
|
|
|
|
+// $env, $envs的辅助函数
|
|
|
|
+window.utilsEnv = {
|
|
|
|
+ // 获取当前是android或者ios
|
|
|
|
+ androidOrIOS: function () {
|
|
|
|
+ var u = navigator.userAgent.toLowerCase()
|
|
|
|
+ var agent = null
|
|
|
|
+ if (/iphone|ipod|ipad|ios/.test(u)) {
|
|
|
|
+ agent = 'ios'
|
|
|
|
+ } else if (/(Android)/i.test(u)) {
|
|
|
|
+ agent = 'android'
|
|
|
|
+ }
|
|
|
|
+ return agent
|
|
|
|
+ },
|
|
|
|
+ getIsH5HostName: function () {
|
|
|
|
+ var hostname = location.hostname.toLowerCase()
|
|
|
|
+ return hostname.indexOf('h5') !== -1
|
|
|
|
+ },
|
|
|
|
+ // 是否是在app里面运行
|
|
|
|
+ getIsInTheAppContainer: function () {
|
|
|
|
+ // 判断是否在app环境下
|
|
|
|
+ var inApp = false
|
|
|
|
+ var u = navigator.userAgent.toLowerCase()
|
|
|
|
+ if (u.indexOf('jianyuapp') !== -1) {
|
|
|
|
+ inApp = true
|
|
|
|
+ return inApp
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ if (this.androidOrIOS() === 'ios') {
|
|
|
|
+ var iniOSApp = typeof window.webkit.messageHandlers.skipAppointTab.postMessage === 'function'
|
|
|
|
+ inApp = iniOSApp
|
|
|
|
+ } else {
|
|
|
|
+ var inAndroidApp = typeof window.JyObj !== 'undefined'
|
|
|
|
+ inApp = inAndroidApp
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ inApp = false
|
|
|
|
+ }
|
|
|
|
+ return inApp
|
|
|
|
+ },
|
|
|
|
+ getPlatformEnvs: function () {
|
|
|
|
+ var inWX = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
|
|
|
|
+ var inApp = this.getIsInTheAppContainer()
|
|
|
|
+ var platformOS = this.androidOrIOS()
|
|
|
|
+ var getPlatform = function () {
|
|
|
|
+ var h5host = window.utilsEnv.getIsH5HostName()
|
|
|
|
+ if (inApp) {
|
|
|
|
+ return 'app'
|
|
|
|
+ } else if (h5host) {
|
|
|
|
+ return 'h5'
|
|
|
|
+ } else if (inWX) {
|
|
|
|
+ return 'wx'
|
|
|
|
+ } else {
|
|
|
|
+ return 'h5'
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var platform = getPlatform()
|
|
|
|
+ return {
|
|
|
|
+ platformOS: platformOS,
|
|
|
|
+ platform: platform,
|
|
|
|
+ inApp: inApp,
|
|
|
|
+ inWX: inWX
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+utilsEnv.platformEnvs = utilsEnv.getPlatformEnvs()
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 提供模拟默认客户端函数,避免报错
|
|
|
|
+ */
|
|
|
|
+function mockAppFn () {
|
|
|
|
+ if (utilsEnv.platformEnvs.inApp) return
|
|
|
|
+ // 非APP环境下,提供默认函数
|
|
|
|
+ window.JyObj = {
|
|
|
|
+ mock: true,
|
|
|
|
+ //获取经纬度
|
|
|
|
+ getLLitude: function () {
|
|
|
|
+ return ''
|
|
|
|
+ },
|
|
|
|
+ /*跳转到指定的webview
|
|
|
|
+ * name 对应的值:
|
|
|
|
+ * search:搜索 subscribe:订阅 box:百宝箱 me:我的 message:消息
|
|
|
|
+ */
|
|
|
|
+ skipAppointTab: function (name) {},
|
|
|
|
+ /*刷新指定的webview
|
|
|
|
+ * name 对应的值:
|
|
|
|
+ * search:搜索 subscribe:订阅 box:百宝箱 me:我的 message:消息
|
|
|
|
+ * type 对应的值:
|
|
|
|
+ * 0:当前页 1:一级页面
|
|
|
|
+ */
|
|
|
|
+ refreshAppointTab: function (name, type) {},
|
|
|
|
+ skipCameraWithParam: function (type) {},
|
|
|
|
+ // 底部导航消息总数方法
|
|
|
|
+ sendMsgCount: function (num) {},
|
|
|
|
+ // 新打开相册客户端方法
|
|
|
|
+ skipAlbumWithParam: function (type) {},
|
|
|
|
+ savePic: function (imgbase64) {},
|
|
|
|
+ //读取复制内容
|
|
|
|
+ readRight: function () {},
|
|
|
|
+ //写入复制内容
|
|
|
|
+ wirteRight: function (txt) {},
|
|
|
|
+ //清除复制内容
|
|
|
|
+ clearRight: function () {},
|
|
|
|
+ //拨打电话
|
|
|
|
+ callPhone: function (phone) {},
|
|
|
|
+ //抖音or快手其他应用appName:应用名称;appLink:应用链接
|
|
|
|
+ openOtherAppLinks: function (appName, appLink) {},
|
|
|
|
+ //调用接口修改消息通知的打开数
|
|
|
|
+ openActivityPage: function (url, rectype, openid) {},
|
|
|
|
+ //清除 JyObjMessage
|
|
|
|
+ clearMessage: function () {},
|
|
|
|
+ //隐藏显示底部菜单栏 0:隐藏;1:显示
|
|
|
|
+ hiddenBottom: function (val) {},
|
|
|
|
+ //微信登录
|
|
|
|
+ loginByWeixin: function () {},
|
|
|
|
+ //分享功能
|
|
|
|
+ share: function (type, title, content, link) {},
|
|
|
|
+ //保存用户token
|
|
|
|
+ saveUserToken: function (val) {},
|
|
|
|
+ //获取用户token
|
|
|
|
+ getUserToken: function () {},
|
|
|
|
+ //移除用户token
|
|
|
|
+ removeUserToken: function () {},
|
|
|
|
+ //查看开关状态 是否接受消息
|
|
|
|
+ checkNoticePermission: function () {},
|
|
|
|
+ //打开接受消息开关
|
|
|
|
+ openSystemNotification: function () {},
|
|
|
|
+ //获取极光推送id
|
|
|
|
+ getPushRid: function () {},
|
|
|
|
+ //跳转外部链接
|
|
|
|
+ openExternalLink: function (url, title) {},
|
|
|
|
+ //获取当前版本号
|
|
|
|
+ getVersion: function () {},
|
|
|
|
+ alert: function (content) {},
|
|
|
|
+ //是否安装了微信
|
|
|
|
+ isInstallWeixin: function () {},
|
|
|
|
+ //登录加密
|
|
|
|
+ getCipherText: function (val) {},
|
|
|
|
+ //刷新首页和订阅页面
|
|
|
|
+ checkLab: function () {},
|
|
|
|
+ //登录成功后向客户端传参
|
|
|
|
+ loginSuccess: function (status) {},
|
|
|
|
+ //客户端登录页面点击返回 跳转到搜索首页
|
|
|
|
+ backUrl: function (val) {},
|
|
|
|
+ //清空通知栏消息
|
|
|
|
+ clearPushMessage: function () {},
|
|
|
|
+ //隐藏小红点
|
|
|
|
+ hideRedSpotOnMenu: function (menu) {},
|
|
|
|
+ //显示小红点
|
|
|
|
+ showRedSpotOnMenu: function (menu) {},
|
|
|
|
+ //微信支付
|
|
|
|
+ wxPay: function (order) {},
|
|
|
|
+ //支付宝支付
|
|
|
|
+ aliPay: function (order) {},
|
|
|
|
+ //获取原生的推送id
|
|
|
|
+ getOtherPushRid: function () {},
|
|
|
|
+ //获取手机型号
|
|
|
|
+ getPhoneBrand: function () {},
|
|
|
|
+ //获取定位
|
|
|
|
+ getLocation: function () {},
|
|
|
|
+ //切换菜单
|
|
|
|
+ chooseTab: function (indexTab) {},
|
|
|
|
+ //打开照相机
|
|
|
|
+ skipCamera: function () {},
|
|
|
|
+ //打开相册
|
|
|
|
+ skipAlbum: function () {},
|
|
|
|
+ //点击返回调用
|
|
|
|
+ judgeIsHidden: function (referer) {},
|
|
|
|
+ //返回值 处理
|
|
|
|
+ IosCall: function (functionName, args) {},
|
|
|
|
+ //查看定位开关状态 是否开启
|
|
|
|
+ checkLocationPermission: function () {},
|
|
|
|
+ //ios附件下载
|
|
|
|
+ //filename 文件名称不带后缀 【文件名称中不能带“/”否则会解析为多个目录】
|
|
|
|
+ //filetype 文件类型:doc word excel 等等
|
|
|
|
+ //fileurl 文件链接
|
|
|
|
+ //filesize 文件大小 字符串
|
|
|
|
+ //doc 、docx、excel 、xls 、 xlsxppt 、 pptx、 pdf、 txt、png 、PNG、jpg 、JPG 暂定这些为常见类型~支持在线预览+下载+转存
|
|
|
|
+ //其他类型仅支持下载+转存
|
|
|
|
+ downLoadFile: function (filename,filetype,fileurl,filesize) {},
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 部分h5浏览器(华为、荣耀)页面返回不刷新兼容
|
|
|
|
+function fixSomeH5BackRefresh () {
|
|
|
|
+ if (utilsEnv.platformEnvs.platform !== 'h5') return
|
|
|
|
+ const ua = navigator.userAgent.toLowerCase()
|
|
|
|
+ // 判断是不是华为/荣耀浏览器
|
|
|
|
+ const huawei = ua.includes('huawei') || ua.includes('honor')
|
|
|
|
+ if (huawei) {
|
|
|
|
+ window.addEventListener('visibilitychange', function () {
|
|
|
|
+ const v = document.visibilityState
|
|
|
|
+ if (v === 'hidden') {
|
|
|
|
+ // do something
|
|
|
|
+ } else if (v === 'visible') {
|
|
|
|
+ location.reload()
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @date 2023-1-29
|
|
|
|
+ * 用于快速实现移动端引流相关调整,在App代码基础移植适配H5
|
|
|
|
+ */
|
|
|
|
+mockAppFn()
|
|
|
|
+fixSomeH5BackRefresh() // 华为、荣耀h5浏览器在页面返回不刷新兼容
|
|
|
|
+
|
|
|
|
+$(function () {
|
|
|
|
+ if (mySysIsIos() && utilsEnv.platformEnvs.inApp) {
|
|
|
|
+ window.JyObj = {
|
|
|
|
+ //获取经纬度
|
|
|
|
+ getLLitude: function () {
|
|
|
|
+ return JyObj.IosCall("getLLitude")
|
|
|
|
+ },
|
|
|
|
+ /*跳转到指定的webview
|
|
|
|
+ * name 对应的值:
|
|
|
|
+ * search:搜索 subscribe:订阅 box:百宝箱 me:我的 message:消息
|
|
|
|
+ */
|
|
|
|
+ skipAppointTab: function (name) {
|
|
|
|
+ JyObjMessage.name = name
|
|
|
|
+ window.webkit.messageHandlers.skipAppointTab.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ /*刷新指定的webview
|
|
|
|
+ * name 对应的值:
|
|
|
|
+ * search:搜索 subscribe:订阅 box:百宝箱 me:我的 message:消息
|
|
|
|
+ * type 对应的值:
|
|
|
|
+ * 0:当前页 1:一级页面
|
|
|
|
+ */
|
|
|
|
+ refreshAppointTab: function (name, type) {
|
|
|
|
+ JyObjMessage.name = name
|
|
|
|
+ JyObjMessage.type = type
|
|
|
|
+ window.webkit.messageHandlers.refreshAppointTab.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ skipCameraWithParam: function (type) {
|
|
|
|
+ JyObjMessage.type = type
|
|
|
|
+ window.webkit.messageHandlers.skipCameraWithParam.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ // 底部导航消息总数方法
|
|
|
|
+ sendMsgCount: function (num) {
|
|
|
|
+ JyObjMessage.num = num
|
|
|
|
+ window.webkit.messageHandlers.sendMsgCount.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ // 新打开相册客户端方法
|
|
|
|
+ skipAlbumWithParam: function (type) {
|
|
|
|
+ JyObjMessage.type = type
|
|
|
|
+ window.webkit.messageHandlers.skipAlbumWithParam.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ savePic: function (imgbase64) {
|
|
|
|
+ JyObjMessage.imgbase64 = imgbase64
|
|
|
|
+ window.webkit.messageHandlers.savePic.postMessage(JyObjMessage)
|
|
|
|
+ JyObj.clearMessage()
|
|
|
|
+ },
|
|
|
|
+ //读取复制内容
|
|
|
|
+ readRight: function () {
|
|
|
|
+ return window.webkit.messageHandlers.readRight.postMessage(JyObjMessage);
|
|
|
|
+ },
|
|
|
|
+ //写入复制内容
|
|
|
|
+ wirteRight: function (txt) {
|
|
|
|
+ JyObjMessage["txt"] = txt;
|
|
|
|
+ window.webkit.messageHandlers.wirteRight.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //清除复制内容
|
|
|
|
+ clearRight: function () {
|
|
|
|
+ window.webkit.messageHandlers.clearRight.postMessage(JyObjMessage);
|
|
|
|
+ },
|
|
|
|
+ //拨打电话
|
|
|
|
+ callPhone: function (phone) {
|
|
|
|
+ JyObjMessage["phone"] = phone;
|
|
|
|
+ window.webkit.messageHandlers.callPhone.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //抖音or快手其他应用appName:应用名称;appLink:应用链接
|
|
|
|
+ openOtherAppLinks: function (appName, appLink) {
|
|
|
|
+ JyObjMessage["appName"] = appName;
|
|
|
|
+ JyObjMessage["appLink"] = appLink;
|
|
|
|
+ window.webkit.messageHandlers.openOtherAppLinks.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //调用接口修改消息通知的打开数
|
|
|
|
+ openActivityPage: function (url, rectype, openid) {
|
|
|
|
+ JyObjMessage["url"] = url;
|
|
|
|
+ JyObjMessage["rectype"] = rectype;
|
|
|
|
+ JyObjMessage["openid"] = openid;
|
|
|
|
+ window.webkit.messageHandlers.openActivityPage.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //清除 JyObjMessage
|
|
|
|
+ clearMessage: function () {
|
|
|
|
+ JyObjMessage = new Object();
|
|
|
|
+ },
|
|
|
|
+ //隐藏显示底部菜单栏 0:隐藏;1:显示
|
|
|
|
+ hiddenBottom: function (val) {
|
|
|
|
+ JyObjMessage["hidden"] = val;
|
|
|
|
+ window.webkit.messageHandlers.hiddenBottom.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //微信登录
|
|
|
|
+ loginByWeixin: function () {
|
|
|
|
+ window.webkit.messageHandlers.loginByWeixin.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //分享功能
|
|
|
|
+ share: function (type, title, content, link) {
|
|
|
|
+ JyObjMessage["type"] = type
|
|
|
|
+ JyObjMessage["title"] = title
|
|
|
|
+ JyObjMessage["content"] = content
|
|
|
|
+ JyObjMessage["link"] = link
|
|
|
|
+ window.webkit.messageHandlers.share.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //保存用户token
|
|
|
|
+ saveUserToken: function (val) {
|
|
|
|
+ JyObjMessage["token"] = val;
|
|
|
|
+ window.webkit.messageHandlers.saveUserToken.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //获取用户token
|
|
|
|
+ getUserToken: function () {
|
|
|
|
+ return JyObj.IosCall("getUserToken")
|
|
|
|
+ },
|
|
|
|
+ //移除用户token
|
|
|
|
+ removeUserToken: function () {
|
|
|
|
+ window.webkit.messageHandlers.removeUserToken.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //查看开关状态 是否接受消息
|
|
|
|
+ checkNoticePermission: function () {
|
|
|
|
+ return JyObj.IosCall("checkNoticePermission")
|
|
|
|
+ },
|
|
|
|
+ //打开接受消息开关
|
|
|
|
+ openSystemNotification: function () {
|
|
|
|
+ window.webkit.messageHandlers.openSystemNotification.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //获取极光推送id
|
|
|
|
+ getPushRid: function () {
|
|
|
|
+ return JyObj.IosCall("getPushRid")
|
|
|
|
+ },
|
|
|
|
+ //跳转外部链接
|
|
|
|
+ openExternalLink: function (url, title) {
|
|
|
|
+ JyObjMessage["url"] = url
|
|
|
|
+ JyObjMessage["title"] = title
|
|
|
|
+ window.webkit.messageHandlers.openExternalLink.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //获取当前版本号
|
|
|
|
+ getVersion: function () {
|
|
|
|
+ return JyObj.IosCall("getVersion")
|
|
|
|
+ },
|
|
|
|
+ alert: function (content) {
|
|
|
|
+ JyObjMessage["content"] = content
|
|
|
|
+ window.webkit.messageHandlers.alert.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //是否安装了微信
|
|
|
|
+ isInstallWeixin: function () {
|
|
|
|
+ return JyObj.IosCall("isInstallWeixin")
|
|
|
|
+ },
|
|
|
|
+ //登录加密
|
|
|
|
+ getCipherText: function (val) {
|
|
|
|
+ JyObjMessage["phone"] = val
|
|
|
|
+ return JyObj.IosCall("getCipherText", JyObjMessage)
|
|
|
|
+ },
|
|
|
|
+ //刷新首页和订阅页面
|
|
|
|
+ checkLab: function () {
|
|
|
|
+ window.webkit.messageHandlers.checkLab.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //登录成功后向客户端传参
|
|
|
|
+ loginSuccess: function (status) {
|
|
|
|
+ JyObjMessage["status"] = status
|
|
|
|
+ window.webkit.messageHandlers.loginSuccess.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //客户端登录页面点击返回 跳转到搜索首页
|
|
|
|
+ backUrl: function (val) {
|
|
|
|
+ JyObjMessage["status"] = val;
|
|
|
|
+ window.webkit.messageHandlers.backUrl.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //清空通知栏消息
|
|
|
|
+ clearPushMessage: function () {
|
|
|
|
+ window.webkit.messageHandlers.clearPushMessage.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //隐藏小红点
|
|
|
|
+ hideRedSpotOnMenu: function (menu) {
|
|
|
|
+ JyObjMessage["menu"] = menu;
|
|
|
|
+ window.webkit.messageHandlers.hideRedSpotOnMenu.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //显示小红点
|
|
|
|
+ showRedSpotOnMenu: function (menu) {
|
|
|
|
+ JyObjMessage["menu"] = menu;
|
|
|
|
+ window.webkit.messageHandlers.showRedSpotOnMenu.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //微信支付
|
|
|
|
+ wxPay: function (order) {
|
|
|
|
+ JyObjMessage["order"] = order;
|
|
|
|
+ window.webkit.messageHandlers.wxPay.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //支付宝支付
|
|
|
|
+ aliPay: function (order) {
|
|
|
|
+ JyObjMessage["order"] = order;
|
|
|
|
+ window.webkit.messageHandlers.aliPay.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //获取原生的推送id
|
|
|
|
+ getOtherPushRid: function () {
|
|
|
|
+ return JyObj.IosCall("getOtherPushRid")
|
|
|
|
+ },
|
|
|
|
+ //获取手机型号
|
|
|
|
+ getPhoneBrand: function () {
|
|
|
|
+ return JyObj.IosCall("getPhoneBrand")
|
|
|
|
+ },
|
|
|
|
+ //获取定位
|
|
|
|
+ getLocation: function () {
|
|
|
|
+ return JyObj.IosCall("getLocation")
|
|
|
|
+ },
|
|
|
|
+ //切换菜单
|
|
|
|
+ chooseTab: function (indexTab) {
|
|
|
|
+ JyObjMessage["indexTab"] = indexTab;
|
|
|
|
+ window.webkit.messageHandlers.chooseTab.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //打开照相机
|
|
|
|
+ skipCamera: function () {
|
|
|
|
+ window.webkit.messageHandlers.skipCamera.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //打开相册
|
|
|
|
+ skipAlbum: function () {
|
|
|
|
+ window.webkit.messageHandlers.skipAlbum.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //点击返回调用
|
|
|
|
+ judgeIsHidden: function (referer) {
|
|
|
|
+ JyObjMessage["referer"] = referer;
|
|
|
|
+ window.webkit.messageHandlers.judgeIsHidden.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ //返回值 处理
|
|
|
|
+ IosCall: function (functionName, args) {
|
|
|
|
+ if (args != "" && args != undefined) {
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ }
|
|
|
|
+ var payload = { "jsName": functionName, "arguments": args };
|
|
|
|
+ var res = prompt(JSON.stringify(payload));
|
|
|
|
+ if (res != "") {
|
|
|
|
+ var resObj = JSON.parse(res)
|
|
|
|
+ var type = resObj.type
|
|
|
|
+ switch (type) {
|
|
|
|
+ case "int":
|
|
|
|
+ return parseInt(resObj.value)
|
|
|
|
+ case "string":
|
|
|
|
+ return resObj.value
|
|
|
|
+ case "bool":
|
|
|
|
+ if (resObj.value == "true") {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+ default:
|
|
|
|
+ return ""
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ""
|
|
|
|
+ },
|
|
|
|
+ //查看定位开关状态 是否开启
|
|
|
|
+ checkLocationPermission: function () {
|
|
|
|
+ return JyObj.IosCall("checkLocationPermission")
|
|
|
|
+ },
|
|
|
|
+ //ios附件下载
|
|
|
|
+ //filename 文件名称不带后缀 【文件名称中不能带“/”否则会解析为多个目录】
|
|
|
|
+ //filetype 文件类型:doc word excel 等等
|
|
|
|
+ //fileurl 文件链接
|
|
|
|
+ //filesize 文件大小 字符串
|
|
|
|
+ //doc 、docx、excel 、xls 、 xlsxppt 、 pptx、 pdf、 txt、png 、PNG、jpg 、JPG 暂定这些为常见类型~支持在线预览+下载+转存
|
|
|
|
+ //其他类型仅支持下载+转存
|
|
|
|
+ downLoadFile: function (filename,filetype,fileurl,filesize) {
|
|
|
|
+ if ( filename != "" ) {
|
|
|
|
+ filename = filename.replace(/\//g,"")
|
|
|
|
+ }
|
|
|
|
+ JyObjMessage["filename"] = filename;
|
|
|
|
+ JyObjMessage["filetype"] = filetype;
|
|
|
|
+ JyObjMessage["fileurl"] = fileurl;
|
|
|
|
+ JyObjMessage["filesize"] = filesize;
|
|
|
|
+ window.webkit.messageHandlers.downLoadFile.postMessage(JyObjMessage);
|
|
|
|
+ JyObj.clearMessage();
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ fixIOSInputBugs()
|
|
|
|
+ }
|
|
|
|
+ if (isIphoneX()) {
|
|
|
|
+ // $(".app-layout-header").css("padding-top"," 40px");//标题
|
|
|
|
+ $(".app-back.jyapp-icon.jyapp-icon-zuojiantou").css("padding-top", " 40px");//返回
|
|
|
|
+ $(".header-share").css("padding-top", " 40px");//分享
|
|
|
|
+ // $(".app-layout-content-a, .app-layout-content-b").css("top","64px");//正文
|
|
|
|
+ $(".feedback-nav").css("top", "85px");//意见反馈
|
|
|
|
+ $(".setpage .noticehead").css("top", "85px");//关注项目
|
|
|
|
+ $(".app-back.jyapp-icon.jyapp-icon-zuojiantou").addClass("jyapp-icon-zuojiantou-x");//登录
|
|
|
|
+ $("#header.reg").css("padding-top", "50px");//注册
|
|
|
|
+ $("#header.reg").css("height", "4.92rem");//注册
|
|
|
|
+ // $("#header.header-login").css("height", "4.92rem");//注册
|
|
|
|
+ try {
|
|
|
|
+ iphoneXInit();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //自定义tap
|
|
|
|
+ $(document).on("touchstart", function (e) {
|
|
|
|
+ var $target = $(e.target);
|
|
|
|
+ $target.data("isMoved", 0);
|
|
|
|
+ $target.data("startTime", Date.now());
|
|
|
|
+ });
|
|
|
|
+ $(document).on("touchmove", function (e) {
|
|
|
|
+ var $target = $(e.target);
|
|
|
|
+ $target.data("isMoved", 1);
|
|
|
|
+ });
|
|
|
|
+ $(document).on("touchend", function (e) {
|
|
|
|
+ var $target = $(e.target);
|
|
|
|
+ var startTime = $target.data("startTime");
|
|
|
|
+ if (Date.now() - startTime > 200) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if ($target.data("isMoved") == 1) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ $target.trigger("tap", e);
|
|
|
|
+ });
|
|
|
|
+ $(".app-layout-header .app-back").unbind("click").on("click", function () {
|
|
|
|
+ if (typeof (clickBack) == "function") {
|
|
|
|
+ clickBack();
|
|
|
|
+ } else {
|
|
|
|
+ try {
|
|
|
|
+ afterClickBack();
|
|
|
|
+ } catch (e) { }
|
|
|
|
+ //可以自定义返回url,不过是跳转的方式
|
|
|
|
+ if (typeof (backUrl) != "undefined" && backUrl != null) {
|
|
|
|
+ if (typeof (backUrl) == "string") {
|
|
|
|
+ window.location.href = backUrl;
|
|
|
|
+ } else if (typeof (backUrl) == "number") {
|
|
|
|
+ try {
|
|
|
|
+ if (!mySysIsIos() && JyObj.getVersion() >= "2.9.9") {
|
|
|
|
+ JyObj.backUrl("")
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {}
|
|
|
|
+ window.history.go(backUrl);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ try {
|
|
|
|
+ if (!mySysIsIos() && JyObj.getVersion() >= "2.9.9") {
|
|
|
|
+ JyObj.backUrl("")
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {}
|
|
|
|
+ window.history.back();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ // $(".app-layout-footer li").on("tap",function(){
|
|
|
|
+ // if($(this).hasClass("active")){
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // switch(this.id){
|
|
|
|
+ // case "navbar-search":
|
|
|
|
+ // if(sessionStorage){
|
|
|
|
+ // sessionStorage.mainSearchReload = "1";
|
|
|
|
+ // }
|
|
|
|
+ // autoLogin("/jyapp/jylab/mainSearch");
|
|
|
|
+ // break;
|
|
|
|
+ // case "navbar-subscribe":
|
|
|
|
+ // autoLogin("/jyapp/wxkeyset/keyset/index");
|
|
|
|
+ // break;
|
|
|
|
+ // case "navbar-laboratory":
|
|
|
|
+ // autoLogin("/jyapp/jylab/index");
|
|
|
|
+ // break;
|
|
|
|
+ // case "navbar-me":
|
|
|
|
+ // autoLogin("/jyapp/free/me");
|
|
|
|
+ // break;
|
|
|
|
+ // }
|
|
|
|
+ // });
|
|
|
|
+ // if(!mySysIsIos()){
|
|
|
|
+ try {
|
|
|
|
+ if (location.href.indexOf('/follow/set/list') == -1) {
|
|
|
|
+ afterPageInit();
|
|
|
|
+ }
|
|
|
|
+ //发送渠道统计
|
|
|
|
+ sendChannelSign();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ // }
|
|
|
|
+ window.checkTabTimerId = setInterval(function () {
|
|
|
|
+ if (localStorage.chooseTab != undefined) {
|
|
|
|
+ try {
|
|
|
|
+ JyObj.hiddenBottom("1");
|
|
|
|
+ JyObj.chooseTab(parseInt(localStorage.chooseTab));
|
|
|
|
+ localStorage.removeItem("chooseTab");
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (localStorage.reloadTab == "1" && window.location.pathname == "/jyapp/swordfish/historypush") {
|
|
|
|
+ localStorage.removeItem("reloadTab");
|
|
|
|
+ window.location.reload();
|
|
|
|
+ }
|
|
|
|
+ }, 1000);
|
|
|
|
+ //
|
|
|
|
+ externalLinks();
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function externalLinks() {
|
|
|
|
+ //是否有外部链接需要访问(一般是广告位登录后跳转外部链接)
|
|
|
|
+ var externalLinks = localStorage.getItem("noLoginExternalLinks");
|
|
|
|
+ if(externalLinks!=""&&externalLinks!=undefined&&externalLinks!="null"){
|
|
|
|
+ if (window.location.pathname.indexOf("jylab/mainSearch")>0){
|
|
|
|
+ setTimeout(function () {
|
|
|
|
+ localStorage.removeItem('noLoginExternalLinks');
|
|
|
|
+ window.location.href=externalLinks;
|
|
|
|
+ //JyObj.openExternalLink(externalLinks,"剑鱼");
|
|
|
|
+ }, 1000);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+var EasyAlert = {
|
|
|
|
+ timeout: null,
|
|
|
|
+ waitTime: 1000,
|
|
|
|
+ show: function (text, css, waitTime) {
|
|
|
|
+ if (this.timeout != null) {
|
|
|
|
+ clearTimeout(this.timeout);
|
|
|
|
+ this.hide();
|
|
|
|
+ this.timeout = null;
|
|
|
|
+ }
|
|
|
|
+ var thisClass = this;
|
|
|
|
+ this.timeout = setTimeout(function () {
|
|
|
|
+ thisClass.hide();
|
|
|
|
+ thisClass.timeout = null;
|
|
|
|
+ }, waitTime ? waitTime : this.waitTime);
|
|
|
|
+ $("body").append('<div class="easyalert" id="easyAlert">' + text + '</div>');
|
|
|
|
+ if (typeof (css) != "undefined") {
|
|
|
|
+ $("#easyAlert").css(css);
|
|
|
|
+ }
|
|
|
|
+ $("#easyAlert").css({
|
|
|
|
+ "left": "50%",
|
|
|
|
+ "margin-top": -($("#easyAlert").outerHeight() / 2),
|
|
|
|
+ "margin-left": -($("#easyAlert").outerWidth() / 2)
|
|
|
|
+ }).show();
|
|
|
|
+ },
|
|
|
|
+ hide: function () {
|
|
|
|
+ $("#easyAlert").remove();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+var EasyPopup = function (id) {
|
|
|
|
+ this.id = id;
|
|
|
|
+ var thisClass = this;
|
|
|
|
+ document.getElementById(id).onclick = function (e) {
|
|
|
|
+ if (e.target.id == id) {
|
|
|
|
+ thisClass.hide();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ this.show = function () {
|
|
|
|
+ $("#" + this.id).fadeIn();
|
|
|
|
+ var mainObj = $("#" + id + ">div:first");
|
|
|
|
+ mainObj.css({ "margin-top": -(mainObj.outerHeight() / 2) });
|
|
|
|
+ },
|
|
|
|
+ this.hide = function () {
|
|
|
|
+ $("#" + this.id).fadeOut();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+var Verification = {
|
|
|
|
+ //手机号验证
|
|
|
|
+ isPhone: function (value) {
|
|
|
|
+ return /^[1][3-9][0-9]{9}$/.test(value);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//深信服用户开了一批特殊规则的手机号
|
|
|
|
+var CreatePhone = {
|
|
|
|
+ //自己创建的手机号验证[格式为100xxxxxxxx]
|
|
|
|
+ isPhone: function (value) {
|
|
|
|
+ return /^[1][0][0][0-9]{8}$/.test(value);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+// 部分页面没有全局工具函数
|
|
|
|
+if (typeof utils !== 'object') {
|
|
|
|
+ utils = {}
|
|
|
|
+}
|
|
|
|
+Date.prototype.pattern = function (fmt) {
|
|
|
|
+ if (!fmt) return ''
|
|
|
|
+ var o = {
|
|
|
|
+ 'y+': this.getFullYear(),
|
|
|
|
+ 'M+': this.getMonth() + 1, // 月份
|
|
|
|
+ 'd+': this.getDate(), // 日
|
|
|
|
+ // 12小时制
|
|
|
|
+ 'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
|
|
|
|
+ // 24小时制
|
|
|
|
+ 'H+': this.getHours(), // 小时
|
|
|
|
+ 'm+': this.getMinutes(), // 分
|
|
|
|
+ 's+': this.getSeconds(), // 秒
|
|
|
|
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
|
|
|
|
+ 'S': this.getMilliseconds(), // 毫秒
|
|
|
|
+ 'E+': this.getDay(), // 周
|
|
|
|
+ };
|
|
|
|
+ var week = {
|
|
|
|
+ '0': '日',
|
|
|
|
+ '1': '一',
|
|
|
|
+ '2': '二',
|
|
|
|
+ '3': '三',
|
|
|
|
+ '4': '四',
|
|
|
|
+ '5': '五',
|
|
|
|
+ '6': '六'
|
|
|
|
+ };
|
|
|
|
+ if (/(y+)/.test(fmt)) {
|
|
|
|
+ fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
|
|
|
|
+ }
|
|
|
|
+ if (/(E+)/.test(fmt)) {
|
|
|
|
+ fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
|
|
|
|
+ this.getDay() + '']);
|
|
|
|
+ }
|
|
|
|
+ for (var k in o) {
|
|
|
|
+ if (new RegExp('(' + k + ')').test(fmt)) {
|
|
|
|
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
|
|
|
|
+ .length)));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return fmt;
|
|
|
|
+}
|
|
|
|
+utils.dateFromNow = function (originTime, useOld) {
|
|
|
|
+ if (!originTime) return
|
|
|
|
+ // 原始时间 - 传入的时间戳
|
|
|
|
+ var originTimeStamp = +new Date(originTime)
|
|
|
|
+ // 当前时间戳
|
|
|
|
+ var nowTimeStamp = +new Date()
|
|
|
|
+ // 时间戳相差多少
|
|
|
|
+ var diffTimeStamp = nowTimeStamp - originTimeStamp
|
|
|
|
+
|
|
|
|
+ var postfix = diffTimeStamp > 0 ? '前' : '后'
|
|
|
|
+ // 求绝对值 ms(毫秒)
|
|
|
|
+ var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
|
|
|
|
+ var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
|
|
|
|
+
|
|
|
|
+ // 10天的秒数
|
|
|
|
+ var days11 = 11 * 24 * 60 * 60
|
|
|
|
+ // var dataMap = {
|
|
|
|
+ // zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
|
|
|
|
+ // number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
|
|
|
|
+ // }
|
|
|
|
+ var dataMap = {
|
|
|
|
+ zh: ['天', '小时', '分钟', '秒'],
|
|
|
|
+ number: [24 * 60 * 60, 60 * 60, 60, 1]
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var timeString = ''
|
|
|
|
+ // 10天前
|
|
|
|
+ var tenDaysAgo = diffTimeStampAbsS > days11
|
|
|
|
+ // 是否是当天
|
|
|
|
+ var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
|
|
|
|
+
|
|
|
|
+ var condition = !isCurrentDay
|
|
|
|
+ if (useOld) {
|
|
|
|
+ condition = tenDaysAgo
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (condition) {
|
|
|
|
+ // 不是当天,则使用正常日期显示
|
|
|
|
+ var originDate = new Date(originTimeStamp)
|
|
|
|
+ var nowDate = new Date()
|
|
|
|
+ // 是否同年
|
|
|
|
+ var sameYear = originDate.getFullYear() === nowDate.getFullYear()
|
|
|
|
+ // 如果是当年,则不显示年
|
|
|
|
+ var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
|
|
|
|
+ timeString = originDate.pattern(patternString)
|
|
|
|
+ } else {
|
|
|
|
+ for (var i = 0; i < dataMap.number.length; i++) {
|
|
|
|
+ var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
|
|
|
|
+ if (inm != 0) {
|
|
|
|
+ timeString = inm + dataMap.zh[i] + postfix
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return timeString
|
|
|
|
+}
|
|
|
|
+//计算时差
|
|
|
|
+function timeDiff (date) {
|
|
|
|
+ var date1 = date;//开始时间
|
|
|
|
+ var date2 = new Date();//结束时间
|
|
|
|
+ var date3 = date2.getTime() - date1.getTime();//时间差的毫秒数
|
|
|
|
+ //计算出相差天数
|
|
|
|
+ var days = Math.floor(date3 / (24 * 3600 * 1000));
|
|
|
|
+ //计算出小时数
|
|
|
|
+ var leave1 = date3 % (24 * 3600 * 1000);//计算天数后剩余的毫秒数
|
|
|
|
+ var hours = Math.floor(leave1 / (3600 * 1000));
|
|
|
|
+ //计算相差分钟数
|
|
|
|
+ var leave2 = leave1 % (3600 * 1000);//计算小时数后剩余的毫秒数
|
|
|
|
+ var minutes = Math.floor(leave2 / (60 * 1000));
|
|
|
|
+ //计算相差秒数
|
|
|
|
+ var td = "30秒前";
|
|
|
|
+ if (days > 0) {
|
|
|
|
+ if (days > 10) {
|
|
|
|
+ var date1year = date1.getFullYear();
|
|
|
|
+ var date2year = date2.getFullYear();
|
|
|
|
+ var date1month = date1.getMonth() + 1;
|
|
|
|
+ var date1day = date1.getDate();
|
|
|
|
+ if (date1month < 10) {
|
|
|
|
+ date1month = "0" + date1month;
|
|
|
|
+ }
|
|
|
|
+ if (date1day < 10) {
|
|
|
|
+ date1day = "0" + date1day;
|
|
|
|
+ }
|
|
|
|
+ if (date1year < date2year) {
|
|
|
|
+ td = date1.getFullYear() + "-" + date1month + "-" + date1day;
|
|
|
|
+ } else {
|
|
|
|
+ td = date1month + "-" + date1day;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ td = days + "天前"
|
|
|
|
+ }
|
|
|
|
+ } else if (hours > 0) {
|
|
|
|
+ td = hours + "小时前";
|
|
|
|
+ } else if (minutes > 0) {
|
|
|
|
+ td = minutes + "分钟前";
|
|
|
|
+ }
|
|
|
|
+ return td;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function newredirect (zbadd, link, sid, sds, index) {
|
|
|
|
+ if (link != null && typeof (link) != "undefined") {
|
|
|
|
+ link = link.replace(/\n/g, "");
|
|
|
|
+ if (!/^http/.test(link)) {
|
|
|
|
+ link = "http://" + link
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var pt = ""
|
|
|
|
+ if (index == 1) {
|
|
|
|
+ pt = "projectMatch=项目匹配"
|
|
|
|
+ }
|
|
|
|
+ if (sds) {
|
|
|
|
+ window.location.href = "/jyapp/article/content/" + sid + ".html?keywords=" + encodeURIComponent(sds) + pt;
|
|
|
|
+ } else {
|
|
|
|
+ window.location.href = "/jyapp/article/content/" + sid + ".html?" + pt;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function pcredirect (link, sid) {
|
|
|
|
+ window.open("/pcdetail/" + sid + ".html");
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var isNumber = /^[0-9]+$/
|
|
|
|
+var isLetter = /^[a-zA-Z]+$/
|
|
|
|
+function isRegExp (value) {
|
|
|
|
+ return Object.prototype.toString.call(value) === '[object RegExp]'
|
|
|
|
+}
|
|
|
|
+function keyWordHighlight (value, oldChars, newChar) {
|
|
|
|
+ if(typeof(oldChars) == "undefined" || oldChars == null || typeof(newChar) == "undefined" || newChar == null || newChar == ""){
|
|
|
|
+ return value;
|
|
|
|
+ }
|
|
|
|
+ var array = [];
|
|
|
|
+ if(oldChars instanceof Array){
|
|
|
|
+ array = oldChars.concat();
|
|
|
|
+ }else{
|
|
|
|
+ array.push(oldChars);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 非字符串替换集合
|
|
|
|
+ var notStrReplacer = []
|
|
|
|
+ for (var i = 0; i < array.length; i++) {
|
|
|
|
+ if (!array[i]) {
|
|
|
|
+ continue
|
|
|
|
+ } else {
|
|
|
|
+ if (isRegExp(array[i])) {
|
|
|
|
+ // 正则直接替换
|
|
|
|
+ // 注意:该正则中必须包含至少一个分组匹配,分组中的内容用来替换
|
|
|
|
+ notStrReplacer.push(array[i])
|
|
|
|
+ array[i] = ''
|
|
|
|
+ } else {
|
|
|
|
+ // 字符串替换
|
|
|
|
+ array[i] = array[i].replace(/([\$\(\)\*\+\.\[\]\?\/\\\^\{\}\|])/g, '\\$1').replace(/\s+/g, '')
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // array[i] = array[i].replace(/\$/g,"\\$");
|
|
|
|
+ // array[i] = array[i].replace(/\(/g,"\\(");
|
|
|
|
+ // array[i] = array[i].replace(/\)/g,"\\)");
|
|
|
|
+ // array[i] = array[i].replace(/\*/g,"\\*");
|
|
|
|
+ // array[i] = array[i].replace(/\+/g,"\\+");
|
|
|
|
+ // array[i] = array[i].replace(/\./g,"\\.");
|
|
|
|
+ // array[i] = array[i].replace(/\[/g,"\\[");
|
|
|
|
+ // array[i] = array[i].replace(/\]/g,"\\]");
|
|
|
|
+ // array[i] = array[i].replace(/\?/g,"\\?");
|
|
|
|
+ // array[i] = array[i].replace(/\\/g,"\\");
|
|
|
|
+ // array[i] = array[i].replace(/\//g,"\\/");
|
|
|
|
+ // array[i] = array[i].replace(/\^/g,"\\^");
|
|
|
|
+ // array[i] = array[i].replace(/\{/g,"\\{");
|
|
|
|
+ // array[i] = array[i].replace(/\}/g,"\\}");
|
|
|
|
+ // array[i] = array[i].replace(/\|/g,"\\|");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 数组去空
|
|
|
|
+ var lastArr = []
|
|
|
|
+ array.forEach(function (item) {
|
|
|
|
+ if (item) {
|
|
|
|
+ lastArr.push(item)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ if (lastArr.length === 0 && notStrReplacer.length === 0) {
|
|
|
|
+ return value
|
|
|
|
+ }
|
|
|
|
+ lastArr = lastArr.sort(function (a, b) {
|
|
|
|
+ return b.length - a.length
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ if (notStrReplacer.length) {
|
|
|
|
+ for (var j = 0; j < notStrReplacer.length; j++) {
|
|
|
|
+ // 正则替换
|
|
|
|
+ value = value.replace(notStrReplacer[j], newChar)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (lastArr.length) {
|
|
|
|
+ value = value.replace(new RegExp('(' + lastArr.join('|') + ')', 'gmi'), newChar)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return value
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getWxVersion () {
|
|
|
|
+ var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
|
|
|
|
+ if (!wechatInfo) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ return wechatInfo[1];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 设置光标在短连接输入框中的位置
|
|
|
|
+ * @param inpObj 输入框
|
|
|
|
+ * @param pos
|
|
|
|
+ */
|
|
|
|
+function setCursorPos (inpObj, pos) {
|
|
|
|
+ if (navigator.userAgent.indexOf("MSIE") > -1) {
|
|
|
|
+ var range = document.selection.createRange();
|
|
|
|
+ var textRange = inpObj.createTextRange();
|
|
|
|
+ textRange.moveStart('character', pos);
|
|
|
|
+ textRange.collapse();
|
|
|
|
+ textRange.select();
|
|
|
|
+ } else {
|
|
|
|
+ inpObj.setSelectionRange(pos, pos);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 获取光标在短连接输入框中的位置
|
|
|
|
+ * @param inpObj 输入框
|
|
|
|
+ */
|
|
|
|
+function getCursorPos (inpObj) {
|
|
|
|
+ if (navigator.userAgent.indexOf("MSIE") > -1) { // IE
|
|
|
|
+ var range = document.selection.createRange();
|
|
|
|
+ range.text = '';
|
|
|
|
+ range.setEndPoint('StartToStart', inpObj.createTextRange());
|
|
|
|
+ return range.text.length;
|
|
|
|
+ } else {
|
|
|
|
+ return inpObj.selectionStart;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取url中参数
|
|
|
|
+function getUrlParam (name, type) {
|
|
|
|
+ var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
|
|
|
+ var r = window.location.search.substr(1).match(reg);
|
|
|
|
+ if (r != null)
|
|
|
|
+ if (typeof (type) == "function") {
|
|
|
|
+ return type(r[2]);
|
|
|
|
+ } else {
|
|
|
|
+ return unescape(r[2]);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//自动登录
|
|
|
|
+function autoLogin (url, callBack) {
|
|
|
|
+ var sign = "";
|
|
|
|
+ try {
|
|
|
|
+ sign = JyObj.getUserToken();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ if (sign == "" || sign == null || typeof (sign) == "undefined") {
|
|
|
|
+ if (callBack != null && typeof (callBack) != "undefined") {
|
|
|
|
+ callBack(null);
|
|
|
|
+ } else if (url != null && typeof (url) != "undefined") {
|
|
|
|
+ if (url === 'back') {
|
|
|
|
+ window.location.href = "/jyapp/free/login?to=back";
|
|
|
|
+ } else {
|
|
|
|
+ window.location.href = "/jyapp/free/login?url=" + encodeURIComponent(url);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (url != null && typeof (url) != "undefined") {
|
|
|
|
+ if (url === 'back') {
|
|
|
|
+ window.location.href = "/jyapp/free/login?sign=" + sign + "&to=back"
|
|
|
|
+ } else {
|
|
|
|
+ window.location.href = "/jyapp/free/login?sign=" + sign + "&url=" + encodeURIComponent(url);
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ $.ajax({
|
|
|
|
+ url: "/jyapp/free/login?t=" + new Date().getTime(),
|
|
|
|
+ type: "post",
|
|
|
|
+ data: { reqType: "signLogin", sign: sign },
|
|
|
|
+ dataType: "json",
|
|
|
|
+ success: function (r) {
|
|
|
|
+ //有回调函数不跳转
|
|
|
|
+ if (callBack != null && typeof (callBack) != "undefined") {
|
|
|
|
+ callBack(r.userInfo);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ //alert("服务器连接超时!");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// ios or android
|
|
|
|
+function msgAndroidOrIOS () {
|
|
|
|
+ var u = navigator.userAgent.toLowerCase()
|
|
|
|
+ var agent = null;
|
|
|
|
+ if (/iphone|ipod|ipad|ios/.test(u)) {
|
|
|
|
+ agent = 'ios'
|
|
|
|
+ } else if (/(Android)/i.test(u)) {
|
|
|
|
+ agent = 'android'
|
|
|
|
+ }
|
|
|
|
+ return agent
|
|
|
|
+}
|
|
|
|
+// 私信未读数量
|
|
|
|
+function kfData(acync, num) {
|
|
|
|
+ $.ajax({
|
|
|
|
+ type: 'POST',
|
|
|
|
+ url: '/jyapi/message/messageCount',
|
|
|
|
+ async: acync || false,
|
|
|
|
+ data: JSON.stringify({userType: 2}),
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ success: function (res) {
|
|
|
|
+ localStorage.setItem('isMsgNum', num + res.count)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 检查当前是否是 tabbar 页面
|
|
|
|
+ * @returns {boolean}
|
|
|
|
+ */
|
|
|
|
+function checkNowInTabbarPage () {
|
|
|
|
+ var tabbarPages = [
|
|
|
|
+ '/jyapp/jylab/mainSearch',
|
|
|
|
+ '/jyapp/swordfish/historypush',
|
|
|
|
+ '/jyapp/frontPage/messageCenter/sess/index',
|
|
|
|
+ '/jyapp/jylab/index',
|
|
|
|
+ '/jyapp/free/me'
|
|
|
|
+ ]
|
|
|
|
+ return tabbarPages.some(function (v) {
|
|
|
|
+ return location.href.indexOf(v) > -1
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 底部导航消息总数
|
|
|
|
+function checkMsgCount(acync, str, callback) {
|
|
|
|
+ $.ajax({
|
|
|
|
+ type: 'GET',
|
|
|
|
+ url: '/jymessageCenter/getCount?t=' + Date.now(),
|
|
|
|
+ async: acync || false,
|
|
|
|
+ success: function (r) {
|
|
|
|
+ var num = 0
|
|
|
|
+ if (r.error_code === 0) {
|
|
|
|
+ num = r.data.count
|
|
|
|
+ try {
|
|
|
|
+ JyObj.sendMsgCount(num)
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (str == 1) {
|
|
|
|
+ var isMsg = localStorage.getItem('isMsgNum')
|
|
|
|
+ if (num !== Number(isMsg)) {
|
|
|
|
+ kfData(acync, num)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ kfData(acync, num)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ callback && callback()
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function keepQuest() {
|
|
|
|
+ var appType = msgAndroidOrIOS(), timer = null
|
|
|
|
+ if (appType == 'ios' || appType == 'android') {
|
|
|
|
+ clearInterval(timer)
|
|
|
|
+ timer = setInterval(() => {
|
|
|
|
+ checkMsgCount(true, 1)
|
|
|
|
+ }, 300000)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 检查是否需要前往新用户兴趣设置
|
|
|
|
+ * @returns {boolean}
|
|
|
|
+ */
|
|
|
|
+function checkNeedGoNewUserSettingPage () {
|
|
|
|
+ // 同步请求判断是否新用户,需要跳转兴趣设置页面
|
|
|
|
+ var goPage
|
|
|
|
+ $.ajax({
|
|
|
|
+ type: 'post',
|
|
|
|
+ async: false,
|
|
|
|
+ url: '/salesLeads/appIsNewUerSales',
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if (res && res.data) {
|
|
|
|
+ goPage = '/jy_mobile/uersales/newuser'
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ if (goPage) {
|
|
|
|
+ locationReplace(goPage)
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 检查是否需要绑定手机号
|
|
|
|
+ * @returns {*}
|
|
|
|
+ */
|
|
|
|
+function checkNeedGoBindPhonePage () {
|
|
|
|
+ var userPhone
|
|
|
|
+ $.ajax({
|
|
|
|
+ url: "/jypay/user/getAccountInfo?t=" + Date.now(),
|
|
|
|
+ type: "GET",
|
|
|
|
+ async: false,
|
|
|
|
+ success: function(res){
|
|
|
|
+ if(res.error_code == 0 && res.data){
|
|
|
|
+ userPhone = res.data.phone;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ if (!userPhone) {
|
|
|
|
+ locationReplace('/jyapp/account/phone/bind?mode=mergeBind')
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function loginSuccess (result, loginType) {
|
|
|
|
+ // 清除缓存
|
|
|
|
+ clearObjKeyForRegFn(sessionStorage, /-login-clear/)
|
|
|
|
+ clearObjKeyForRegFn(localStorage, /-login-clear/)
|
|
|
|
+
|
|
|
|
+ // 清除订阅页面缓存
|
|
|
|
+ sessionStorage.removeItem('$data-historypush')
|
|
|
|
+ JyObj.refreshAppointTab('subscribe', 1)
|
|
|
|
+
|
|
|
|
+ JyObj.saveUserToken(result.sign);
|
|
|
|
+ // 数据包默认选中企业需请求默认企业接口
|
|
|
|
+ try {
|
|
|
|
+ window.onlyUserID =JyObj.getUserToken()
|
|
|
|
+ if (window.onlyUserID) {
|
|
|
|
+ function getCookieValue(name) {
|
|
|
|
+ var result = document.cookie.match("(^|[^;]+)\\s*" + name + "\\s*=\\s*([^;]+)")
|
|
|
|
+ return result ? result.pop() : ""
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ window.onlyUserID = getCookieValue('SESSIONID')
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 消息总数方法
|
|
|
|
+ checkMsgCount(true, 0);
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log('获取ID失败')
|
|
|
|
+ }
|
|
|
|
+ if (JSON.stringify(window.onlyUserID) != localStorage.getItem('MobileWebAppForOnlyID')) {
|
|
|
|
+ localStorage.setItem('MobileWebAppForOnlyID', JSON.stringify(window.onlyUserID))
|
|
|
|
+ $.ajax({
|
|
|
|
+ type: 'get',
|
|
|
|
+ url: '/entbase/ent/mySelectent?t=' + new Date().getTime()
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ // 当前为新用户(即注册)--跳转设置密码页
|
|
|
|
+ if(result.userInfo && result.userInfo.isNewUser) {
|
|
|
|
+ var href ="/jyapp/free/setPwd";
|
|
|
|
+ window.location.href = href;
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (loginType === 'is-wx') {
|
|
|
|
+ // 检查是否绑定手机号
|
|
|
|
+ var isGoBindPhone = checkNeedGoBindPhonePage()
|
|
|
|
+ if (isGoBindPhone) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 检查是否需要前往新用户兴趣设置
|
|
|
|
+ var isStopNext = checkNeedGoNewUserSettingPage()
|
|
|
|
+ if (isStopNext) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //分销跳转
|
|
|
|
+ if (getUrlParam("DisUrl") != null) {
|
|
|
|
+ afterLoginSuccess("", true);
|
|
|
|
+ locationReplace(getUrlParam("DisUrl"));
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ //
|
|
|
|
+ if (getUrlParam("to") === "back") {
|
|
|
|
+ // sessionStorage.reloadHomePage=true;
|
|
|
|
+ if (sessionStorage && getUrlParam("back") !== "index") {
|
|
|
|
+ afterLoginSuccess("", true);
|
|
|
|
+ window.history.back();
|
|
|
|
+ } else {
|
|
|
|
+ afterLoginSuccess("S", false);//提示app定位搜索菜单
|
|
|
|
+ //window.location.href = "/jyapp/jylab/mainSearch";
|
|
|
|
+ location.replace("/jyapp/jylab/mainSearch");
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+ } else {
|
|
|
|
+ window.history.back()
|
|
|
|
+ }
|
|
|
|
+ //
|
|
|
|
+ var callBackUrl = getUrlParam("url", decodeURIComponent);
|
|
|
|
+ if (callBackUrl != null) {
|
|
|
|
+ afterLoginSuccess("", true);
|
|
|
|
+ //window.location.href = callBackUrl;
|
|
|
|
+ locationReplace(callBackUrl);
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ //
|
|
|
|
+ callBackUrl = getUrlParam("out", decodeURIComponent);
|
|
|
|
+ if (callBackUrl != null) {
|
|
|
|
+ afterLoginSuccess("", true);
|
|
|
|
+ localStorage.setItem("noLoginExternalLinks", callBackUrl);
|
|
|
|
+ window.history.back();
|
|
|
|
+ //访问外部链接
|
|
|
|
+ //JyObj.openExternalLink(callBackUrl);
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ //
|
|
|
|
+ if (sessionStorage) {
|
|
|
|
+ sessionStorage.mainSearchReload = "1";
|
|
|
|
+ }
|
|
|
|
+ afterLoginSuccess("S", false);
|
|
|
|
+ //window.location.href = "/jyapp/jylab/mainSearch";
|
|
|
|
+ //location.replace("/jyapp/jylab/mainSearch");
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//2020-05-30 android replace失效
|
|
|
|
+function locationReplace (url) {
|
|
|
|
+ if (history.replaceState) {
|
|
|
|
+ history.replaceState(null, document.title, url);
|
|
|
|
+ history.go(0);
|
|
|
|
+ } else {
|
|
|
|
+ location.replace(url);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function afterLoginSuccess (type, canBack) {
|
|
|
|
+ if (!canBack) {
|
|
|
|
+ prohibitBack();
|
|
|
|
+ localStorage.reLogin = "1";
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ JyObj.refreshAppointTab('me', 1)
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ }
|
|
|
|
+ JyObj.loginSuccess(type);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//ios JyObj对象加载完成回调
|
|
|
|
+function afterPageInit () {
|
|
|
|
+ setInterval(function () {
|
|
|
|
+ redSpotOnMenu();
|
|
|
|
+ }, 600000);
|
|
|
|
+ try {
|
|
|
|
+ afterJyObjInit();
|
|
|
|
+ latlongitude();//记录用户经纬度
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ $.post("/jyapp/free/afterPageLoadToCheck?t=" + new Date().getTime(), {
|
|
|
|
+ sign: JyObj.getUserToken(),
|
|
|
|
+ rid: JyObj.getPushRid(),
|
|
|
|
+ oid: getOtherPushId(),
|
|
|
|
+ phoneType: getPhoneType(),
|
|
|
|
+ version: JyObj.getVersion(),
|
|
|
|
+ isIos: mySysIsIos()
|
|
|
|
+ }, function (r) {
|
|
|
|
+ if (mySysIsIos() && r.isNeedUpdate > 0) {
|
|
|
|
+ //if(r.webdomain.indexOf("https")>-1){
|
|
|
|
+ //ios客户端 因为证书问题加载https域名 需要验证证书等一系列操作
|
|
|
|
+ // r.webdomain = r.webdomain.replace("https","http")
|
|
|
|
+ //}
|
|
|
|
+ //以后版本
|
|
|
|
+ if (r.isNeedUpdate == 2) {
|
|
|
|
+ //JyObj.openExternalLink(r.webdomain + "/jyapp/free/staticPage/update.html", "-1");
|
|
|
|
+ JyObj.openExternalLink(window.location.protocol+"//"+window.location.host+"/jyapp/free/goToUpdate?mustupdate=1", "-1");
|
|
|
|
+ }else if(localStorage.onceTipUpdate != "1"){
|
|
|
|
+ sessionStorage.onceTipUpdate = "1";
|
|
|
|
+ localStorage.onceTipUpdate = "1";
|
|
|
|
+ //JyObj.openExternalLink(r.webdomain + "/jyapp/free/staticPage/update.html", "去更新");
|
|
|
|
+ JyObj.openExternalLink(window.location.protocol+"//"+window.location.host+"/jyapp/free/goToUpdate?mustupdate=1", "去更新");
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (r.status == -3) {
|
|
|
|
+ if (mySysIsIos()) {
|
|
|
|
+ window.location.href = "/jyapp/free/login?flag=kicked&back=index";
|
|
|
|
+ } else {
|
|
|
|
+ localStorage.setItem("isKicked", "1");
|
|
|
|
+ JyObj.backUrl("H");
|
|
|
|
+ }
|
|
|
|
+ } else if (r.status == 1) {
|
|
|
|
+ if (r.sign != "") {
|
|
|
|
+ JyObj.saveUserToken(r.sign);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ //记录推送id
|
|
|
|
+ savePushIdMsg();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function compareVersion (curVersion, upVersion) {
|
|
|
|
+ v1 = curVersion.split(".");
|
|
|
|
+ v2 = upVersion.split(".");
|
|
|
|
+ var maxlen = v1.length > v2.length ? v1.length : v2.length;
|
|
|
|
+ for (var i = 0; i < maxlen; i++) {
|
|
|
|
+ if (v1[i] == v2[i]) {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if (v1[i] == undefined) {
|
|
|
|
+ v1[i] = -1;
|
|
|
|
+ }
|
|
|
|
+ if (v2[i] == undefined) {
|
|
|
|
+ v2[i] = -1;
|
|
|
|
+ }
|
|
|
|
+ if (parseInt(v1[i]) < parseInt(v2[i])) {
|
|
|
|
+ return true;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function redSpotOnMenu () {
|
|
|
|
+ var doAjax = true;
|
|
|
|
+ if (localStorage.redSpotLastAjaxTime &&
|
|
|
|
+ new Date().getTime() - parseInt(localStorage.redSpotLastAjaxTime) < 1000 * 60) {
|
|
|
|
+ doAjax = false;
|
|
|
|
+ }
|
|
|
|
+ if (!doAjax && localStorage.redSpotRes) {
|
|
|
|
+ try {
|
|
|
|
+ var lastAjaxRes = JSON.parse(localStorage.redSpotRes)
|
|
|
|
+ redSpotBackFuc(lastAjaxRes, "false")
|
|
|
|
+ return
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log("redSpotOnMenu", e)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $.post("/jyapp/free/showRedSpotOnMenu?t=" + new Date().getTime(), null, redSpotBackFuc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function redSpotBackFuc (r, flag) {
|
|
|
|
+ var noticeCount = r.notice;
|
|
|
|
+ //JyObj.getUnReadMessageCount("");
|
|
|
|
+ // #fix 修复三级页同步请求导致页面白屏时间过长
|
|
|
|
+ checkMsgCount(true, 0)
|
|
|
|
+ // message红点
|
|
|
|
+ if (noticeCount > 0) {
|
|
|
|
+ $(".trigger-div-notice .dot-red").show()
|
|
|
|
+ } else {
|
|
|
|
+ $(".trigger-div-notice .dot-red").hide()
|
|
|
|
+ }
|
|
|
|
+ // 项目关注红点
|
|
|
|
+ if (r.follow_project > 0) {
|
|
|
|
+ $(".project-follow .dot-red").show()
|
|
|
|
+ } else {
|
|
|
|
+ $(".project-follow .dot-red").hide()
|
|
|
|
+ }
|
|
|
|
+ // 企业关注红点
|
|
|
|
+ if (r.follow_ent > 0) {
|
|
|
|
+ $(".ent-follow .dot-red").show();
|
|
|
|
+ } else {
|
|
|
|
+ $(".listTwo .redspot").hide();
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ if (r.my == 0) {
|
|
|
|
+ JyObj.hideRedSpotOnMenu("my");
|
|
|
|
+ } else {
|
|
|
|
+ JyObj.showRedSpotOnMenu("my");
|
|
|
|
+ }
|
|
|
|
+ if (r.subscribe == 0) {
|
|
|
|
+ JyObj.hideRedSpotOnMenu("subscribe");
|
|
|
|
+ } else {
|
|
|
|
+ JyObj.showRedSpotOnMenu("subscribe");
|
|
|
|
+ }
|
|
|
|
+ if (r.my == 0 && r.subscribe == 0) {
|
|
|
|
+ //清空通知栏消息
|
|
|
|
+ JyObj.clearPushMessage("");
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (flag == "success") {
|
|
|
|
+ localStorage.redSpotLastAjaxTime = new Date().getTime();
|
|
|
|
+ localStorage.redSpotRes = JSON.stringify(r);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+function setLiActive (obj) {
|
|
|
|
+ $(obj).addClass("jyapp-li-active");
|
|
|
|
+ setTimeout(function () {
|
|
|
|
+ $(obj).removeClass("jyapp-li-active");
|
|
|
|
+ }, 500);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function mySysIsIos () {
|
|
|
|
+ //ios终端
|
|
|
|
+ var flag1 = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
|
|
|
|
+ var flag2 = !!navigator.userAgent.match(/\(M[^;]+; Intel Mac OS X/);
|
|
|
|
+ return flag1 || flag2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function clearObjKeyForRegFn (obj, reg) {
|
|
|
|
+ if (obj) {
|
|
|
|
+ for(var k in obj) {
|
|
|
|
+ if (reg.test(k)) {
|
|
|
|
+ obj.removeItem(k)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function clearRefreshStorage (isKicked) {
|
|
|
|
+ //清除小红点缓存
|
|
|
|
+ localStorage.removeItem("redSpotLastAjaxTime");
|
|
|
|
+ // 清除缓存
|
|
|
|
+ clearObjKeyForRegFn(sessionStorage, /-login-clear/)
|
|
|
|
+ clearObjKeyForRegFn(localStorage, /-login-clear/)
|
|
|
|
+ //清除token
|
|
|
|
+ try {
|
|
|
|
+ $.cookie('SESSIONID', '', { expires: -1, path: '/' })
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ }
|
|
|
|
+ //订阅设置页面缓存
|
|
|
|
+ sessionStorage.removeItem('$data-historypush')
|
|
|
|
+ // 退出登录清除首页商机管理权限缓存
|
|
|
|
+ sessionStorage.removeItem("setEntStatus")
|
|
|
|
+ sessionStorage.removeItem("userMergeFlag");
|
|
|
|
+ // 刷新首页
|
|
|
|
+ try {
|
|
|
|
+ JyObj.refreshAppointTab('search', 1)
|
|
|
|
+ JyObj.refreshAppointTab('subscribe', 1)
|
|
|
|
+ JyObj.hiddenBottom(0)
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ }
|
|
|
|
+ if (!isKicked) {
|
|
|
|
+ window.location.href = "/jyapp/free/login?back=index&flag=quit";
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function appQuit (isKicked) {
|
|
|
|
+ var sign = JyObj.getUserToken();
|
|
|
|
+ //隐藏小红点
|
|
|
|
+ try {
|
|
|
|
+ JyObj.removeUserToken();
|
|
|
|
+ JyObj.hideRedSpotOnMenu("my");
|
|
|
|
+ JyObj.hideRedSpotOnMenu("subscribe");
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ $.ajax({
|
|
|
|
+ url: "/jyapp/free/signOut?t=" + new Date().getTime(),
|
|
|
|
+ type: "post",
|
|
|
|
+ data: { isKicked: isKicked, sign: sign },
|
|
|
|
+ dataType: "json",
|
|
|
|
+ success: function () {
|
|
|
|
+ clearRefreshStorage(isKicked)
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ clearRefreshStorage(isKicked)
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//随机获取分享文案
|
|
|
|
+var ShareText = [
|
|
|
|
+ "我和投标伙伴都在用剑鱼标讯找项目,推荐你也试试",
|
|
|
|
+ "我用剑鱼标讯免费查到超多招标信息,推荐你也试试",
|
|
|
|
+ "我收到了剑鱼标讯免费推送的招标信息,推荐你也试试",
|
|
|
|
+ "发现了一个投标神器,推荐你也试试"
|
|
|
|
+]
|
|
|
|
+
|
|
|
|
+function getShareText () {
|
|
|
|
+ return ShareText[randomNum(0, ShareText.length - 1)];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function randomNum (Min, Max) {
|
|
|
|
+ var Range = Max - Min;
|
|
|
|
+ var Rand = Math.random();
|
|
|
|
+ var num = Min + Math.round(Rand * Range);
|
|
|
|
+ return num;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getCipherText (phone) {
|
|
|
|
+ return encodeURIComponent(JyObj.getCipherText(phone));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getChannel () {
|
|
|
|
+ var channel = ""
|
|
|
|
+ try {
|
|
|
|
+ channel = JyObj.getChannel();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ return channel
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getDeviceId () {
|
|
|
|
+ var deviceId = ""
|
|
|
|
+ try {
|
|
|
|
+ deviceId = JyObj.getIdentity();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ return deviceId
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getPhoneType () {
|
|
|
|
+ var phoneType = "";
|
|
|
|
+ try {
|
|
|
|
+ phoneType = JyObj.getPhoneBrand();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ return phoneType;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getOtherPushId () {
|
|
|
|
+ var otherPushId = "";
|
|
|
|
+ try {
|
|
|
|
+ otherPushId = JyObj.getOtherPushRid();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+ return otherPushId;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function prohibitBack () {
|
|
|
|
+ try {
|
|
|
|
+ //禁止后退
|
|
|
|
+ JyObj.prohibitBack();
|
|
|
|
+ } catch (e) {
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function sendChannelSign () {
|
|
|
|
+ var first = localStorage.getItem("channelSigned")
|
|
|
|
+ if (first == "1") {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ var sign = getChannel();
|
|
|
|
+ var id = getDeviceId();
|
|
|
|
+ if (sign == "" || id == "") {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ $.post("/jyapp/free/channelSign", { "sign": sign, "id": id }, function (data) {
|
|
|
|
+ if (data.success) {
|
|
|
|
+ localStorage.setItem("channelSigned", "1")
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ } catch (err) {
|
|
|
|
+ alert(err)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function savePushIdMsg () {
|
|
|
|
+ var sign = JyObj.getUserToken();
|
|
|
|
+ var save = sessionStorage.getItem("savePush")
|
|
|
|
+ if (!(sign == "" || sign == undefined) || save == "1") {
|
|
|
|
+ sessionStorage.setItem("savePush", "1")//每次打开只执行一次
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ sessionStorage.setItem("savePush", "1")//每次打开只执行一次
|
|
|
|
+ try {
|
|
|
|
+ var interval = setInterval(function () {
|
|
|
|
+ var id = getDeviceId();
|
|
|
|
+ var phoneType = getPhoneType();
|
|
|
|
+ var rid = JyObj.getPushRid();
|
|
|
|
+ var oid = getOtherPushId();
|
|
|
|
+ var channel = getChannel();
|
|
|
|
+ if (mySysIsIos()) {
|
|
|
|
+ phoneType = "ios";
|
|
|
|
+ channel = "ios";
|
|
|
|
+ }
|
|
|
|
+ if (rid == "" || rid == undefined) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ $.post("/jyapp/free/savePushIdMsg", {
|
|
|
|
+ "id": id,
|
|
|
|
+ "phoneType": phoneType,
|
|
|
|
+ "rid": rid,
|
|
|
|
+ "oid": oid,
|
|
|
|
+ "channel": channel
|
|
|
|
+ }, function (data) {
|
|
|
|
+ if (data.success) {
|
|
|
|
+ clearInterval(interval);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }, 1000)
|
|
|
|
+ } catch (err) {
|
|
|
|
+ alert(err)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function isIphoneX () {
|
|
|
|
+ return /iphone/gi.test(navigator.userAgent) && (screen.height >= 812)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function myDomain () {
|
|
|
|
+ return window.location.protocol + "//" + window.location.host;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/******* 获取url参数(正则)********/
|
|
|
|
+function getParam (name) {
|
|
|
|
+ var search = document.location.search;
|
|
|
|
+ // alert(search);
|
|
|
|
+ var pattern = new RegExp("[?&]" + name + "\=([^&]+)", "g");
|
|
|
|
+ var matcher = pattern.exec(search);
|
|
|
|
+ var items = null;
|
|
|
|
+ if (null != matcher) {
|
|
|
|
+ try {
|
|
|
|
+ items = decodeURIComponent(decodeURIComponent(matcher[1]));
|
|
|
|
+ } catch (e) {
|
|
|
|
+ try {
|
|
|
|
+ items = decodeURIComponent(matcher[1]);
|
|
|
|
+ } catch (e) {
|
|
|
|
+ items = matcher[1];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return items;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+//格式化时间
|
|
|
|
+function formatDate (date, hms) {
|
|
|
|
+ if (date === null || date === "" || date === 0) {
|
|
|
|
+ return "-"
|
|
|
|
+ }
|
|
|
|
+ var date = new Date(date);
|
|
|
|
+ var YY = date.getFullYear() + '-';
|
|
|
|
+ var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
|
|
|
|
+ var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
|
|
|
|
+ var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
|
|
|
|
+ var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
|
|
|
|
+ var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
|
|
|
|
+ if (!hms) {
|
|
|
|
+ return YY + MM + DD + " " + hh + mm + ss
|
|
|
|
+ } else {
|
|
|
|
+ return YY + MM + DD
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//客户端收到推送消息,调用此js方法
|
|
|
|
+function afterReceivePushMessage (type, url) {
|
|
|
|
+ try {
|
|
|
|
+ if(type == "bid" || (type == "bid" && url.indexOf("__member__") > -1)){
|
|
|
|
+ $.post("/publicapply/subscribe/vipSwitch",null,function(res){
|
|
|
|
+ if(res.error_code == 0) {
|
|
|
|
+ if(res.data.vt == 'm' && url.indexOf("__member__") > -1) {
|
|
|
|
+ JyObj.showRedSpotOnMenu("subscribe");
|
|
|
|
+ }else if(res.data.vt != 'm' && url.indexOf("__member__") == -1){
|
|
|
|
+ JyObj.showRedSpotOnMenu("subscribe");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }else if (type == "entnichepush" || type == "member" || type == "projectforecast" || type == "entchange" || type == "memberreport") {
|
|
|
|
+ JyObj.hideRedSpotOnMenu("my");
|
|
|
|
+ }
|
|
|
|
+ receivePushMessageHandle(type, url);
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取用户经纬度 每天记录一次
|
|
|
|
+function latlongitude(){
|
|
|
|
+ //首页
|
|
|
|
+ if(window.location.href.indexOf("jylab/mainSearch")==-1){
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ var llitude = "";
|
|
|
|
+ var lsllitude = localStorage.LLitude;
|
|
|
|
+ var nowDate = new Date().getDate();
|
|
|
|
+ var oldDate = new Date().getDate()-1;
|
|
|
|
+ if (lsllitude!=null&&lsllitude.split("_").length>2){
|
|
|
|
+ oldDate = Number(lsllitude.split("_")[2]);
|
|
|
|
+ }
|
|
|
|
+ //每天记录一次
|
|
|
|
+ //alert(nowDate+"--"+oldDate+"--"+parseInt(distance))
|
|
|
|
+ if (nowDate==oldDate){
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ try{
|
|
|
|
+ llitude = JyObj.getLLitude();
|
|
|
|
+ }catch(e){}
|
|
|
|
+ if(llitude==""){
|
|
|
|
+ var ai = 0;
|
|
|
|
+ var llInterval = setInterval(function(){
|
|
|
|
+ ai=ai+1;
|
|
|
|
+ try{
|
|
|
|
+ llitude = JyObj.getLLitude();
|
|
|
|
+ }catch(e){}
|
|
|
|
+ //五次获取不到客户端经纬度 就不再获取,获取位置存localStorage 一天
|
|
|
|
+ //alert(llitude+"---:"+ai)
|
|
|
|
+ if((llitude!=""&&llitude!=undefined&&llitude.indexOf("null")<0)||ai>4){
|
|
|
|
+ clearInterval(llInterval);
|
|
|
|
+ llrequest(llitude)
|
|
|
|
+ }
|
|
|
|
+ },500)
|
|
|
|
+ }else{
|
|
|
|
+ //alert("经纬度:"+llitude)
|
|
|
|
+ llrequest(llitude)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//判断经纬度是否够收录条件
|
|
|
|
+function llrequest(ll){
|
|
|
|
+ //获取不到定位信息
|
|
|
|
+ if(ll==null||ll.indexOf("_")==-1){
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ //localStorage.removeItem("LLitude");
|
|
|
|
+ var latitude = parseFloat(ll.split("_")[1]);//纬度
|
|
|
|
+ var longitude = parseFloat(ll.split("_")[0]);//经度
|
|
|
|
+ var _lat = 0.0;
|
|
|
|
+ var _long = 0.0;
|
|
|
|
+ var llitude = localStorage.LLitude;
|
|
|
|
+ if (llitude!=null&&llitude.split("_").length>2){
|
|
|
|
+ _long = parseFloat(llitude.split("_")[0]);//经度
|
|
|
|
+ _lat = parseFloat(llitude.split("_")[1]);//纬度
|
|
|
|
+ }
|
|
|
|
+ //alert(latitude+":::"+longitude+"----"+_lat+":::"+_long)
|
|
|
|
+ var calculate = calculateLL(latitude,longitude,_lat,_long);
|
|
|
|
+ if (calculate>parseInt(distance)){
|
|
|
|
+ $.post("/publicapply/appLoc/action", {
|
|
|
|
+ "longitude": longitude,
|
|
|
|
+ "latitude": latitude,
|
|
|
|
+ "calculate": calculate
|
|
|
|
+ }, function (r) {
|
|
|
|
+ if (r.data) {
|
|
|
|
+ localStorage.LLitude = ll+"_"+new Date().getDate();
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+/*计算两经纬度点之间的距离(单位:米)*/
|
|
|
|
+function calculateLL(lat1, lng1, lat2, lng2) {
|
|
|
|
+ var radLat1 = lat1 * Math.PI / 180.0;
|
|
|
|
+ var radLat2 = lat2 * Math.PI / 180.0;
|
|
|
|
+ var a = radLat1 - radLat2;
|
|
|
|
+ var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
|
|
|
|
+ var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
|
|
|
|
+ s = s * 6378.137;
|
|
|
|
+ s = Math.round(s * 10000) / 10;
|
|
|
|
+ //alert("距离上个位置:"+s+" 米")
|
|
|
|
+ return s
|
|
|
|
+}
|
|
|
|
+//
|
|
|
|
+function androidVersion(){
|
|
|
|
+ if(mySysIsIos()){
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ var m = navigator.userAgent.match(/Android \d+/);
|
|
|
|
+ if(m == null){
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ return m[0].split(" ")[1];
|
|
|
|
+}
|
|
|
|
+//app更新日志
|
|
|
|
+function newVersionUpdateLog(event,new_version){
|
|
|
|
+ $.post("/jyapp/free/newVersionUpdateLog",{
|
|
|
|
+ token: JyObj.getUserToken(),//用户token
|
|
|
|
+ event: event,//事件类型
|
|
|
|
+ current_version: JyObj.getVersion(),//当前版本号
|
|
|
|
+ new_version: new_version,//新版本号
|
|
|
|
+ channel: getChannel(),//渠道
|
|
|
|
+ phonetype: getPhoneType(),//手机型号
|
|
|
|
+ system: androidVersion()
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 根据keys校验object必填项
|
|
|
|
+ * @param {Array} keys - 待校验字段keys
|
|
|
|
+ * @param {Object} target - 待校验object
|
|
|
|
+ * @returns {boolean} - 是否通过
|
|
|
|
+ */
|
|
|
|
+function checkRequiredKeys (keys, target) {
|
|
|
|
+ try {
|
|
|
|
+ // 职位/部门特殊处理, 满足时移除部门校验
|
|
|
|
+ if (keys.indexOf('branch') !== -1 && keys.indexOf('position') !== -1) {
|
|
|
|
+ if (target['position'] === '总裁' || target['position'] === '总经理') {
|
|
|
|
+ keys.splice(keys.indexOf('branch'), 1)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return !keys.some(function (k) {
|
|
|
|
+ var tempValue = target[k]
|
|
|
|
+ var result = false
|
|
|
|
+ if (typeof tempValue === 'number') {
|
|
|
|
+ tempValue = tempValue.toString()
|
|
|
|
+ }
|
|
|
|
+ if (typeof tempValue === 'string') {
|
|
|
|
+ result = tempValue.trim() !== ''
|
|
|
|
+ }
|
|
|
|
+ if (typeof tempValue === 'boolean') {
|
|
|
|
+ result = true
|
|
|
|
+ }
|
|
|
|
+ return !result
|
|
|
|
+ })
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 根据keys覆盖object必填项
|
|
|
|
+ * @param {Object}target - 指定需替换的object
|
|
|
|
+ * @param {Object}now - 数据来源object
|
|
|
|
+ * @param {Array}[keys] - 指定需替换的keys
|
|
|
|
+ * @returns {Object} - 替换后的object,需注意target已被替换
|
|
|
|
+ */
|
|
|
|
+function echoRequiredValues (target, now, keys) {
|
|
|
|
+ try {
|
|
|
|
+ Object.keys(now).forEach(function (k) {
|
|
|
|
+ if (keys && keys.indexOf(k) === -1) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if (target.hasOwnProperty(k)) {
|
|
|
|
+ target[k] = JSON.parse(JSON.stringify(now[k]))
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return target
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ return {}
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function addPageCommonStorageEvent () {
|
|
|
|
+ var listenerKey = 'commonEvent'
|
|
|
|
+ var currentData = localStorage.getItem(listenerKey)
|
|
|
|
+
|
|
|
|
+ window._doTryCallCommonEvent = function (type, data) {
|
|
|
|
+ localStorage.setItem(listenerKey, JSON.stringify({
|
|
|
|
+ type: type,
|
|
|
|
+ data: data,
|
|
|
|
+ _key: Date.now(),
|
|
|
|
+ origin: location.href
|
|
|
|
+ }))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var inIframe = window.top !== window
|
|
|
|
+ if (inIframe) return
|
|
|
|
+
|
|
|
|
+ window.addEventListener('storage', function (event) {
|
|
|
|
+ if (event.key === listenerKey) {
|
|
|
|
+ var newData = event.newValue
|
|
|
|
+ if (newData === currentData) return
|
|
|
|
+ if (typeof window._doTryRespondCommonEvent === 'function') {
|
|
|
|
+ window._doTryRespondCommonEvent(newData, currentData)
|
|
|
|
+ } else {
|
|
|
|
+ try {
|
|
|
|
+ var nowData = JSON.parse(newData)
|
|
|
|
+ var canReloadEvent = nowData.type === 'reload' && nowData.origin !== location.href
|
|
|
|
+ if (canReloadEvent) {
|
|
|
|
+ location.reload()
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.warn(e)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+addPageCommonStorageEvent()
|