/** * 应用唯一全局对象 * @namespace ONEMAP * @type {*|Object} */ var ONEMAP = ONEMAP || {}; //全局变量 /** * 模块对象 * @namespace ONEMAP.M * @type {Object} */ ONEMAP.M = {}; //模块 /** * 视图对象 * @namespace ONEMAP.V * @type {Object} */ ONEMAP.V = {}; //视图 /** * 管理对象 * @namespace ONEMAP.C * @type {Object} */ ONEMAP.C = {}; //管理 /** * 共用工具对象 * @namespace ONEMAP.T * @type {Object} */ ONEMAP.T = {}; //共用 /** * 数据对象 * @namespace ONEMAP.D * @type {Object} */ ONEMAP.D = {}; //数据 //新旧用户动作id对照表 ONEMAP.D.newToOld = { 1002: 26013, 1003: 26015, 1005: 26014, 1006: 26020, 1007: 26018, 1008: 26021, 1010: 26020, 1011: 26020, 1012: 26017, 1013: 26019, 1030: 26011, 1033: 26007, 1034: 26010, 1035: 26011, 1046: 26027, 1047: 26027, 1048: 26026, 1049: 26027, 1050: 26025, 1055: 26026, 1056: 26027, 1057: 26025, 1060: 26029, 1061: 26029, 1062: 26029, 1063: 26029, 1065: 26029, 1066: 26029, 1068: 26029, 1072: 26024, 1074: 26024, 1087: 26003, 1088: 26003, 1091: 26029, 1092: 26029, 1095: 26029 } //专题图数据 ONEMAP.D.Thematic = {}; //地图显示专题图数据集 ONEMAP.D.ThematicInMapData = {}; //浏览器类型 ONEMAP.M.liuLanQi = ""; //require 配置 require.config({ baseUrl: "./", waitSeconds: 25, urlArgs: "v=" + onemapVersion, paths: { text: "scripts/vendor/require/text", html: "scripts/vendor/require/html", css: "scripts/vendor/require/css", image: "scripts/vendor/require/image", async: "scripts/vendor/require/async", font: "scripts/vendor/require/font", //modDir modDir: "scripts/mod", meteoDir: "scripts/meteo", layoutDir: "scripts/layout", vendorDir: "scripts/vendor", jbDir: "jbDraw", lgDir: "layerGuid", //handlebars handlebars: "scripts/vendor/handlebars/handlebars", jqueryDir: "scripts/vendor/jquery", jquery: "scripts/vendor/jquery/jquery", //kindeditor kindeditor: "scripts/vendor/kindeditor/kindeditor-all", kindeditorDir: "scripts/vendor/kindeditor", }, shim: { "kindeditor": { deps: ["css!kindeditorDir/themes/default/default"] }, "jqueryDir/jquery-ui": { deps: ["css!jqueryDir/jquery-ui", "jquery"] }, "jqueryDir/jquery.iviewer.min": { deps: ["jqueryDir/jquery-ui", "jqueryDir/jquery.mousewheel"] }, "handlebars": { exports: "Handlebars" }, } }); require([''], function () { $.ajaxSetup({ cache: false }); /** * * 订阅分发模块 * 可以实现 某模块数据改变并通过 订阅分发模块 * 告知其他订阅该组信息的模块进行相应的事件处理 * @exports ONEMAP.C.publisher * @type {Object} */ ONEMAP.C.publisher = { /** * 订阅人员分组集合 * @type {Object} * @default [] */ subscribers: { any: [] }, /** * 注册订阅 * @type {Function} * @param fn {Function} 事件 * @param group {String} 订阅组名称 * @example * ONEMAP.C.publisher.subscribe(function(){//something to do},'sideBarLayoutChange'); */ subscribe: function (fn, group) { group = group || 'any'; if (typeof (this.subscribers[group]) === "undefined") { this.subscribers[group] = []; } this.subscribers[group].push(fn); }, /** * 取消订阅 * @type {Function} * @param fn {Function} 事件 * @param group {String} 订阅组名称 * @example * ONEMAP.C.publisher.unSubscribe(function(){//something to do},'sideBarLayoutChange'); */ unSubscribe: function (fn, group) { this.visitSubscribers('unSubscribe', fn, group); }, /** * 推送订阅 * @type {Function} * @param publicArg {*} 传递的参数 * @param group {String} 订阅组名称 * @example * ONEMAP.C.publisher.publish('','sideBarLayoutChange'); */ publish: function (publicArg, group) { this.visitSubscribers('publish', publicArg, group); }, /** * 执行事件分发||执行取消订阅 * @type {Function} * @param action {String} 执行方式 * @param arg {*} 传递的参数 * @param group {String} 订阅组名称 */ visitSubscribers: function (action, arg, group) { var pubGroup = group || 'any'; if (this.subscribers[pubGroup]) { var subscribers = this.subscribers[pubGroup]; var i; var max = subscribers.length; for (i = 0; i < max; i++) { if (action === 'publish') { subscribers[i](arg); } else { if (subscribers[i] === arg) { subscribers.splice(i, 1); } } } } } }; /** * 定时器 * 用于记录应用的timeOut事件集合 * @exports ONEMAP.C.timeOut * @type {Object} * @example * ONEMAP.C.timeOut.mapDrag = setTimeOut(function(){},3000); */ ONEMAP.C.timeOut = {}; /** * 加密解密 调用 CryptoJS库 * @exports ONEMAP.C.encryption * @type {Object} */ ONEMAP.C.encryption = { /** * BASE64加密 * @type {Function} * @param str {String} 加密前的文本 * @returns {String} 加密后的文本 */ enCode: function (str) { return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(str)); }, /** * BASE64解密 * @type {Function} * @param str {String} 解密前的文本 * @returns {String} 解密后的明文 */ deCode: function (str) { return CryptoJS.enc.Base64.parse(str).toString(CryptoJS.enc.Utf8); } }; /** * loading 加载列队 控制当前有加载 显示loading条,如果该列队都加载完成后,隐藏loading条 * 发送请求前 load , 回调回来 loaded * @exports ONEMAP.V.loading * @type {Object} */ ONEMAP.V.loading = { /** * 在线loading统计 * @type {Number} * @default 0 */ count: 0, /** * 添加一个加载统计 * @type {Function} * @example * ONEMAP.V.loading.load() */ load: function () { this.count++; $("#loading").slideDown(50); //超时设置 if (ONEMAP.C.timeOut.loading) { clearTimeout(ONEMAP.C.timeOut.loading); } ONEMAP.C.timeOut.loading = setTimeout(function () { ONEMAP.V.loading.killLoad(); }, 8000); }, /** * 加载完成后调用一次,表示从加载列队中删除一此统计数 * @type {Function} * @example * //加载 * ONEMAP.V.loading.load(); * //do something * //完成此次加载 * ONEMAP.V.loading.loaded(); */ loaded: function () { this.count--; if (this.count === 0) { $("#loading").slideUp(50); } }, /** * 强制删除加载列队统计 * @type {Function} * @example * ONEMAP.V.loading.killLoad(); */ killLoad: function () { this.count = 0; $("#loading").slideUp(50); ONEMAP.C.timeOut.loading = null; } }; /** * 获取url参数 * @param {[type]} name [description] * @return {[type]} [description] */ ONEMAP.T.getQueryString = function (name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURI(r[2]); return ''; }; /** * POST方式提交数据 * @exports ONEMAP.T.POST * @type {Function} * @param URL {String} * @param PARAMS {Object} */ ONEMAP.T.POST = function (URL, PARAMS) { var temp = document.createElement("form"); temp.action = URL; temp.method = 'post'; temp.style.display = "none"; temp.target = '_blank'; for (var x in PARAMS) { var opt = document.createElement("textarea"); opt.name = x; opt.value = PARAMS[x]; temp.appendChild(opt); } document.body.appendChild(temp); temp.submit(); setTimeout(function () { document.body.removeChild(temp); }, 1000); return temp; }, /** * 当前用户状态 包含浏览方式 当前城市信息 数据库里保存的历史记录 当前正在使用的模块 * @exports ONEMAP.D.user * @type {Object} */ ONEMAP.D.user = { //当前正在浏览的方式: pc/mobile viewType: 'pc', searchKeyWord: null, //用户令牌 ticket: '', action_list: [], name: "游客", guest: true }; /** * 当前城市信息 * @type {Object} */ ONEMAP.D.cityInfo = { name: null, //中文名称 center: null, bounds: null, zoom: null, guid: null //唯一标识符 } ONEMAP.D.currentSideBarMod = null; ONEMAP.D.appendToMyLayer = null; /** * 全局设置 * @type {Object} */ //ONEMAP.D.globalSettingData = null; ONEMAP.D.globalSettingData = { } /** * 统计地图上叠加的专题图 * @type {Number} */ ONEMAP.D.overLayerCount = 0; /** * cookie管理 * @exports ONEMAP.C.cookie * @type {Object} */ ONEMAP.C.cookie = { /** * 设置cookie * @type {Function} * @param name {String} 名称 * @param value {String} 值 * @param days {Number} 过期时间(天) * @example * ONEMAP.C.cookie.set('cookieName','cookieValue',20); */ set: function (name, value, days) { //document.cookie = ONEMAP.C.encryption.enCode(name) + "=" + ONEMAP.C.encryption.enCode(escape(value)); document.cookie = name + "=" + value; }, /** * 获取cookie * @type {Function} * @param name {String} 名称 * @returns {null|String} 返回值 * @example * ONEMAP.C.cookie.get('cookieName'); */ get: function (name) { // var arr, reg = new RegExp("(^| )" + ONEMAP.C.encryption.enCode(name) + "=([^;]*)(;|$)"); var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); arr = document.cookie.match(reg); if (arr) { // return ONEMAP.C.encryption.deCode(unescape(arr[2])); return arr[2]; } else { return null; } }, /** * 删除cookie * @type {Function} * @param name {String} 名称 * @example * ONEMAP.C.cookie.del('cookieName'); */ del: function (name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = this.get(name); // if (cval !== null) document.cookie = ONEMAP.C.encryption.enCode(name) + "=" + cval + ";expires=" + exp.toGMTString(); if (cval !== null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } }; /** * 对象合并 * @exports ONEMAP.T.objExtend * @type {Function} * @param o {Object} 原始的 * @param n {Object} 需要并入的 * @param override {Boolean} 是否覆盖掉已有属性或者方法 */ ONEMAP.T.objExtend = function (o, n, override) { for (var p in n) { if (n.hasOwnProperty(p) && (!o.hasOwnProperty(p) || override)) { o[p] = n[p]; } } }; /** * 字符串长度截取 * @exports ONEMAP.T.stringSub * @type {Function} * @param s {String} 原始字符串 * @param n {Number} 保留的长度 * @returns {String} 返回截取后的字符串 */ ONEMAP.T.stringSub = function (s, n) { var r = /[^\x00-\xff]/g; if (s.replace(r, "mm").length <= n) return s; var m = Math.floor(n / 2); for (var i = m; i < s.length; i++) { if (s.substr(0, i).replace(r, "mm").length >= n) return s.substr(0, i) + "..."; } return s; }; /** * 将obj的个属性名放到一个数组里并返回,方便取到长度和名称 * @type {Function} * @exports ONEMAP.T.getObjNameAry * @param obj {Object} 需要查询的对象 * @returns {Array} 返回结果数组 */ ONEMAP.T.getObjNameAry = function (obj) { var item; var count = []; for (item in obj) { if (obj.hasOwnProperty(item)) { count.push(item); } } return count; }; /** * 判断一个对象是否为空对象 * @exports ONEMAP.T.isEmptyObject * @type {Function} * @param obj {Object} 需要查询的对象 * @returns {boolean} 返回 true || false */ ONEMAP.T.isEmptyObject = function (obj) { for (var name in obj) { return false; } return true; }; /** * 判断是否为Json格式 * @exports ONEMAP.T.isJson * @type {Function} * @param obj {Object} 需要查询的Json对象 * @returns {boolean} 返回true || false */ ONEMAP.T.isJson = function (obj) { var isJson = typeof obj === "object" && Object.prototype.toString.call(obj).toLowerCase() === "[object object]" && !obj.length; return isJson; }; /** * 检测flash player的版本 * @exports ONEMAP.T.flashChecker * @type {Function} * @returns {Object} */ ONEMAP.T.flashChecker = function () { var hasFlash = 0; var flashVersion = 0; if (document.all) { var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); if (swf) { hasFlash = 1; VSwf = swf.GetVariable('$version'); flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]); } } else { if (navigator.plugins && navigator.plugins.length > 0) { var swf = navigator.plugins["Shockwave Flash"]; } if (swf) { hasFlash = 1; var words = swf.description.split(" "); for (var i = 0; i < words.length; i++) { if (isNaN(parseInt(words[i]))) continue; flashVersion = parseInt(words[i]); } } } return { f: hasFlash, v: flashVersion }; }; /** * 没有权限提示 * @param {[type]} modFunction [description] * @param {[type]} modTips [description] * @return {[type]} [description] */ ONEMAP.C.noPermission = function (modFunction, modTips) { if (modTips == undefined) { modTips = "未登录"; } ONEMAP.C.publisher.publish({ type: 'warning', message: '您' + modTips + '!' }, 'noteBar::add'); return false; }; ONEMAP.T.noPermission = function (modFunction, modTips) { if (modTips == undefined) { modTips = "未登录"; } ONEMAP.C.publisher.publish({ type: 'warning', message: '您' + modTips + '!' }, 'noteBar::add'); return false; }; /** * 登出 * @return {[type]} [description] */ ONEMAP.C.logout = function (modName) { ONEMAP.C.cookie.del('session'); delete ONEMAP.D.user.ticket; setTimeout(function () { if (onemapUrlConfig.accessType == 'oauth') { var jumpUrl = onemapUrlConfig.login_serverUrl + '/account/logout?next=' + onemapUrlConfig.login_serverUrl + '/go/?site=' + onemapUrlConfig.siteUrl; window.location.replace(jumpUrl); } }, 500); return false; }; /** * 生成随机uuid4 * @param {[type]} options [description] * @return {[type]} [description] */ ONEMAP.C.uuid4 = function () { var text = ""; var length = [8, 4, 4, 4, 12]; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var j = 0; j < 5; j++) { for (var i = 0; i < length[j]; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } if (j < 3) { text += "-" } } return text; } /** * 登入 * @return {[type]} [description] */ ONEMAP.C.login = function () { ONEMAP.D.globalSettingData = onemapUrlConfig.defaultGlobalSettingData; ONEMAP.D.isLoad = false; require(['layoutDir/layout'], function (layout) { layout.init(); ONEMAP.C.userLogin = $("body").userLogin({ userServer: onemapUrlConfig.OAUTH_URL,//用户验证地址代理 // loginServerUrl: onemapUrlConfig.login_serverUrl,//用户跳转登录地址 // system: onemapUrlConfig.siteUrl, //系统地址 callback: function (param) { if (param.isLoad) { var data = { data: null } ONEMAP.D.isLoad = true; data.data = param.userInfo; var name = data.data.username data.data.name = name; _.merge(ONEMAP.D.user, data.data); // //合并新旧动作id // var newActionListString = JSON.stringify(data.data.action_id_list); // $.each(ONEMAP.D.newToOld, function (i, t) { // if (newActionListString.indexOf(i) > 0) { // if (JSON.stringify(ONEMAP.D.user.action_list).indexOf(t) < 0) { // ONEMAP.D.user.action_list.push(t) // } // } // }) // _.merge(ONEMAP.D.user, data.data); // ONEMAP.D.user.guest = false; // ONEMAP.C.getInf(data.data.id); // ONEMAP.D.user.ticket = param.jwt; // ONEMAP.C.getGlobalData({ // callback: function () { // //加载pc端 // require(['layoutDir/layout'], function (layout) { // layout.init(); // }); // } // }); // if (ONEMAP.D.user.name.indexOf("map_super_user") > -1) { // $('#userContent .userInfo .moreLink .linkList li.set').show(); // } $("#userLogin").addClass('hide'); $('#userContent .userInfo .moreLink,.lgtop').show(); $('#userContent .popup-lt,#userContent .popup-lb,#userContent .popup-rt,#userContent .popup-rb').show(); $('#userContent .username').html(ONEMAP.D.user.name); //填入用户名 $("#userContent .mt10").show(); //展示上次登录时间 $("#userContent .quit").show(); //展示退出登录 $("#userContent .userInfo .login").hide(); //隐藏提示登录信息 $("#userContent .userInfo").removeClass("active"); $("#userContent .userInfo .moreLink .linkList li.myBh").addClass('uFavo').addClass('active'); } else { ONEMAP.D.isLoad = false; if (onemapUrlConfig.guestMode) { // ONEMAP.D.globalSettingData = onemapUrlConfig.defaultGlobalSettingData; // //加载pc端 // require(['layoutDir/layout'], function (layout) { // layout.init(); // }); } else { // ONEMAP.C.gotoLogin(); } } } }) }) } //获取更多基本信息 ONEMAP.C.getInf = function (id) { $.ajax({ url: onemapUrlConfig.oauthServiceUrl + '/v1.0/user?id=' + id, type: 'GET', dataType: 'json' }) .done(function (data) { _.merge(ONEMAP.D.user, data.data); }) } map23DData.show3DAlert = false; ONEMAP.C.login(); });