| 
					
				 | 
			
			
				@@ -0,0 +1,186 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/**  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 浏览器兼容性,特性检查 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 参考列表: http://kangax.github.io/compat-table/es6/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 同内核的不同的浏览器需要处理,比如qq浏览器登陆成功后,ie浏览器登陆页面会自动跳转到项目管理页面。因此项目管理页面也需要检测 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function checkSyntax() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'use strict'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 一些在词法、语法分析阶段就会报错的代码,必须要用window.Function或者eval包裹,否则直接报错且无法被捕获 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 不使用eval的原因:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeof window.Function === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 声明 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('let a = 1;')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('const b = 1;')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('class A {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 模板字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var a = 1; var str = `${a}`;')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 对象简单表示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function("var foo = 'foo'; var simple = { foo, t() {} };")(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 对象属性表示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function("var attr = 'a'; var obj = {[attr]: 1}")(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 对象super 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var proto = { p: 1 }; var obj = { superF() { return super.p } }; Object.setPrototypeOf(obj, proto)')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 对象getter setter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var tObj = { get a() {}, set a(v) {} }')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 扩展运算符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var obj = { foo: 1 }; var obj1 = { ...obj }; var arr = [1]; var arr1 = [...arr];')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 解构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var obj = { foo: 1 }; var { foo } = obj; var arr = [1]; var [one] = arr;')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 可选链 ?. es2020 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //Function('var obj = { a: { b: 1 } }; obj?.a?.b')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // of迭代 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('for (var i of [1]) {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 默认参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('function defaultParams(a = 1) {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // rest参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('function restParams(...args) {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // arrow function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('var arrowF = () => {};')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // generator function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('function* gen() {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // async function es2017 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Function('async function tAsync() {}')(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Symbol Promise Set Map Proxy Reflect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeof Symbol === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Promise === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Set === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Map === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Proxy === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Reflect === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // buffer相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeof ArrayBuffer === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof Uint8Array === 'undefined' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            typeof DataView === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 部分字符串方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var stringPrototypeFuncs = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'includes', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'codePointAt', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'normalize', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'repeat', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'matchAll', es2020 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'padStart', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'padEnd', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'trimStart', es2019 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'trimEnd' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var stringStaticFuncs = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'fromCodePoint', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'raw' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (var i = 0; i < stringPrototypeFuncs.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var f = stringPrototypeFuncs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!String.prototype[f]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SyntaxError('String.prototype ' + f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (var i = 0; i < stringStaticFuncs.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var f = stringStaticFuncs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!String[f]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SyntaxError('String ' + f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 部分数组方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var arrayPrototypeFuncs = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'find', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'findIndex', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'fill', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'keys', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'values', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'entries', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'flat', // es2019 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'flatMap', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'includes' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var arrayStaticFuncs = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'from', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'of' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (var i = 0; i < arrayPrototypeFuncs.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var f = arrayPrototypeFuncs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!Array.prototype[f]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SyntaxError('Array.prototyp ' + f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (var i = 0; i < arrayStaticFuncs.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var f = arrayStaticFuncs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!Array[f]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SyntaxError('Array ' + f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 对象部分方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var objectStaticFuncs = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'is', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'assign', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'getOwnPropertyDescriptors', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'setPrototypeOf', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'values', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'entries', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //'fromEntries' // es2020 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (var i = 0; i < objectStaticFuncs.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var f = objectStaticFuncs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!Object[f]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SyntaxError('Object ' + f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function showBrowserTip() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var html = '<div class="modal fade" id="browser" data-backdrop="static">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '<div class="modal-dialog modal-lg" role="document">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '<div class="modal-content">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            '<div class="modal-body">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '<h5>浏览器版本过低,可能会有安全风险;</h5>' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '<h5>请更新 「浏览器」 或者 使用 「纵横Z+造价工作平台」 登录。</h5>' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '<div class="row my-4">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    '<div class="col-6">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        '<div class="text-center"><a href="https://www.microsoft.com/zh-cn/edge" class="btn btn-primary" target="_blank">下载 Microsoft Edge</a></div>' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    '</div>' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    '<div class="col-6">' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        '<div class="text-center"><a href="https://smartcost.com.cn/downloadzplus" class="btn btn-primary" target="_blank">下载 纵横Z+造价工作平台</a></div>' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    '</div></div></div></div></div></div>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $('body').append(html); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $('#browser').modal('show'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 浏览器兼容性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var isCompat = checkSyntax(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!isCompat) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('#inputEmail').blur(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        showBrowserTip(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 |