4 /*string类型的去前后空格和format方法*/
\r
5 String.prototype.trim = function() {
\r
6 return this.replace(/(^\s*)|(\s*$)/g, "");
\r
8 String.prototype.format=function() {
\r
9 if(arguments.length==0) return this;
\r
10 for(var s=this, i=0; i<arguments.length; i++)
\r
11 s=s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]);
\r
14 String.prototype.startWith=function(str){
\r
15 var reg=new RegExp("^"+str);
\r
16 return reg.test(this);
\r
18 String.prototype.endWith=function(str){
\r
19 var reg=new RegExp(str+"$");
\r
20 return reg.test(this);
\r
23 /*全屏 参考:http://www.alixixi.com/web/a/2015031794521.shtml */
\r
24 var s=!function(w,d){
\r
26 supportsFullScreen:false,
\r
28 requestFullScreen:'',
\r
30 fullscreenchange:'',
\r
33 aP=['webkit','moz','ms'], //opera 15 支持全屏是webkit内核
\r
36 if(d.exitFullscreen){
\r
37 fs.supportsFullScreen=true
\r
40 if(d[aP[i]+'ExitFullscreen']||d[aP[i]+'CancelFullScreen']){
\r
41 fs.supportsFullScreen=true;
\r
47 if(fs.supportsFullScreen){
\r
49 fs.fullscreenchange=function(fn){
\r
50 d.addEventListener(p=='ms' ? 'MSFullscreenChange' : p+'fullscreenchange',function(){
\r
54 fs.fullscreenchange(function(){
\r
55 fs.isFullScreen=(function(p){
\r
58 return d.fullscreen;
\r
60 return d.webkitIsFullScreen;
\r
62 return d.mozFullScreen;
\r
64 return d.msFullscreenElement ? true : false
\r
68 fs.requestFullScreen=function(elem){
\r
69 var elem=elem||d.documentElement;
\r
71 p ? elem[p+'RequestFullScreen']() : elem.requestFullScreen() //chrome,ff,标准
\r
73 elem[p+'RequestFullscreen']() //elem.msRequestFullscreen
\r
76 fs.exitFullScreen=function(){
\r
78 p ? d[p+'ExitFullscreen']() : d.exitFullscreen() //ie,新版chrome或标准
\r
80 d[p+'CancelFullScreen']() //老版chrome 火狐
\r
87 * Purl (A JavaScript URL parser) v2.3.1
\r
88 * Developed and maintanined by Mark Perkins, mark@allmarkedup.com
\r
89 * Source repository: https://github.com/allmarkedup/jQuery-URL-Parser
\r
90 * Licensed under an MIT-style license. See https://github.com/allmarkedup/jQuery-URL-Parser/blob/master/LICENSE for details.
\r
92 ;(function(factory) {
\r
93 if (typeof define === 'function' && define.amd) {
\r
96 window.purl = factory();
\r
111 key = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'], // keys available to query
\r
112 aliases = { 'anchor' : 'fragment' }, // aliases for backwards compatability
\r
114 strict : /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs
\r
115 loose : /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
\r
117 isint = /^[0-9]+$/;
\r
119 function parseUri( url, strictMode ) {
\r
120 var str = decodeURI( url ),
\r
121 res = parser[ strictMode || false ? 'strict' : 'loose' ].exec( str ),
\r
122 uri = { attr : {}, param : {}, seg : {} },
\r
125 uri.attr[ key[i] ] = res[i] || '';
\r
127 // build query and fragment parameters
\r
128 uri.param['query'] = parseString(uri.attr['query']);
\r
129 uri.param['fragment'] = parseString(uri.attr['fragment']);
\r
130 // split path and fragement into segments
\r
131 uri.seg['path'] = uri.attr.path.replace(/^\/+|\/+$/g,'').split('/');
\r
132 uri.seg['fragment'] = uri.attr.fragment.replace(/^\/+|\/+$/g,'').split('/');
\r
133 // compile a 'base' domain attribute
\r
134 uri.attr['base'] = uri.attr.host ? (uri.attr.protocol ? uri.attr.protocol+'://'+uri.attr.host : uri.attr.host) + (uri.attr.port ? ':'+uri.attr.port : '') : '';
\r
139 function getAttrName( elm ) {
\r
140 var tn = elm.tagName;
\r
141 if ( typeof tn !== 'undefined' ) return tag2attr[tn.toLowerCase()];
\r
145 function promote(parent, key) {
\r
146 if (parent[key].length === 0) return parent[key] = {};
\r
148 for (var i in parent[key]) t[i] = parent[key][i];
\r
153 function parse(parts, parent, key, val) {
\r
154 var part = parts.shift();
\r
156 if (isArray(parent[key])) {
\r
157 parent[key].push(val);
\r
158 } else if ('object' == typeof parent[key]) {
\r
160 } else if ('undefined' == typeof parent[key]) {
\r
163 parent[key] = [parent[key], val];
\r
166 var obj = parent[key] = parent[key] || [];
\r
168 if (isArray(obj)) {
\r
169 if ('' !== val) obj.push(val);
\r
170 } else if ('object' == typeof obj) {
\r
171 obj[keys(obj).length] = val;
\r
173 obj = parent[key] = [parent[key], val];
\r
175 } else if (~part.indexOf(']')) {
\r
176 part = part.substr(0, part.length - 1);
\r
177 if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
\r
178 parse(parts, obj, part, val);
\r
181 if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
\r
182 parse(parts, obj, part, val);
\r
187 function merge(parent, key, val) {
\r
188 if (~key.indexOf(']')) {
\r
189 var parts = key.split('[');
\r
190 parse(parts, parent, 'base', val);
\r
192 if (!isint.test(key) && isArray(parent.base)) {
\r
194 for (var k in parent.base) t[k] = parent.base[k];
\r
198 set(parent.base, key, val);
\r
204 function parseString(str) {
\r
205 return reduce(String(str).split(/&|;/), function(ret, pair) {
\r
207 pair = decodeURIComponent(pair.replace(/\+/g, ' '));
\r
211 var eql = pair.indexOf('='),
\r
212 brace = lastBraceInKey(pair),
\r
213 key = pair.substr(0, brace || eql),
\r
214 val = pair.substr(brace || eql, pair.length);
\r
216 val = val.substr(val.indexOf('=') + 1, val.length);
\r
223 return merge(ret, key, val);
\r
224 }, { base: {} }).base;
\r
227 function set(obj, key, val) {
\r
229 if (typeof v === 'undefined') {
\r
231 } else if (isArray(v)) {
\r
234 obj[key] = [v, val];
\r
238 function lastBraceInKey(str) {
\r
239 var len = str.length,
\r
242 for (var i = 0; i < len; ++i) {
\r
244 if (']' == c) brace = false;
\r
245 if ('[' == c) brace = true;
\r
246 if ('=' == c && !brace) return i;
\r
250 function reduce(obj, accumulator){
\r
252 l = obj.length >> 0,
\r
253 curr = arguments[2];
\r
255 if (i in obj) curr = accumulator.call(undefined, curr, obj[i], i, obj);
\r
261 function isArray(vArg) {
\r
262 return Object.prototype.toString.call(vArg) === "[object Array]";
\r
265 function keys(obj) {
\r
266 var key_array = [];
\r
267 for ( var prop in obj ) {
\r
268 if ( obj.hasOwnProperty(prop) ) key_array.push(prop);
\r
273 function purl( url, strictMode ) {
\r
274 if ( arguments.length === 1 && url === true ) {
\r
278 strictMode = strictMode || false;
\r
279 url = url || window.location.toString();
\r
282 data : parseUri(url, strictMode),
\r
283 // get various attributes from the URI
\r
284 attr : function( attr ) {
\r
285 attr = aliases[attr] || attr;
\r
286 return typeof attr !== 'undefined' ? this.data.attr[attr] : this.data.attr;
\r
288 // return query string parameters
\r
289 param : function( param ) {
\r
290 return typeof param !== 'undefined' ? this.data.param.query[param] : this.data.param.query;
\r
293 // return fragment parameters
\r
294 fparam : function( param ) {
\r
295 return typeof param !== 'undefined' ? this.data.param.fragment[param] : this.data.param.fragment;
\r
297 // return path segments
\r
298 segment : function( seg ) {
\r
299 if ( typeof seg === 'undefined' ) {
\r
300 return this.data.seg.path;
\r
302 seg = seg < 0 ? this.data.seg.path.length + seg : seg - 1; // negative segments count from the end
\r
303 return this.data.seg.path[seg];
\r
306 // return fragment segments
\r
307 fsegment : function( seg ) {
\r
308 if ( typeof seg === 'undefined' ) {
\r
309 return this.data.seg.fragment;
\r
311 seg = seg < 0 ? this.data.seg.fragment.length + seg : seg - 1; // negative segments count from the end
\r
312 return this.data.seg.fragment[seg];
\r
317 purl.jQuery = function($){
\r
319 $.fn.url = function( strictMode ) {
\r
321 if ( this.length ) {
\r
322 url = $(this).attr( getAttrName(this[0]) ) || '';
\r
324 return purl( url, strictMode );
\r
329 purl.jQuery(window.jQuery);
\r
332 //把框架所有的ajax请求集中到一起,发一条请求,获取所有的配置信息。
\r
333 openoFrameWork_conf = {
\r
334 userName:store("loginUserName"),
\r
335 changePassItem:FrameConst.change_pass?FrameConst.change_pass:true,
\r
336 helpMenuItem:false,
\r
337 aboutMenuItem:false,
\r
338 flightMenuItem:false,
\r
339 fullscreenMenuItem:true,
\r
340 logoutMenuItem:true,
\r
341 defaultThemeColor:"ztebluelight2",
\r
343 acceptLanguage:"en-US"
\r
345 $("#currentUser").html(openoFrameWork_conf.userName);
\r
348 url : FrameConst.REST_FRAMECOMMIFO,
\r
351 contentType : 'application/json; charset=utf-8',
\r
352 success: function(data){
\r
353 var tempConf = data;
\r
354 if( tempConf.helpMenuItem && tempConf.helpMenuItem != "" ){
\r
355 openoFrameWork_conf.helpMenuItem = tempConf.helpMenuItem;
\r
357 if( tempConf.aboutMenuItem && tempConf.aboutMenuItem != "" ){
\r
358 openoFrameWork_conf.aboutMenuItem = tempConf.aboutMenuItem;
\r
360 if( tempConf.flightMenuItem && tempConf.flightMenuItem != "" ){
\r
361 openoFrameWork_conf.flightMenuItem = tempConf.flightMenuItem;
\r
363 if( tempConf.fullscreenMenuItem && tempConf.fullscreenMenuItem != "" ){
\r
364 openoFrameWork_conf.fullscreenMenuItem = tempConf.fullscreenMenuItem;
\r
366 if( tempConf.logoutMenuItem && tempConf.logoutMenuItem != "" ){
\r
367 openoFrameWork_conf.logoutMenuItem = tempConf.logoutMenuItem;
\r
369 if( tempConf.defaultThemeColor && tempConf.defaultThemeColor != "" ){
\r
370 openoFrameWork_conf.defaultThemeColor = tempConf.defaultThemeColor;
\r
372 if( tempConf.dbType && tempConf.dbType != "" ){
\r
373 openoFrameWork_conf.dbType = tempConf.dbType;
\r
375 if( tempConf.acceptLanguage && tempConf.acceptLanguage != "" ){
\r
376 openoFrameWork_conf.acceptLanguage = tempConf.acceptLanguage;
\r
378 if( tempConf.changePassItem && tempConf.changePassItem != "" ){
\r
379 openoFrameWork_conf.changePassItem = tempConf.changePassItem;
\r
382 setFrameWorkByConf();
\r
384 //console.info('login user is :' + data);
\r
386 error:function(data){
\r
387 setFrameWorkByConf();
\r
391 function setThemeColor( configColor ){
\r
392 var panel = $('.zte-theme-panel');
\r
393 $('.theme-colors > ul > li', panel).each(function () {
\r
394 var color = $(this).attr("data-style");
\r
395 if (color == configColor) {
\r
397 $(this).addClass("current");
\r
398 $('#style_color').attr("href", "css/themes/" + color + ".css");
\r
400 store('style_color', color);
\r
406 function setFrameWorkByConf() {
\r
407 //设置用户相关的框架下拉菜单是否可用
\r
408 var helpMenuItem = openoFrameWork_conf.helpMenuItem;
\r
409 var aboutMenuItem = openoFrameWork_conf.aboutMenuItem;
\r
410 var flightMenuItem = openoFrameWork_conf.flightMenuItem;
\r
411 var fullscreenMenuItem = openoFrameWork_conf.fullscreenMenuItem;
\r
412 var logoutMenuItem = openoFrameWork_conf.logoutMenuItem;
\r
413 var changePassMenuItem = openoFrameWork_conf.changePassMenuItem;
\r
414 if (!helpMenuItem || helpMenuItem === "false") {
\r
415 $('#uep_ict_help_url').parent('li').remove();
\r
417 if (!aboutMenuItem|| aboutMenuItem === "false") {
\r
418 $('[data-target="#aboutDlg"]').parent('li').remove();
\r
420 if (!helpMenuItem && !aboutMenuItem) {
\r
421 $('#uep_ict_help_div').remove();
\r
423 if (!flightMenuItem|| flightMenuItem === "false") {
\r
424 $('#header_notification_bar').html("<div>      </div>");
\r
426 if (!fullscreenMenuItem|| fullscreenMenuItem === "false") {
\r
427 //$('#trigger_fullscreen').parent().css("display", "none");
\r
428 $('#trigger_fullscreen_div').html("");
\r
430 if (!logoutMenuItem || logoutMenuItem === "false") {
\r
431 //$('#trigger_logout').parent().css("display", "none");
\r
432 $('#trigger_logout_div').html("");
\r
434 if ((!fullscreenMenuItem && !logoutMenuItem) || (fullscreenMenuItem === "false" && logoutMenuItem === "false")) {
\r
435 $('#full_logout_divider').css("display", "none");
\r
437 if (!changePassMenuItem ) {
\r
438 $('#changePwd_labellink').css('display','none');
\r
439 $('#full_logout_divider').css('display','none');
\r
443 var defaultColor = openoFrameWork_conf.defaultThemeColor;
\r
444 var panel = $('.zte-theme-panel');
\r
445 $('ul > li', panel).removeClass("current");
\r
446 if (store && !store('style_color')) { // cookie没有才设置默认主题
\r
447 setThemeColor(defaultColor);
\r
449 setThemeColor(store('style_color'));
\r
453 /*新增的hashtabel实现类,用户后续iframe的缓存,前进后退时打开过的页面的菜单id的缓存等*/
\r
454 function Hashtable()
\r
458 this.add = function(key, value)
\r
460 if (this._hash.hasOwnProperty(key))
\r
463 this._hash[key] = value; this._count++; return true;
\r
466 this.hash = function() { return this._hash; };
\r
467 this.remove = function(key) { delete this._hash[key]; this._count--; } ;
\r
468 this.count = function() { return this._count; };
\r
469 this.items = function(key) { if (this.contains(key)) return this._hash[key]; };
\r
470 this.contains = function(key) { return this._hash.hasOwnProperty(key); };
\r
471 this.clear = function() { this._hash = {}; this._count = 0; };
\r
472 this.replace = function(key, value)
\r
473 { //有则删除后增加///相当于更新
\r
474 if(this.contains(key)){
\r
477 return this.add(key, value);
\r
481 var fMenuSiderDivId = 'page-f-sidebar-menu';
\r
482 var fMenuMegaDivId = 'f_hormenu';
\r
483 var megaSiderDivId = 'page-megachild-sidebar-menu';
\r
484 var megaDivId = 'main_hormenu';
\r
485 var openoFrameWork_menu_horizontal = "horizontal";
\r
486 var openoFrameWork_menu_vertical = "vertical";
\r
487 var openoFrameWork_menu_fmenu = "fmenu";
\r
488 var openoFrameWork_showNav = "true";
\r
489 var openoFrameWork_smallView = 960;//原来为992,但是在投影仪上不准(投影仪设置为1024,但是实际尺寸比1024小),边栏菜单也会被移除,这个设置一个稍小的值。
\r
492 var openoFrameWork = function () {
\r
493 var defaultLanage=getLanguage();
\r
494 var isRTL = false;//文档顺序
\r
495 var isTouch=function(){
\r
497 document.createEvent("TouchEvent");
\r
503 var isDesktop = !isTouch;
\r
506 var isIE10 = false;
\r
508 var _sidebarWidth = 225;
\r
509 var _sidebarCollapsedWidth = 35;
\r
510 var responsiveHandlers = [];
\r
511 var cachedIframes=new Hashtable();
\r
512 var cachedIframesObject=new Hashtable();
\r
513 var breadcrumbBtnMenus=new Hashtable();
\r
514 var _menuCategorys=new Hashtable();
\r
515 var _iframe="page-mainIframe"; //全局变量保存的是当前正在打开使用的iframe
\r
516 var _sceneURLRootPath="";
\r
517 var _hashSource="";//信号量
\r
518 var _isClicked=false;//信号量
\r
519 //var _breadcrumbSource=false;
\r
522 var layoutColorCodes = {
\r
525 'green': '#35aa47',
\r
526 'purple': '#852b99',
\r
528 'light-grey': '#fafafa',
\r
529 'yellow': '#ffb848',
\r
530 'ztebluelight': '#3366cc'
\r
532 // 获取真实的设备窗口大小,参考了 http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
\r
533 var _getViewPort = function () {
\r
534 var e = window, a = 'inner';
\r
535 if (!('innerWidth' in window)) {
\r
537 e = document.documentElement || document.body;
\r
540 width: e[a + 'Width'],
\r
541 height: e[a + 'Height']
\r
545 var dealInit = function () {
\r
547 var menuSence = getUrlParam("menu");
\r
556 gdocTitle = $('#com_zte_ums_ict_framework_ui_page_title_1').text().trim();
\r
559 gdocTitle = $('#com_zte_ums_ict_framework_ui_page_title_2').text().trim();
\r
562 gdocTitle = $('#com_zte_ums_ict_framework_ui_page_title_3').text().trim();
\r
566 gdocTitle = $('#com_zte_ums_ict_framework_ui_page_title').text().trim();
\r
569 if ($('body').css('direction') === 'rtl') {
\r
572 isIE8 = !! navigator.userAgent.match(/MSIE 8.0/);
\r
573 isIE9 = !! navigator.userAgent.match(/MSIE 9.0/);
\r
574 isIE10 = !! navigator.userAgent.match(/MSIE 10.0/);
\r
576 $('html').addClass('ie10'); // IE10
\r
578 if (isIE10 || isIE9 || isIE8) {
\r
579 $('html').addClass('ie'); // IE10
\r
581 var deviceAgent = navigator.userAgent.toLowerCase();
\r
582 if (deviceAgent.match(/(iphone|ipod|ipad)/)) {
\r
583 $(document).on('focus', 'input, textarea', function () {
\r
584 $('.page-header').hide();
\r
585 if($('.page-footer')&&$('.page-footer').length>0)
\r
586 $('.page-footer').hide();
\r
588 $(document).on('blur', 'input, textarea', function () {
\r
589 $('.page-header').show();
\r
590 if($('.page-footer')&&$('.page-footer').length>0)
\r
591 $('.page-footer').show();
\r
594 $(document).on('focus', 'input, textarea', function () {
\r
595 if($('.page-footer')&&$('.page-footer').length>0)
\r
596 $('.page-footer').hide();
\r
598 $(document).on('blur', 'input, textarea', function () {
\r
599 if($('.page-footer')&&$('.page-footer').length>0)
\r
600 $('.page-footer').show();
\r
605 var dealScrollTo=function (el, offeset) {
\r
608 var dealstartPageLoading=function(message) {
\r
609 $('.page-loading').remove();
\r
610 $('body').append('<div class="page-loading"><img src="'+ ICTFRAME_CONST_SPINNER_GIF_PATH +'"/> <span>' + (message ? message : $.i18n.prop('com_zte_ums_ict_framework_ui_loading')) + '</span></div>');
\r
612 var dealstopPageLoading=function() {
\r
613 $('.page-loading').remove();
\r
615 var dealSidebarState = function () {
\r
616 // 窗体宽度小尺寸(平板和iphone模式下)时移出左边栏
\r
617 var viewport = _getViewPort();
\r
618 if (viewport.width < openoFrameWork_smallView) {
\r
619 $('body').removeClass("page-sidebar-closed");
\r
621 if (getCookie('sidebar_closed') === '1') {
\r
622 $('body').addClass('page-sidebar-closed');
\r
626 // openoFrameWork.addResponsiveHandler()回调函数.
\r
627 var runResponsiveHandlers = function () {
\r
628 //重新初始化其他订阅的元素elements
\r
629 for (var i = 0; i < responsiveHandlers.length; i++) {
\r
630 var each = responsiveHandlers[i];
\r
634 // 窗体重新调整大小时初始化调整边栏状态高度
\r
635 var dealResponsive = function () {
\r
636 dealSidebarState();
\r
637 ajustHorMenuDropDirection();
\r
638 dealSidebarAndContentHeight();
\r
639 dealFixedSidebar();
\r
640 runResponsiveHandlers();
\r
643 var dealResponsiveOnInit = function () {
\r
644 dealSidebarState();
\r
645 dealSidebarAndContentHeight();
\r
646 setTimeout(function () {
\r
647 ajustHorMenuDropDirection(true);
\r
650 // 窗体重新调整大小时初始化调整布局
\r
651 var dealResponsiveOnResize = function () {
\r
655 $(window).resize(function () {
\r
656 if (currheight == document.documentElement.clientHeight) {
\r
660 clearTimeout(resize);
\r
662 resize = setTimeout(function () {
\r
665 currheight = document.documentElement.clientHeight;
\r
668 $(window).resize(function () {
\r
670 clearTimeout(resize);
\r
672 resize = setTimeout(function () {
\r
678 var changeSiderBar = function(hideAllMenu){
\r
679 var siderbarpos = $(".nav-pos-direction", $(".zte-theme-panel")).val();
\r
680 var sidermenu = $("#page-sidebar-menu");
\r
681 var hormenu = $("#main_hormenu");
\r
682 var fhorMenu = $("#" + fMenuMegaDivId);
\r
683 var fsiderMenu = $("#" + fMenuSiderDivId);
\r
685 sidermenu.css('display','block');// 侧边栏显示
\r
686 hormenu.css("display", "none");//隐藏水平菜单栏
\r
687 fhorMenu.css('display','none');
\r
688 fsiderMenu.css('display','none');
\r
692 sidermenu.css('display','none');
\r
693 hormenu.css("display", "none");
\r
694 fhorMenu.css('display','block');
\r
695 fsiderMenu.css('display','block');
\r
696 //除了toggle按钮之外,是否还有其他儿子是要显示的,如果没有,那么竖菜单不显示;反之,显示。
\r
697 var lis = fsiderMenu.children(".sidebar-toggler-wrapper").siblings();
\r
698 if(lis.length > 0 && lis.css('display') != "none"){
\r
699 fsiderMenu.css('display','block');
\r
700 $("body").removeClass("page-full-width");
\r
701 if ($('body').hasClass("page-sidebar-closed")) {
\r
702 $(".page-content").css("marginLeft", _sidebarCollapsedWidth);
\r
704 $(".page-content").css("marginLeft", _sidebarWidth);
\r
708 //根据当前菜单在屏幕的位置,和一级菜单下二级菜单的排列,来决定菜单是向左展开还是向右展开
\r
709 var ajustHorMenuDropDirection = function( isInit ){
\r
711 var bodyWidth = document.body.clientWidth;
\r
712 //循环,获取每个一级菜单在屏幕中的位置
\r
713 var levelOneAdropdowns = $('a.dropdown-toggle', '#main_hormenu' );
\r
714 //每一个文字span的图标、他父亲的margin\padding等占用的位置
\r
715 var marginCount = 5 * 2 + 17.5 + 2 * 2 + 30 + 15 * 2 + 3;
\r
716 for( var i = 0 ; i < levelOneAdropdowns.length ; i++ ){
\r
717 var a = $(levelOneAdropdowns[i]);
\r
718 var leftOffset = a.offset().left;
\r
720 var ul = a.parent().children('.dropdown-menu');
\r
721 var groupDivs = $('.zteDivWidth' , ul);
\r
722 var widthOfDropDownMenu = 0;
\r
723 for(var j = 0 ; j < groupDivs.length && groupDivs.length >0 ; j++ ){//循环获取每个分组的宽度
\r
724 var eachDiv = groupDivs[j];
\r
725 var maxLengthText = "";
\r
727 var spans = $('span' , eachDiv).each(function(){
\r
728 var innerText = this.innerText;
\r
729 if( innerText.length > maxLength ){
\r
730 maxLength= innerText.length;
\r
731 maxLengthText = innerText;
\r
734 widthOfDropDownMenu = widthOfDropDownMenu + getStringWidth(maxLengthText , 14) + marginCount;
\r
736 //预估每个组占宽度150PX,多预计一点
\r
737 if( widthOfDropDownMenu + leftOffset > bodyWidth ){
\r
738 console.log("ajust class dropdown-menu-right ,id = "+ a.attr("id") );
\r
739 ul.addClass('dropdown-menu-right');
\r
740 //var right = bodyWidth - (leftOffset + a.width() + 15);
\r
741 //ul.attr('style' ,'right:' + right );
\r
743 ul.removeClass('dropdown-menu-right');
\r
744 //ul.removeAttr('style');
\r
748 // 屏幕大小发生变化或者移动设备旋转屏幕时处理响应式布局.
\r
749 var dealSidebarAndContentHeight = function (isToggler) {
\r
750 var content = $('.page-content');
\r
751 var contentbody = $('.page-content-body');
\r
752 var sidebar = $('.page-sidebar');
\r
753 var body = $('body');
\r
755 var viewport = _getViewPort();
\r
756 var scrAvaHeight=Math.min(window.screen.availHeight,viewport.height)-5;
\r
757 var footer=$('.footer');
\r
758 var pgbread=$('.page-breadcrumb');
\r
759 var pageableDiv=$('#pageableDiv');
\r
760 console.log("pageableDiv height:"+pageableDiv.outerHeight(true));
\r
761 var pheader=$('.header');
\r
762 var childPagetype=!!cachedIframesObject.items(_iframe)?cachedIframesObject.items(_iframe).childpageType:"";
\r
763 if(childPagetype==="isc")//smartclient的子页面固定高度为视口可用内容区高度
\r
765 $('.sidebar-option', panel).val("fixed");
\r
768 var available_height =scrAvaHeight - ((!footer||footer.length<=0)?0:footer.outerHeight(true)) - pheader.outerHeight(true);
\r
769 var _pageableDivHeight=(!pageableDiv||pageableDiv.length<=0||pageableDiv.is(":visible")==false)?0:pageableDiv.outerHeight(true);
\r
770 var h= scrAvaHeight-pheader.outerHeight(true)-((!footer||footer.length<=0||footer.is(":visible")==false)?0:footer.outerHeight(true))-pgbread.outerHeight(true)-_pageableDivHeight-(contentbody.outerHeight(true)-contentbody.height());
\r
771 var miframe=_iframe==""?"page-mainIframe": _iframe;
\r
772 var pagemyIframe=$('.page-content .page-content-body .'+miframe); //.page-mainIframe
\r
773 if(pagemyIframe&&pagemyIframe.length>0){
\r
774 //处理iframe,下面计算中间iframe的高度
\r
775 var deviceAgent = navigator.userAgent.toLowerCase();
\r
776 if (deviceAgent.match(/(iphone|ipod|ipad)/)) { //||viewport.height<=480
\r
777 var w=viewport.width-content.offset().left-(pagemyIframe.offset().left-content.offset().left)*2;//宽度=总宽度-左边栏宽度-内容区内边距。左右两个
\r
778 pagemyIframe.width(w);
\r
781 var tmp_style = sidebar.attr('style');// firefox下执行 sidebar.height()会改变style样式,这里缓存下执行前的style样式,执行完后重新赋给页面元素
\r
782 console.log("pym:parent iframe "+miframe+" sidebar.height:"+sidebar.height()+" h:"+h);
\r
783 h=sidebar.height()>h?sidebar.height():h;
\r
784 //IE下,把iframe的高度再减掉7,因为IE10及以下版本,计算的高度会比IE实际显示区域大,导致出现IE滚动条。
\r
785 /*h=h-ICTFRAME_CONST_IFRAME_HEIGHT_AJUST;
\r
787 h=h-ICTFRAME_CONST_IFRAME_HEIGHT_AJUST_IE;
\r
789 sidebar.attr('style',tmp_style);
\r
791 //pagemyIframe.attr("height",h);
\r
792 if(cachedIframesObject.items(miframe).setMinHeight){
\r
793 var minHeight=Math.min(scrAvaHeight,h);
\r
794 console.log("pym:parent iframe "+miframe+" window.screen.availHeight:"+scrAvaHeight+" viewport.height:"+viewport.height+" h:"+h+" minHeight:"+minHeight);
\r
795 cachedIframesObject.items(miframe).setMinHeight(minHeight);
\r
798 //pagemyIframe.attr("height","100%");//去掉这里错误的设置,ipad上测试高度不正确
\r
801 _h=pagemyIframe.contents().height();
\r
804 if(cachedIframesObject.items(miframe).setMinHeight){
\r
805 var minHeight=Math.min(scrAvaHeight,h);
\r
806 console.log("pym:parent iframe "+miframe+" window.screen.availHeight:"+scrAvaHeight+" viewport.height:"+viewport.height+" h:"+h+" minHeight:"+minHeight);
\r
807 cachedIframesObject.items(miframe).setMinHeight(minHeight);
\r
812 if (body.hasClass("page-footer-fixed") === true && body.hasClass("page-sidebar-fixed") === true) {
\r
813 if (content.height() < available_height) {
\r
814 //content.attr('style', 'min-height:' + available_height + 'px !important');
\r
815 dealAddStyle(content,'min-height',available_height + 'px',true);
\r
818 if (body.hasClass("page-footer-fixed") === true && body.hasClass("page-sidebar-fixed") === false) {
\r
819 if (content.height() < available_height) {
\r
820 //content.attr('style', 'min-height:' + available_height + 'px !important');
\r
821 dealAddStyle(content,'min-height',available_height + 'px',true);
\r
824 if (body.hasClass('page-sidebar-fixed')) {
\r
825 height = _calculateFixedSidebarViewportHeight();
\r
827 // firefox下执行 sidebar.height()会改变style样式,这里缓存下执行前的style样式,执行完后重新赋给页面元素
\r
828 var tmp_style = sidebar.attr('style');
\r
829 // height = sidebar.height() + 20;
\r
830 sidebar.attr('style',tmp_style);
\r
831 var headerHeight = pheader.outerHeight(true);
\r
832 var footerHeight = (!footer||footer.length<=0)?0:footer.outerHeight(true);
\r
833 if ($(window).width() > 1024 && (height + headerHeight + footerHeight) < scrAvaHeight) {
\r
834 height = scrAvaHeight - headerHeight - footerHeight;
\r
837 if (height <= content.height()) {//这里为了避免内容区域很小的时候出现内容区域无法充满屏幕,把min-height修改为height
\r
838 //content.attr('style', 'min-height:' + height + 'px !important');
\r
839 dealAddStyle(content,'min-height',height + 'px',true);
\r
843 // 屏幕小尺寸时会隐藏边栏,这时菜单由小屏幕右上图标控制,当屏幕变化到大尺寸屏幕时,
\r
844 // 需要按原菜单出现方式恢复菜单显示。
\r
845 var screenwidth = $(window).width();
\r
846 if(screenwidth >= openoFrameWork_smallView){
\r
848 if($(".page-sidebar-menu li").css('display') != "none"){
\r
849 if ($('body').hasClass("page-sidebar-closed") && $(".sidebar-toggler").hasClass("close-by-viewportChange")) {
\r
851 $(".sidebar-toggler")[1].click();
\r
853 $(".sidebar-toggler").removeClass("close-by-viewportChange");
\r
858 changeSiderBar(true);
\r
861 var showIframe=function(iframe){
\r
862 var resize,pagemainIframe;
\r
863 if (cachedIframes.count()>0) {
\r
864 for (var i in cachedIframes.hash()) {
\r
865 cachedIframes.replace(i,0);
\r
866 var pagemyIframe=$('.page-content .page-content-body .'+i);
\r
867 if(pagemyIframe&&pagemyIframe.length>0){
\r
869 pagemyIframe.show();
\r
870 cachedIframes.replace(i,1);
\r
872 if("page-mainIframe"===i){//2015年12月10日 wimax要求页面切换后删除没有配置cacheNum的缓存页面
\r
874 pagemyIframe.attr("src","");
\r
875 pagemyIframe.remove();
\r
877 pagemyIframe.hide();
\r
879 cachedIframes.replace(i,0);
\r
884 if(pagemainIframe){
\r
885 delete cachedIframes._hash[pagemainIframe];
\r
886 delete cachedIframesObject._hash[pagemainIframe];
\r
888 if (!cachedIframes.contains(iframe)) {
\r
889 cachedIframes.add(iframe,1);
\r
890 //增加的iframe加载完毕后 停止加载中提示信息
\r
891 myIframe=$('.'+iframe);
\r
893 myIframe.load(function(){
\r
894 /*if (!isDesktop) {
\r
896 clearInterval(resize);
\r
898 resize = setInterval(dealIframeHeight, 400,$(this));
\r
900 openoFrameWork.stopPageLoading();
\r
904 var hidemenu=function(){
\r
905 $('.hor-menu').hide();
\r
906 dealAddStyle($('.page-content'),'margin-left','0px',true);
\r
907 dealAddStyle($('.page-sidebar'),'display','none',true);
\r
908 var fsiderMenu = $("#" + fMenuSiderDivId);
\r
909 fsiderMenu.children().css('display' , 'none');
\r
911 var hideAlarmLight=function(){
\r
912 //$('#header_notification_bar').hide();
\r
913 //$('#header_notification_bar').empty();
\r
914 $('#header_notification_bar').html("<div>      </div>");
\r
916 var dealShownav=function(){
\r
917 var showNav=openoFrameWork.getLocationURLParameter('showNav');
\r
918 if( showNav=="false"){
\r
919 openoFrameWork_showNav = showNav;
\r
924 /* 点击菜单时,处理对应该菜单项的横,左菜单项 */
\r
925 var dealRelateMenu = function(source) {
\r
926 // 点击子菜单时,对应的横竖菜单项也联动为选择样式,(高亮,箭头变化)
\r
927 var panel = $('.zte-theme-panel');
\r
928 var navPosOption = $('.nav-pos-direction', panel).val();
\r
929 var targetsource = null;
\r
930 var targetContainer = null;
\r
931 if (navPosOption === "vertical") {
\r
932 // 当前是左菜单,则处理对应的横菜单
\r
933 targetsource = $("#"+source.attr("id"), $("#main_hormenu"));
\r
934 targetContainer = $(".header ul");
\r
935 } else if (navPosOption === "horizontal") {
\r
936 var rtn = dealMgaBarRelated(source);
\r
937 dealFMenuRelated(source , megaSiderDivId);
\r
938 targetContainer = rtn[0];
\r
939 targetsource = rtn[1];
\r
940 }else if(navPosOption === openoFrameWork_menu_fmenu){
\r
941 dealFMenuRelated(source , fMenuSiderDivId);
\r
943 if (targetContainer) {
\r
945 targetContainer.children('li.active').removeClass('active');
\r
946 targetContainer.find('.arrow.open').removeClass('open');
\r
948 if (targetsource) {
\r
950 targetsource.parents('li').each(function () {
\r
951 $(this).addClass('iframe active');
\r
952 $(this).find('a > span.arrow').addClass('open');
\r
954 targetsource.parents('li').addClass('active');
\r
955 if (navPosOption === "horizontal") {
\r
956 if (targetsource.parent().parent().parent().is("li")) {
\r
957 $('.arrow', targetsource.parent().parent().parent()).addClass("open");
\r
962 var dealMgaBarRelated = function(source){
\r
963 // 当前是横菜单,则处理对应的左菜单
\r
964 targetsource = $("#"+source.attr("id"), $("[class='page-sidebar-menu']"));
\r
965 targetContainer = $("#page-sidebar-menu ul");
\r
967 $("li.open",targetContainer).each(function() {
\r
968 var style = $("ul.sub-menu", this).attr("style");
\r
970 $("ul.sub-menu", this).removeAttr("style");
\r
971 $(this).removeClass('open');
\r
974 // 当前是横菜单,但在屏幕缩小的情况下显示的是tip垂直菜单,而横菜单是隐藏的,所以需额外处理横菜单
\r
975 if (source.parent().parent().parent().parent().attr("class").indexOf("page-sidebar-menu") >= 0) {
\r
976 var tiptargetsource = $("#"+source.attr("id"), $("#main_hormenu"));
\r
977 var tiptargetContainer = $(".header ul");
\r
978 tiptargetContainer.children('li.active').removeClass('active');
\r
979 tiptargetContainer.find('.arrow.open').removeClass('open');
\r
980 tiptargetsource.parents('li').each(function () {
\r
981 $(this).addClass('iframe active');
\r
982 $(this).find('a > span.arrow').addClass('open');
\r
984 tiptargetsource.parents('li').addClass('active');
\r
986 return [targetContainer ,targetsource ];
\r
988 var dealFMenuRelated = function(source , siderDivId ){
\r
989 var fsiderMenu = $("#" + siderDivId);
\r
990 if(isMoreMenuItemClick){//更多菜单点击 , 临时方案,增加信号量,使用之后就置为false
\r
991 isMoreMenuItemClick = false
\r
992 }else if($(source).parents('li').hasClass('mega-menu-dropdown')){//F的横向菜单的点击
\r
993 var id = source.attr('id');
\r
994 //非被点击的一级菜单的二级菜单都不显示
\r
995 $('#' + siderDivId + '>li').hide();
\r
996 var level2Lis = $("a[hparentid= " + id + "]" , fsiderMenu).parent();
\r
998 if(level2Lis.length > 0){//把竖向菜单的收起放大按钮显示出来
\r
999 $('#' + siderDivId + '>li.sidebar-toggler-wrapper').show();
\r
1001 if($("a[hparentid= " + id + "]" , fsiderMenu).length > 0){ //有子孙菜单时,把F菜单的竖菜单显示出来
\r
1002 dealFSidermenu(source ,siderDivId );
\r
1004 fsiderMenu.css('display','none');
\r
1005 $("body").addClass("page-full-width");
\r
1006 $(".page-content").css("marginLeft", _sidebarWidth);
\r
1009 }else{//F菜单的竖向菜单点击
\r
1010 //处理一种特殊情况,告警灯打开新页面,所有的菜单都不出现,因此,虽然这个source在竖菜单,但竖菜单这个时候实际上是没有显示的
\r
1011 if( openoFrameWork_showNav == "true") {
\r
1012 $('#' + siderDivId + '>li').hide();
\r
1013 var lis = $(source).parents('li');
\r
1014 var id = lis.eq(lis.length-1).children( 'a' ).attr('hparentid');
\r
1015 //var id = $(source).parents('li').children('a').attr('hparentId');
\r
1016 var level2Lis = $("a[hparentid=" + id + "]" , fsiderMenu).parent();
\r
1018 if(level2Lis.length > 0) {//把竖向菜单的收起放大按钮显示出来
\r
1019 $('#'+ siderDivId + '>li.sidebar-toggler-wrapper').show();
\r
1021 //$('#' + siderDivId + '>li')[0].show();
\r
1022 dealFSidermenu(source , siderDivId);
\r
1026 var dealFSidermenu = function(source , siderDivId){
\r
1027 var fsiderMenu = $("#" + siderDivId);
\r
1028 fsiderMenu.css('display','block');
\r
1029 $('ul.sub-menu',fsiderMenu).css('display','block');
\r
1030 $('.arrow',fsiderMenu).addClass('open');
\r
1031 $("body").removeClass("page-full-width");
\r
1032 if ($('body').hasClass("page-sidebar-closed")) {
\r
1033 $(".page-content").css("marginLeft", _sidebarCollapsedWidth);
\r
1035 $(".page-content").css("marginLeft", _sidebarWidth);
\r
1037 var href = source.attr("href");
\r
1038 $('li.iframe' ,fsiderMenu ).removeClass('active');
\r
1039 var selectedIframeLi = $("a[href ='" + href + "']" ,fsiderMenu ).parent();
\r
1040 selectedIframeLi.addClass('active');
\r
1041 selectedIframeLi.parent().parent().addClass("open").addClass("active");
\r
1042 selectedIframeLi.parent().css('display','block');
\r
1043 selectedIframeLi.parent().parent().children('a').children('.arrow').addClass('open');
\r
1045 var dealMenuItemClick=function(source,e,menuContainerStr){
\r
1046 var url = source.attr("href");
\r
1047 if(!url||url.length<2)
\r
1049 e.preventDefault();
\r
1050 if(!_isClicked){//导航情况下,首先要模拟点开菜单分组
\r
1051 _isClicked=true;//如果菜单有子菜单点击一次来展开子菜单,注意这个信号量的变化,避免死循环
\r
1052 var mainMenu=source.parents('li').last();
\r
1053 if(!mainMenu.hasClass('open')){
\r
1054 dealLiAClick(mainMenu.children('a:eq(0)'));
\r
1057 if(menuContainerStr&&menuContainerStr.length>0){
\r
1058 var menuContainer = $('.'+menuContainerStr+' ul');
\r
1060 menuContainer.children('li.active').removeClass('active');
\r
1061 // menuContainer.children('arrow.open').removeClass('open');
\r
1062 //menuContainer.find('.arrow.open').addClass('open');
\r
1064 source.parents('li').each(function () {
\r
1065 $(this).addClass('iframe active');
\r
1066 $(this).children('a > span.arrow').addClass('open');
\r
1068 source.parents('li').addClass('active');
\r
1069 // 处理点击菜单对应的横或左菜单项的选择样式
\r
1070 dealRelateMenu(source);
\r
1071 if(menuContainerStr&&menuContainerStr.length>0){
\r
1072 if ($(window).width() <= 991 && $('.'+menuContainerStr).hasClass("in")) {
\r
1073 $('.navbar-toggle').click();
\r
1076 if(dealMultTabPage(source))
\r
1079 var breadmenuID=e.data&&e.data.breadcrumbBtnMenuItem&&e.data.breadcrumbBtnMenuItem.length>0?e.data.breadcrumbBtnMenuItem:"";
\r
1080 if(breadmenuID.length>0){//面包削导航来的,只需要重新生成面包削即可
\r
1082 var moreMenuItem = $('#' + breadmenuID , $('#pageableDiv'));
\r
1083 if( moreMenuItem.length == 0 ){
\r
1084 moreMenuItem = $('#' + breadmenuID , $('.more-botton-zone'));
\r
1086 dealBreadcrumbBtnMenuItemClick(moreMenuItem,e);
\r
1087 //dealBreadcrumb(source,false,e);
\r
1089 dealstartPageLoading();
\r
1090 if(dealIframe(source,e))//当返回true时说明是正常加载iframe了,否则面包削不能切换
\r
1091 dealBreadcrumb(source,false,e);
\r
1095 var dealMenuItemGetFocus=function(source,e,menuContainerStr){
\r
1096 var url = source.attr("href");
\r
1097 if(!url||url.length<2)
\r
1099 e.preventDefault();
\r
1100 if(!_isClicked){//导航情况下,首先要模拟点开菜单分组
\r
1101 _isClicked=true;//如果菜单有子菜单点击一次来展开子菜单,注意这个信号量的变化,避免死循环
\r
1102 var mainMenu=source.parents('li').last();
\r
1103 dealLiAClick(mainMenu.children('a:eq(0)'));
\r
1105 if(menuContainerStr&&menuContainerStr.length>0){
\r
1106 var menuContainer = $('.'+menuContainerStr+' ul');
\r
1108 menuContainer.children('li.active').removeClass('active');
\r
1109 menuContainer.children('arrow.open').removeClass('open');
\r
1111 source.parents('li').each(function () {
\r
1112 $(this).addClass('iframe active');
\r
1113 $(this).children('a > span.arrow').addClass('open');
\r
1115 source.parents('li').addClass('active');
\r
1117 if(menuContainerStr&&menuContainerStr.length>0){
\r
1118 if ($(window).width() <= 991 && $('.'+menuContainerStr).hasClass("in")) {
\r
1119 $('.navbar-toggle').click();
\r
1123 //处理iframe的核心处理类,逻辑较为复杂,注意各种参数的处理
\r
1124 var dealIframe=function(aObject,e){
\r
1126 var url = aObject.attr("href");
\r
1127 if(!url||url.length<2)
\r
1129 url=openoFrameWork.handlBaseURL(url);
\r
1130 //-----------2015年9月21日新增V5中大O需要的按照实例(根据选择的系统实例变化url的ip和端口地址)进行动态切换菜单的功能
\r
1131 var category= aObject.attr("category");//处理菜单中定义的Category属性
\r
1132 if(category&&category.length>0){//处理Category属性
\r
1133 var newIpPort=_menuCategorys.items(category);
\r
1134 if(newIpPort&&newIpPort.ipPort&&newIpPort.ipPort.trim()!=""){//如果找到了
\r
1135 var newIpPortstr=openoFrameWork.getDomainURL(newIpPort.ipPort);//去掉ip和port后多余的部分
\r
1136 var urlipport=openoFrameWork.getDomainURL(url);
\r
1137 console.log("old url:"+url);
\r
1138 url=newIpPortstr+url.replace(urlipport,"");
\r
1139 console.log("newIpPort:"+newIpPortstr+" newURL:"+url);
\r
1143 dealstartPageLoading();
\r
1144 var cacheNum= aObject.attr("cacheNum");//当第三方应用需要框架缓存曾经打开过的页面时使用。
\r
1145 var shiftJS= aObject.attr("shiftJS");//当第三方应用不需要后面的href页面进行重新加载仅仅执行某个脚本打开某个功能时使用
\r
1146 var _iframeName= aObject.attr("iframeName");//对有些第三方应用设置了顶层frame名字的,这个必须设置
\r
1147 var _iframeAutoScroll= aObject.attr("iframeAutoScroll");//设置iframe的滚动条是否出现,可以设置为auto,yes或者no,默认为no 不出现.
\r
1148 _iframeAutoScroll=!!_iframeAutoScroll?(_iframeAutoScroll==='yes'?'yes':_iframeAutoScroll==='auto'?'auto':'no'):'no';
\r
1149 _xdomain= aObject.attr("xdomain");//对有些第三方应用如果跨域了,需要设置这个信任域属性,以便于来跨域通讯.这里取值是一个正则表达式
\r
1150 _xdomain=_xdomain&&_xdomain.length>0?_xdomain:"*";
\r
1151 var _cssfile= aObject.attr("cssSrc");//设置iframe中页面需要动态加载的css文件.
\r
1152 _cssfile=(_cssfile&&_cssfile.length>0)?_cssfile:"";
\r
1153 var _runShiftJS="";
\r
1154 var pageContentBody=$('.page-content .page-content-body');
\r
1156 var tabContentHtml="";
\r
1158 var tabContentID="";
\r
1159 var iframename='';
\r
1160 function createIframe(pdiv,url,id,name,clsname,xdom,autoScroll){
\r
1161 var pymParent = new pym.Parent(pdiv, url, {xdomain:xdom});
\r
1162 pymParent.iframe.id=id;
\r
1163 pymParent.iframe.name=name;
\r
1164 //pymParent.iframe.setAttribute('display', "none");
\r
1165 //pymParent.iframe.style.height="100%";
\r
1166 //pymParent.iframe.setAttribute('height', "100%");
\r
1167 pymParent.iframe.setAttribute('class', clsname);
\r
1168 pymParent.iframe.setAttribute('allowfullscreen','');
\r
1169 pymParent.iframe.setAttribute('mozallowfullscreen','');
\r
1170 pymParent.iframe.setAttribute('oallowfullscreen','');
\r
1171 pymParent.iframe.setAttribute('msallowfullscreen','');
\r
1172 pymParent.iframe.setAttribute('webkitallowfullscreen','');
\r
1173 //pymParent.iframe.setAttribute('scrolling',autoScroll);
\r
1174 pymParent.iframe.setAttribute('onload', 'openoFrameWork.SyncCSS(this,0,"'+_cssfile+'");openoFrameWork.stopPageLoading();');
\r
1175 cachedIframesObject.replace(id,pymParent);//缓存iframe对象实体
\r
1176 pymParent.onMessage('height', function(he){
\r
1177 console.log("The frame "+id+" receive message height is "+he);
\r
1178 var pagemyIframe=$('.page-content .page-content-body .'+id);
\r
1179 var h=Math.max(this.minHeight,he);
\r
1180 pagemyIframe.height(h);
\r
1185 if(cacheNum){//处理缓存iframe和iframename标签
\r
1186 cacheNum="page-mainIframe"+cacheNum;
\r
1187 iframename="fraMain"+cacheNum;
\r
1189 cacheNum="page-mainIframe";
\r
1190 iframename="fraMain";
\r
1192 iframename=!!_iframeName?_iframeName:iframename;
\r
1193 _iframe= cacheNum;//注意这里_iframe是一个全局变量
\r
1195 var miframe=_iframe==""?"page-mainIframe": _iframe;
\r
1196 var pagemyIframe=$('.page-content .page-content-body .'+miframe);
\r
1197 var nagivJS=e&&e.data&&e.data.action?e.data.action:"";
\r
1198 nagivJS=(!!nagivJS&&nagivJS.length>0)?(nagivJS.trim().toLowerCase()=="null"?nagivJS:"javascript:$('.page-content .page-content-body ."+miframe+"')[0].contentWindow."+nagivJS.trim()+";"):"";
\r
1199 nagivJS=nagivJS.trim();
\r
1201 _runShiftJS=(!!shiftJS&&shiftJS.length>0)?(shiftJS.trim().toLowerCase()=="null"?shiftJS:"javascript:$('.page-content .page-content-body ."+miframe+"')[0].contentWindow."+shiftJS+";"):"";
\r
1202 if(pagemyIframe&&pagemyIframe.length>0){//如果iframe已经添加了,则直接更改url或者执行切换或导航函数
\r
1203 var src=pagemyIframe.attr("src");
\r
1204 if((!!shiftJS||nagivJS.length>0)&&(src==url||src.split('?')[0]==url.split('?')[0])&& cacheNum!="page-mainIframe") { //url相同时,处理缓存shiftJS标签
\r
1205 //这里shiftJS必须定义iframe中的页面定义到window上的函数;
\r
1206 //pagemyIframe.attr("scrolling",_iframeAutoScroll);
\r
1207 cachedIframesObject.items(miframe).settings.xdomain=_xdomain;
\r
1208 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null")
\r
1209 _runShiftJS=nagivJS;//如果是nagivJS导航过来的,nagivJS优先级高于shiftJS,如果有nagivJS就用nagivJS替换_runShiftJS; 直接执行一次导航切换
\r
1211 if(_runShiftJS.trim().toLowerCase()!="null")
\r
1212 eval(_runShiftJS);
\r
1214 if (e instanceof EvalError) {
\r
1215 console.log(e.name + " EvalError: " + e.message);
\r
1216 } else if (e instanceof SyntaxError) {
\r
1217 console.log(e.name + " SyntaxError: " + e.message);
\r
1218 }else if (e instanceof Error) {
\r
1219 if(e.name.toLowerCase().trim()=="typeerror")
\r
1221 //console.log($.i18n.prop('com_zte_ums_ict_framework_ui_clickTooFast'));
\r
1222 var parm={runShiftJS:_runShiftJS};
\r
1223 pagemyIframe.one('load',parm,function(e){
\r
1224 var runShiftJS=e&&e.data&&e.data.runShiftJS?e.data.runShiftJS:"";
\r
1225 if(runShiftJS.length>0&&runShiftJS.toLowerCase()!="null")
\r
1226 eval(runShiftJS);//点击太快了,页面没有加载完毕,那就加载完毕了再次执行
\r
1230 return false;//返回false 后续不再做其他动作了
\r
1233 openoFrameWork.stopPageLoading();
\r
1235 }else{//否则url不同,或者url相同但没有shiftjs
\r
1236 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null"){//如果是代码导航过来的去掉url参数中的默认action动作
\r
1237 url=url.split('?')[0];//去掉?参数,防止默认执行动作,只响应nagivJS指定的动作;
\r
1239 if(src.split('#')[0]!=url.split('#')[0])//如果相等说明是通过锚点导航的,真实url没有变化,对SPA应用比较普遍
\r
1241 pagemyIframe.attr("src","");//url和src不同说明更换了页面,需要清空重新加载
\r
1242 }else //if (src.trim()==url.trim()) //没有shiftjs并且url相同,说明不需要再次加载了,已经加载过了
\r
1244 openoFrameWork.stopPageLoading();
\r
1246 pagemyIframe.attr("src",url);
\r
1248 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null"){//如果是nagivJS导航过来的,iframe加载完毕后执行一次导航切换脚本
\r
1249 var parm={nagivJS:nagivJS};
\r
1250 pagemyIframe.one('load',parm,function(e){
\r
1251 var nagivJS=e&&e.data&&e.data.nagivJS?e.data.nagivJS:"";
\r
1252 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null")
\r
1253 eval(nagivJS);//如果没有加载过,加载后也要执行跳转的函数
\r
1256 if(_cssfile.length>0&&_cssfile.toLowerCase()!="null"){//如果配置了cssSrc,每次切换都重新执行一边这个css文件,防止有遗漏
\r
1257 parm={syncCSSJS:'openoFrameWork.SyncCSS(this,10,"'+_cssfile+'");openoFrameWork.stopPageLoading();'};
\r
1258 pagemyIframe.one('load',parm,function(e){
\r
1259 var syncCSSJS=e&&e.data&&e.data.syncCSSJS?e.data.syncCSSJS:"";
\r
1260 if(syncCSSJS.length>0&&syncCSSJS.toLowerCase()!="null")
\r
1266 }else{//否则添加新的iframe元素 overflow:visible;
\r
1267 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null"){//如果是代码导航过来的去掉url参数中的默认action动作
\r
1268 url=url.split('?')[0];//去掉?参数,防止默认执行动作,只响应nagivJS指定的动作;
\r
1270 var pdiv="pdiv_"+miframe;
\r
1271 if($("#"+pdiv).length<=0){//检查下,如果该div没有添加过就添加
\r
1272 pageContentBody.append("<div id='"+pdiv+"' style='height:800px;overflow:auto'></div>");
\r
1274 dealstartPageLoading();
\r
1275 pymParent=createIframe(pdiv, url,miframe,miframe,miframe,_xdomain,_iframeAutoScroll);
\r
1276 pagemyIframe=$(pymParent.iframe);
\r
1278 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null"){//如果是nagivJS导航过来的,iframe加载完毕后执行一次导航切换
\r
1279 var parm={nagivJS:nagivJS};
\r
1280 pagemyIframe=$('.page-content .page-content-body .'+miframe);
\r
1281 if(pagemyIframe&&pagemyIframe.length>0){
\r
1282 pagemyIframe.one('load',parm,function(e){
\r
1283 var nagivJS=e&&e.data&&e.data.nagivJS?e.data.nagivJS:"";
\r
1284 if(nagivJS.length>0&&nagivJS.toLowerCase()!="null")
\r
1285 eval(nagivJS);//如果没有加载过,加载后也要执行跳转的函数
\r
1291 showIframe(miframe);
\r
1292 openoFrameWork.fixContentHeight(); // 调整高度
\r
1296 var dealLiAClick=function(source){
\r
1297 if (source.next().hasClass('sub-menu') == false) {
\r
1298 if ($('.btn-navbar').hasClass('collapsed') == false) {
\r
1299 $('.btn-navbar').click();
\r
1304 if (source.next().hasClass('sub-menu always-open')) {
\r
1307 var parent = source.parent().parent();
\r
1309 var menu = $('.page-sidebar-menu');
\r
1310 var sub = source.next();
\r
1311 var autoScroll = menu.data("auto-scroll") ? menu.data("auto-scroll") : true;
\r
1312 var slideSpeed = menu.data("slide-speed") ? parseInt(menu.data("slide-speed")) : 200;
\r
1313 parent.children('li.open').children('a').children('.arrow').removeClass('open');
\r
1314 parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(200);
\r
1315 parent.children('li.open').removeClass('open');
\r
1316 var slideOffeset = -200;
\r
1317 if (sub.is(":visible")) {
\r
1318 $('.arrow', source).removeClass("open");
\r
1319 source.parent().removeClass("open");
\r
1320 sub.slideUp(slideSpeed, function () {
\r
1321 if (autoScroll == true && $('body').hasClass('page-sidebar-closed') == false) {
\r
1322 if ($('body').hasClass('page-sidebar-fixed')) {
\r
1325 dealScrollTo(the, slideOffeset);
\r
1328 dealSidebarAndContentHeight();
\r
1331 $('.arrow', source).addClass("open");
\r
1332 source.parent().addClass("open");
\r
1333 sub.slideDown(slideSpeed, function () {
\r
1334 if (autoScroll == true && $('body').hasClass('page-sidebar-closed') == false) {
\r
1335 if ($('body').hasClass('page-sidebar-fixed')) {
\r
1336 dealScrollTo(the, slideOffeset);
\r
1339 dealSidebarAndContentHeight();
\r
1343 var dealSidebarMenu = function () {//这里注册和处理边栏菜单的各类点击事件
\r
1344 $('.page-sidebar').on('click', 'li > a', function (e) {
\r
1345 if ($(this).next().hasClass('sub-menu') == false) {
\r
1346 if ($('.btn-navbar').hasClass('collapsed') == false) {
\r
1347 $('.btn-navbar').click();
\r
1351 if ($(this).next().hasClass('sub-menu always-open')) {
\r
1354 dealLiAClick($(this));
\r
1355 e.preventDefault();
\r
1358 // 处理左边导航中的菜单连接,显示在iframe中
\r
1359 $('.page-sidebar').on('click', ' li > a.iframe', function (e) {
\r
1360 //dealMenuItemClick($(this),e,"page-sidebar")
\r
1361 e.preventDefault();
\r
1362 var menuItemID=$(this).attr("id");
\r
1363 if(!!menuItemID&&menuItemID.length>0){
\r
1364 _setLocationHash(menuItemID);
\r
1365 _hashSource="dhByInterface";
\r
1368 dealMenuItemClick($(this),e,"page-sidebar");
\r
1371 // 处理更多菜单的菜单连接,显示在iframe中dropdown-menu
\r
1372 $('.page-breadcrumb').on('click', ' li > a.iframe', function (e) {
\r
1373 var url = $(this).attr("href");
\r
1376 e.preventDefault();
\r
1377 dealBreadcrumbBtnMenuItemClick($(this),e);
\r
1379 // 处理可翻页更多菜单中的菜单连接,显示在iframe中dropdown-menu
\r
1380 $('#pageableDiv').on('click', ' div > a.iframe', function (e) {
\r
1381 var url = $(this).attr("href");
\r
1384 e.preventDefault();
\r
1385 dealBreadcrumbBtnMenuItemClick($(this),e);
\r
1387 // 处理可翻页更多菜单中的菜单连接,显示在iframe中dropdown-menu
\r
1388 $('#pageableDiv').on('click', ' li > a.iframe', function (e) {
\r
1389 var url = $(this).attr("href");
\r
1392 e.preventDefault();
\r
1394 var tg=$("span",e.target);
\r
1395 tg=tg.length>0?tg[0]:e.target;
\r
1396 $(".open a>div>span",e.target.parentNode.parentNode.parentNode.parentNode.parentNode).replaceWith(tg.outerHTML);
\r
1398 dealBreadcrumbBtnMenuItemClick($(this),e);
\r
1401 // 处理header下拉菜单中的菜单连接,显示在iframe中
\r
1402 $('.dropdown').on('click', ' li > a.iframe', function (e) {
\r
1403 var url = $(this).attr("href");
\r
1406 e.preventDefault();
\r
1408 dealstartPageLoading();
\r
1410 dealIframe($(this),e)
\r
1411 dealBreadcrumb($(this),false,e);
\r
1414 var getSceneURL=function(url){
\r
1415 if(url&&url.trim().length>0){
\r
1418 _sceneURLRootPath=_sceneURLRootPath+url;
\r
1421 var gurl="";//临时全局变量,存储当前加载的more菜单,如果加载过了,就不再加载了。下面的方法中会用到
\r
1422 var moreMenusisLoaded=true;
\r
1423 var waittime=null;
\r
1424 var getBreadcrumbRightButtons=function(url,e){
\r
1425 if (url.length<2){
\r
1428 url=openoFrameWork.handlBaseURL(url);
\r
1431 $('#pageableDiv').show();
\r
1432 }else if(e&&e.target&&e.currentTarget){
\r
1433 var defaultDisplay=$(e.target).attr("defaultDisplay");
\r
1434 defaultDisplay=(!defaultDisplay)?$(e.currentTarget).attr("defaultDisplay"):defaultDisplay;
\r
1435 if(defaultDisplay&&defaultDisplay.trim()=="false"){
\r
1436 $('#pageableDiv').hide();
\r
1438 $('#pageableDiv').show();
\r
1445 clearMoreOperations();
\r
1447 //处理e参数,注意e可能为null
\r
1448 var breadmenuID=e&&e.data&&e.data.breadcrumbBtnMenuItem&&e.data.breadcrumbBtnMenuItem.length>0?e.data.breadcrumbBtnMenuItem:"";
\r
1449 breadmenuID=breadmenuID.length<=0?(e&&e.breadcrumbBtnMenuItem&&e.breadcrumbBtnMenuItem.length>0?e.breadcrumbBtnMenuItem:""):breadmenuID;
\r
1450 moreMenusisLoaded=false;
\r
1455 dataType: "html",
\r
1456 success: function (res) {
\r
1458 //$('.page-breadcrumb').append(res);
\r
1459 var resScriptsSriped = stripHtmlScripts(res);
\r
1460 //$('.page-breadcrumb').append(resScriptsSriped);
\r
1461 $('.more-botton-zone').children().remove();
\r
1462 //V5新增逻辑,如果displayType = pageableDiv,那么就用滑动的DIV来显示更多菜单里面的内容,如果没有配置,或为其他值,就按原有方式显示
\r
1463 var tempDiv = $('<div style="display:none"></div>');
\r
1464 tempDiv.children().remove();
\r
1465 tempDiv.append(resScriptsSriped);
\r
1468 var displayType = $('.dropdown-menu',tempDiv).attr('displayType');
\r
1469 if( displayType && displayType != 'pageableDiv'){
\r
1470 $('.more-botton-zone').append(resScriptsSriped);
\r
1471 $('#pageableDiv').hide();
\r
1473 var tempUl = $('.dropdown-menu',tempDiv);
\r
1474 if(tempUl.length>0){
\r
1475 moreOperations(tempUl[0]);
\r
1476 if(e&&e.target&&e.currentTarget){
\r
1477 var defaultDisplay=$(e.target).attr("defaultDisplay");
\r
1478 defaultDisplay=(!defaultDisplay)?$(e.currentTarget).attr("defaultDisplay"):defaultDisplay;
\r
1479 if(defaultDisplay&&defaultDisplay.trim()=="false"){
\r
1480 $('#pageableDiv').hide();
\r
1482 $('#pageableDiv').show();
\r
1487 runHtmlScripts(res);
\r
1490 moreMenusisLoaded=true;
\r
1492 groupButtonAuthentication();
\r
1493 if(breadmenuID.length>0){//面包削导航来的,只需要重新生成面包削即可
\r
1494 var menuitem=undefined;
\r
1495 var panel = $('.zte-theme-panel');
\r
1496 var navPosOption = $('.nav-pos-direction', panel).val();
\r
1497 //var items=$("a[id='"+breadmenuID+"']");
\r
1498 var items = undefined;
\r
1499 if (navPosOption === "vertical"){ //从垂直菜单里面找
\r
1500 items=$("#page-sidebar-menu a[id='"+breadmenuID+"']");
\r
1503 items=$(".hor-menu a[id='"+breadmenuID+"']");
\r
1505 if (!items || items.length < 1) {
\r
1506 items=$(".page-content a[id='"+breadmenuID+"']");
\r
1508 if(items.length>0){
\r
1509 for(var i=0;i<items.length;i++){
\r
1510 if($(items[i]).parentsUntil('.more-botton-zone .btn-group').hasClass('dropdown-menu')){
\r
1511 menuitem=$(items[i]);
\r
1514 if($(items[i]).parentsUntil('#pageableDiv').hasClass('row1')){
\r
1515 menuitem=$(items[i]);
\r
1520 if(!!menuitem&&menuitem.length>0)
\r
1521 dealBreadcrumbBtnMenuItemClick(menuitem,e);
\r
1524 error: function (xhr, ajaxOptions, thrownError) {//加载操作菜单失败!com_zte_ums_ict_framework_ui_loadmenuerror
\r
1525 $('.page-breadcrumb').append('<h4>'+$.i18n.prop('com_zte_ums_ict_framework_ui_loadmenuerror')+'</h4>');
\r
1526 moreMenusisLoaded=true;
\r
1531 //处理多tab也场景 ----redirect 该标签暂时保留,不建议使用了
\r
1532 dealMultTabPage=function(clickedObject){
\r
1533 var url = clickedObject.attr("href");
\r
1534 if(!url||url.length<2)
\r
1536 var redirect=clickedObject.attr("redirect"); //处理多tab页面的需求
\r
1537 if (!!redirect&&redirect.length>0){
\r
1538 var miframe=_iframe==""?"page-mainIframe": _iframe;
\r
1539 var pagemyIframe=$('.page-content .page-content-body .'+miframe); //.page-mainIframe
\r
1540 //var pagemyIframe=$('.page-content .page-content-body .page-mainIframe');
\r
1542 if(pagemyIframe&&pagemyIframe.length>0){
\r
1543 oldhref=pagemyIframe.attr("src");
\r
1544 if(url.split("?")[0]==oldhref.split("?")[0])
\r
1547 dealBreadcrumb(clickedObject,false,e);
\r
1555 var globleCurrentBreadcrumb="";
\r
1556 var globleCurrentMainMenuItemID="";
\r
1557 var dhByBreadcrumb = false;
\r
1558 var dealBreadcrumb=function(clickedObject,notGenUID,e){//notGenUID为true就不重新生成id
\r
1559 var mbreadcrumb=$('.breadcrumbUl');
\r
1560 openoFrameWork.setPageTitle(clickedObject.find('span').text().trim());
\r
1561 var clieckedObj= clickedObject.parent('li');
\r
1562 if(clieckedObj.length == 0){ //分页式更多菜单,a链接的父亲是div
\r
1563 clieckedObj= clickedObject.parent('div');
\r
1565 //如果点击的是F菜单的竖菜单,还需要找到横菜单上的对应父亲加入到clieckedObj
\r
1566 var navPosOption = $('.nav-pos-direction', panel).val();
\r
1567 var parentid = clickedObject.attr('hparentid');
\r
1568 var breadcrumGroupButtonSrc=clickedObject.attr("breadcrumGroupButtonSrc");
\r
1569 globleCurrentMainMenuItemID=clickedObject.attr("id");
\r
1573 //var breadChangeType = e? (e.data ? e.data.breadChangeType:null):null;
\r
1574 if( dhByBreadcrumb ){
\r
1575 mhmtl = dealClickBreadcrumb(clieckedObj);
\r
1576 dhByBreadcrumb = "";
\r
1578 while (clieckedObj&&clieckedObj.length>0){
\r
1579 if(clieckedObj.children('a')){
\r
1581 url=openoFrameWork.getUniqueID("aid");//+Math.floor(Math.random() * (new Date()).getTime());
\r
1582 clieckedObj.children('a').attr("name",url);
\r
1584 url=clieckedObj.children('a').attr("name");
\r
1586 tempObj=clieckedObj.clone();
\r
1587 tempObj.children('a').removeClass('iframe');
\r
1588 tempObj.children('a').removeClass('active');
\r
1589 tempObj.children('a').attr("href","javascript:openoFrameWork.goToURL('"+url+"');");
\r
1590 var arrowdown = $(".fa-angle-down", tempObj.children('a'));
\r
1592 arrowdown.remove();
\r
1594 if(tempObj.children('a').length>0){
\r
1595 mhmtl=tempObj.children('a')[0].outerHTML+"<i class='fa fa-angle-right'></i>"+mhmtl;
\r
1597 //如果是F菜单和横菜单的子竖菜单点击,需要做特殊处理
\r
1598 if( clieckedObj.parent('ul').attr('id') == fMenuSiderDivId || clieckedObj.parent('ul').attr('id') == megaSiderDivId){
\r
1599 var id = clieckedObj.children( 'a' ).attr('hparentid');
\r
1601 var megaMenu = null;
\r
1602 if(navPosOption == openoFrameWork_menu_horizontal){
\r
1603 magaMenu = $('#'+megaDivId);
\r
1604 }else if(navPosOption == openoFrameWork_menu_fmenu){
\r
1605 magaMenu = $('#'+fMenuMegaDivId);
\r
1607 clieckedObj = $("a[id=" + id + "]" , magaMenu).parent('li');
\r
1609 clieckedObj=clieckedObj.parents('li');
\r
1613 if(clieckedObj[0]&&clieckedObj[0].length>0) {
\r
1614 mhmtl=clieckedObj.children('a')[0].outerHTML+"<i class='fa fa-angle-right'></i>"+mhmtl;
\r
1617 mbreadcrumb.empty();
\r
1618 $('.more-botton-zone').empty();
\r
1619 globleCurrentBreadcrumb=mhmtl;
\r
1620 store("globleCurrentBreadcrumb",globleCurrentBreadcrumb);
\r
1621 mbreadcrumb.append(mhmtl);
\r
1622 if(breadcrumGroupButtonSrc&&breadcrumGroupButtonSrc.length>0){
\r
1623 getBreadcrumbRightButtons(breadcrumGroupButtonSrc,e);
\r
1625 $('#pageableDiv').hide();
\r
1629 //面包屑发起的点击,就不重新生成面包屑,只是把该面包屑的后续节点移出。
\r
1630 var dealClickBreadcrumb = function(clieckedObj){
\r
1631 var index = globleCurrentBreadcrumb.indexOf(clieckedObj.children('a').attr("name"));
\r
1632 if( index > -1 ){//截取
\r
1633 var indexofSign = globleCurrentBreadcrumb.indexOf("<i class='fa fa-angle-right'>",index);
\r
1634 var newBreadcrumb = globleCurrentBreadcrumb.substring(0,indexofSign) + "<i class='fa fa-angle-right'></i>";
\r
1635 return newBreadcrumb;
\r
1638 //处理面包削中菜单点击后的导航(更多菜单的面包屑)
\r
1639 var dealBreadcrumbBtnGroupMenus=function(clickedObject,notGenUID , e ){
\r
1640 var mbreadcrumb=$('.breadcrumbUl');
\r
1641 var clieckedObj= clickedObject.parent();
\r
1642 var breadcrumGroupButtonSrc=clickedObject.attr("breadcrumGroupButtonSrc");
\r
1646 var menuid=clickedObject.attr("id");
\r
1647 if (!breadcrumbBtnMenus.contains(menuid)) {//把当前面包削中的菜单id和该子菜单对应的父菜单关联缓存起来
\r
1648 breadcrumbBtnMenus.add(menuid,globleCurrentMainMenuItemID);
\r
1650 while (clieckedObj&&clieckedObj.length>0){
\r
1651 tempObj=clieckedObj.clone();
\r
1652 if(tempObj.children('a')){
\r
1653 tempObj.children('a').removeClass('iframe');
\r
1654 url=tempObj.children('a').attr("href");
\r
1655 tempObj.children('a').attr("onclick","openoFrameWork.openbreadcrumbLink($(this),event);");
\r
1656 var tempdiv = tempObj.children('a').children('div');
\r
1657 if( tempdiv.length > 0 ){
\r
1658 var innerofDiv = tempdiv[0].innerHTML;
\r
1660 tempObj.children('a')[0].innerHTML = innerofDiv;
\r
1662 if(tempObj.children('a').length>0){
\r
1663 mhmtl=tempObj.children('a')[0].outerHTML+"<i class='fa fa-angle-right'></i>"+mhmtl;
\r
1665 clieckedObj=clieckedObj.parents('li');
\r
1669 if(clieckedObj[0]&&clieckedObj[0].length>0) {
\r
1670 mhmtl=clieckedObj.children('a')[0].outerHTML+"<i class='fa fa-angle-right'></i>"+mhmtl;
\r
1673 if(breadcrumGroupButtonSrc&&breadcrumGroupButtonSrc.length>0){
\r
1674 getBreadcrumbRightButtons(breadcrumGroupButtonSrc,true);
\r
1676 $('#pageableDiv').hide();
\r
1678 mbreadcrumb.empty();
\r
1679 var category= clickedObject.attr("category");//处理菜单中定义的Category属性
\r
1680 if(category&&category.length>0){//处理Category属性
\r
1681 var newIpPort=_menuCategorys.items(category);
\r
1682 if(newIpPort&&newIpPort.ipTitle&&newIpPort.ipTitle.trim()!=""){//如果找到了
\r
1683 mhmtl=newIpPort.ipTitle+'<i class="fa fa-angle-right"></i>'+mhmtl;
\r
1686 mhmtl=globleCurrentBreadcrumb+mhmtl;
\r
1687 mbreadcrumb.append(mhmtl);
\r
1689 var isMoreMenuItemClick = false;
\r
1690 var dealBreadcrumbBtnMenuItemClick=function(clickObj,e){
\r
1692 var menuItemID=clickObj.attr("id");
\r
1693 if(!!menuItemID&&menuItemID.length>0){
\r
1694 _setLocationHash(menuItemID);
\r
1695 var breadmenuID=e&&e.data&&e.data.breadcrumbBtnMenuItem&&e.data.breadcrumbBtnMenuItem.length>0?e.data.breadcrumbBtnMenuItem:"";
\r
1696 _hashSource=breadmenuID&&breadmenuID.length>0?"":"dhByInterface";//hash进来的,不是导航进来的。
\r
1698 if(!(e&&e.breadcrumbBtnMenuItem&&e.breadcrumbBtnMenuItem.length>0)){//如果仅仅是tab跳转设置bread进来的,就框架不处理菜单点击,直接重新建立bread即可
\r
1699 dealstartPageLoading();
\r
1700 dealIframe(clickObj,e);
\r
1702 dealBreadcrumbBtnGroupMenus(clickObj,false,e);
\r
1705 var _calculateFixedSidebarViewportHeight = function () {
\r
1706 var viewport = _getViewPort();
\r
1707 var sidebarHeight =viewport.height - $('.header').height() + 1;
\r
1708 if ($('body').hasClass("page-footer-fixed")) {
\r
1709 sidebarHeight = sidebarHeight - (!$('.footer')||$('.footer').length<=0)?0:$('.footer').outerHeight();
\r
1711 return sidebarHeight;
\r
1714 var dealFixedSidebar = function () {
\r
1715 var menu = $('.page-sidebar-menu');
\r
1716 if (menu.parent('.slimScrollDiv').size() === 1) {
\r
1717 menu.removeAttr('style');
\r
1718 $('.page-sidebar').removeAttr('style');
\r
1721 if ($('.page-sidebar-fixed').size() === 0) {
\r
1722 dealSidebarAndContentHeight();
\r
1726 var viewport = _getViewPort();
\r
1727 if (viewport.width >= openoFrameWork_smallView) {
\r
1728 var sidebarHeight = _calculateFixedSidebarViewportHeight();
\r
1729 dealSidebarAndContentHeight();
\r
1732 // 固定边栏时处理菜单 hover 效果.
\r
1733 var dealFixedSidebarHoverable = function () {
\r
1734 if ($('body').hasClass('page-sidebar-fixed') === false) {
\r
1737 $('.page-sidebar').off('mouseenter').on('mouseenter', function () {
\r
1738 dealSiderBarMouseenter();
\r
1740 $('.page-sidebar').off('mouseleave').on('mouseleave', function () {
\r
1741 dealSiderBarMouseLeave();
\r
1744 var dealSiderBarMouseenter=function(){
\r
1745 var body = $('body');
\r
1746 var siderbar=$('.page-sidebar');
\r
1747 if ((body.hasClass('page-sidebar-closed') === false || body.hasClass('page-sidebar-fixed') === false) || $(this).hasClass('page-sidebar-hovering')) {
\r
1750 body.removeClass('page-sidebar-closed').addClass('page-sidebar-hover-on');
\r
1751 var siderbartoggle=$('.sidebar-toggler');
\r
1753 if (body.hasClass("page-sidebar-reversed")) {
\r
1754 siderbar.width(_sidebarWidth);
\r
1755 dealSiderBarWidthChange();
\r
1757 siderbar.addClass('page-sidebar-hovering');
\r
1758 siderbar.animate({
\r
1759 width: _sidebarWidth
\r
1760 }, 350, '', function () {
\r
1761 siderbar.removeClass('page-sidebar-hovering');
\r
1762 dealSiderBarWidthChange();
\r
1766 var dealSiderBarMouseLeave=function(){
\r
1767 var body = $('body');
\r
1768 if ((body.hasClass('page-sidebar-hover-on') === false || body.hasClass('page-sidebar-fixed') === false) || $(this).hasClass('page-sidebar-hovering')) {
\r
1771 var siderbar=$('.page-sidebar');
\r
1772 var siderbartoggle=$('.sidebar-toggler');
\r
1773 if (body.hasClass("page-sidebar-reversed")) {
\r
1774 body.addClass('page-sidebar-closed').removeClass('page-sidebar-hover-on');
\r
1775 siderbar.width(_sidebarCollapsedWidth);
\r
1776 if(siderbartoggle){
\r
1777 siderbartoggle.removeAttr('style');
\r
1779 dealSiderBarWidthChange();
\r
1781 siderbar.addClass('page-sidebar-hovering');
\r
1782 siderbar.animate({
\r
1783 width: _sidebarCollapsedWidth
\r
1784 }, 350, '', function () {
\r
1785 body.addClass('page-sidebar-closed').removeClass('page-sidebar-hover-on');
\r
1786 dealSiderBarWidthChange();
\r
1787 siderbar.removeClass('page-sidebar-hovering');
\r
1788 if(siderbartoggle){
\r
1789 siderbartoggle.removeAttr('style');
\r
1796 var dealAddStyle=function(element, property, value, important) {
\r
1797 var styleText=element.attr('style')?element.attr('style'):"";
\r
1798 styles=styleText.split(";");
\r
1800 for(i=0;i<styles.length;i++){
\r
1801 if(styles[i].indexOf(property)>=0){
\r
1802 find=styles[i];//看是否已经添加过,如果添加过就需要替换掉
\r
1806 styleText=find.length>0?styleText.replace(find,""):styleText;
\r
1807 styleText=(styleText + ';'+property + ':' + value + ((important) ? ' !important' : '') + ';').replace(/;;/g,";");
\r
1808 element.attr('style',styleText );
\r
1810 var dealSiderBarWidthChange=function(){
\r
1813 // 处理边栏菜单切换时的关闭和隐藏.
\r
1814 var dealSidebarToggler = function () {
\r
1815 var viewport = _getViewPort();
\r
1816 if (getCookie('sidebar_closed') === '1' && viewport.width >= openoFrameWork_smallView) {
\r
1817 $('body').addClass('page-sidebar-closed');
\r
1819 $('.page-sidebar, .sidebar-toggler').on('click', '.sidebar-toggler', function (e) {
\r
1820 e.preventDefault();
\r
1821 var body = $('body');
\r
1822 var sidebar = $('.page-sidebar');
\r
1823 if(body.hasClass('page-sidebar-closed')){
\r
1824 $(this).removeAttr('style');
\r
1827 $('.page-sidebar, .header').on('click', '.sidebar-toggler', function (e) {
\r
1828 var body = $('body');
\r
1829 var sidebar = $('.page-sidebar');
\r
1830 if ((body.hasClass("page-sidebar-hover-on") && body.hasClass('page-sidebar-fixed')) || sidebar.hasClass('page-sidebar-hovering')) {
\r
1831 body.removeClass('page-sidebar-hover-on');
\r
1832 sidebar.css('width', '').hide().show();
\r
1833 dealSidebarAndContentHeight(); //fix content & sidebar height
\r
1834 setCookie('sidebar_closed', '0');
\r
1835 dealSiderBarWidthChange();
\r
1836 e.stopPropagation();
\r
1837 runResponsiveHandlers();
\r
1840 $(".sidebar-search", sidebar).removeClass("open");
\r
1841 var panel = $('.zte-theme-panel');
\r
1842 var sidebarPosOption = $('.sidebar-pos-option', panel).val();
\r
1843 var pcontent = $("[class='page-content']");
\r
1844 if (body.hasClass("page-sidebar-closed")) {
\r
1845 body.removeClass("page-sidebar-closed");
\r
1846 if (body.hasClass('page-sidebar-fixed')) {
\r
1847 sidebar.css('width', '');
\r
1849 setCookie('sidebar_closed', '0');
\r
1850 pcontent.css("marginLeft",_sidebarWidth);
\r
1851 dealSiderBarWidthChange();
\r
1853 body.addClass("page-sidebar-closed");
\r
1854 $(this).removeAttr('style');
\r
1855 setCookie('sidebar_closed', '1');
\r
1856 pcontent.css("marginLeft", _sidebarCollapsedWidth);
\r
1857 dealSiderBarWidthChange();
\r
1859 //针对侧边栏伸缩的情况需加入对.page-content的判断。
\r
1860 dealSidebarAndContentHeight(true);
\r
1861 runResponsiveHandlers();
\r
1865 var dealHorizontalMenu = function () {
\r
1866 $('.header').on('click', '.hor-menu .hor-menu-search-form-toggler', function (e) {
\r
1867 if ($(this).hasClass('off')) {
\r
1868 $(this).removeClass('off');
\r
1869 $('.header .hor-menu .search-form').hide();
\r
1871 $(this).addClass('off');
\r
1872 $('.header .hor-menu .search-form').show();
\r
1874 e.preventDefault();
\r
1876 // 处理水平菜单 处理header下拉菜单中的菜单连接,显示在iframe中
\r
1877 $('.header').on('click', ' li > a.iframe', function (e) {
\r
1878 //dealMenuItemClick($(this),e,"header");
\r
1879 e.preventDefault();
\r
1880 var menuItemID=$(this).attr("id");
\r
1881 if(!!menuItemID&&menuItemID.length>0){
\r
1882 _setLocationHash(menuItemID);
\r
1883 _hashSource="dhByInterface";
\r
1886 dealMenuItemClick($(this),e,"header");
\r
1890 $('.header').on('click', '.hor-menu a[data-toggle="tab"]', function (e) {
\r
1891 e.preventDefault();
\r
1892 var nav = $(".hor-menu .nav");
\r
1893 var active_link = nav.find('li.current');
\r
1894 $('li.active', active_link).removeClass("active");
\r
1895 $('.selected', active_link).remove();
\r
1896 var new_link = $(this).parents('li').last();
\r
1897 new_link.addClass("current");
\r
1898 new_link.find("a:first").append('<span class="selected"></span>');
\r
1902 var doHeartbeat = function() {
\r
1904 var heartBeatTimes = 0;
\r
1905 return setInterval(function() {
\r
1907 if( userName == null ){
\r
1908 var userName = openoFrameWork_conf.userName;
\r
1910 var heartUrl = FrameConst.REST_HEARTBEAT + "?username=" + encodeURIComponent(userName);
\r
1911 $.ajax(heartUrl, {
\r
1912 dataType : "text",
\r
1914 }).done(function(data) {
\r
1915 // if (data != "true") { //收到不属于取值范围内的回复,说明出现不可预知情况,取消心跳。是原framework.js中的逻辑,比较奇怪,先保留注释。
\r
1916 // disableHeartbeat();
\r
1918 //收到心跳回应消息,心跳超时次数置0
\r
1919 if( data == "true" ){
\r
1920 heartBeatTimes = 0;
\r
1924 //心跳超时6次即1分钟,转到登录界面,认为链路断。
\r
1925 if(heartBeatTimes >= 6){
\r
1926 disableHeartbeat();
\r
1927 //console.log(com_zte_ums_aos_framework_ui_heartbeat_timeout);
\r
1928 bootbox.alert($.i18n.prop('com_zte_ums_aos_framework_ui_heartbeat_fail'), function () {
\r
1929 window.location.replace("login.html");
\r
1934 if( FrameConst.do_heartbeat ){
\r
1935 var heartbeatTimer = doHeartbeat();
\r
1937 window.enableHeartbeat = function() {
\r
1938 if (!heartbeatTimer) {
\r
1939 //重新启动心跳功能,心跳超时次数置0
\r
1940 heartBeatTimes = 0;
\r
1941 heartbeatTimer = doHeartbeat();
\r
1944 return "Already enabled!";
\r
1946 window.disableHeartbeat = function() {
\r
1947 if (heartbeatTimer) {
\r
1948 clearInterval(heartbeatTimer);
\r
1949 heartbeatTimer = null;
\r
1950 return "Disabled";
\r
1952 return "Already disabled!";
\r
1954 window.doLogout = function(){
\r
1958 $('#trigger_logout').click(function(){
\r
1959 bootbox.confirm($.i18n.prop('com_zte_ums_ict_framework_ui_confirmlogout'), function(result) { //你确认要注销吗?
\r
1965 // Handle full screen mode toggle
\r
1966 var isscreenFull=false;
\r
1967 var dealFullScreenMode = function() {
\r
1969 function toggleFullScreen() {
\r
1970 if(!screenfull.supportsFullScreen){//不支持全屏
\r
1971 if (isIE&&typeof window.ActiveXObject !== "undefined") { // Older IE.
\r
1972 var wscript = new ActiveXObject("WScript.Shell");
\r
1973 if (wscript !== null) {
\r
1974 wscript.SendKeys("{F11}");
\r
1975 isscreenFull=!isscreenFull;
\r
1978 isscreenFull=screenfull.supportsFullScreen;
\r
1981 screenfull.isFullScreen?screenfull.exitFullScreen():screenfull.requestFullScreen();
\r
1982 isscreenFull= screenfull.isFullscreen;
\r
1984 setTimeout(function(){
\r
1986 $("#fullscreen_label").text($.i18n.prop('com_zte_ums_ict_framework_ui_group_exitfullscreen'));
\r
1988 $("#fullscreen_label").text($.i18n.prop('com_zte_ums_ict_framework_ui_group_fullscreen'));
\r
1993 $('#trigger_fullscreen').click(function() {
\r
1994 toggleFullScreen();
\r
1997 //清理当前正在显示的iframe之外缓存的iframe,
\r
1998 var dealClearCachedIframes=function(isall){
\r
1999 if (cachedIframes.count()>0) {
\r
2000 for (var i in cachedIframes.hash()) {
\r
2001 var pagemyIframe=$('.page-content .page-content-body .'+i);
\r
2002 if(pagemyIframe&&pagemyIframe.length>0){
\r
2004 pagemyIframe.attr("src","");
\r
2005 pagemyIframe.remove();
\r
2006 }else if(i!=_iframe)
\r
2007 pagemyIframe.attr("src","");
\r
2008 pagemyIframe.remove();
\r
2012 cachedIframes.clear();
\r
2013 if (cachedIframesObject.count()>0) {//清理缓存的iframe实体对象。
\r
2014 for (var i in cachedIframesObject.hash()) {
\r
2016 cachedIframesObject.remove(i);
\r
2020 var lastSelectedLayout = '';
\r
2021 var dealTheme = function () {
\r
2022 var panel = $('.zte-theme-panel');
\r
2023 if ($('body').hasClass('page-boxed') == false) {
\r
2024 $('.layout-option', panel).val("fluid");
\r
2026 $('.sidebar-option', panel).val("default");
\r
2027 $('.language-option', panel).val(defaultLanage);
\r
2028 $('.header-option', panel).val("fixed");
\r
2029 $('.footer-option', panel).val("default");
\r
2030 if ( $('.sidebar-pos-option').attr("disabled") === false) {
\r
2031 $('.sidebar-pos-option', panel).val(openoFrameWork.isRTL() ? 'right' : 'left');
\r
2033 var _resetLayout = function () {
\r
2034 dealResetLayout();
\r
2036 var _setLayout = function () {
\r
2039 var setColor = function (color) {
\r
2040 var color_ = (openoFrameWork.isRTL() ? color + '-rtl' : color);
\r
2041 $('#style_color').attr("href", ICTFRAME_CONST_THEME_COLOR_CSS_PREFFIX + color_ + ".css");
\r
2042 setCookie('style_color', color);
\r
2045 $('.toggler', panel).click(function () {
\r
2046 $('.toggler').hide();
\r
2047 $('.toggler-close').show();
\r
2048 $('.zte-theme-panel > .theme-options').show();
\r
2051 $('.toggler-close', panel).click(function () {
\r
2052 $('.toggler').show();
\r
2053 $('.toggler-close').hide();
\r
2054 $('.zte-theme-panel > .theme-options').hide();
\r
2056 $('.theme-colors > ul > li', panel).click(function () {
\r
2057 var color = $(this).attr("data-style");
\r
2059 $('ul > li', panel).removeClass("current");
\r
2060 $(this).addClass("current");
\r
2062 $('.layout-option,.header-option, .sidebar-option, .footer-option, .sidebar-pos-option, .nav-pos-direction', panel).change(_setLayout);
\r
2063 if (getCookie('style_color') != undefined) {
\r
2064 setColor(getCookie('style_color'));
\r
2066 $('.language-option', panel).change(function(){
\r
2067 var languageOption = $('.language-option', panel).val();
\r
2068 setCookie('language-option', languageOption);
\r
2069 window.location.reload();
\r
2072 var dealResetLayout = function () {
\r
2074 removeClass("page-boxed").
\r
2075 removeClass("page-footer-fixed").
\r
2076 removeClass("page-sidebar-fixed").
\r
2077 removeClass("page-header-fixed").
\r
2078 removeClass("page-sidebar-reversed");
\r
2079 $('.header > .header-inner').removeClass("container");
\r
2080 if ($('.page-container').parent(".container").size() === 1) {
\r
2081 $('.page-container').insertAfter('body > .clearfix');
\r
2083 if ($('.footer > .container').size() === 1) {
\r
2084 $('.footer').html($('.footer > .container').html());
\r
2085 } else if ($('.footer').parent(".container").size() === 1) {
\r
2086 $('.footer').insertAfter('.page-container');
\r
2088 $('body > .container').remove();
\r
2091 * 此方法在客户端初始化和设置面板上选择菜单方向的时候用。
\r
2092 * param navPosOption
\r
2094 var dealNavPos = function(navPosOption) {
\r
2096 var panel = $('.zte-theme-panel');
\r
2097 if ($('.nav-pos-direction', panel).attr("disabled") == "disabled") {
\r
2100 var sidermenu = $("#page-sidebar-menu");
\r
2101 var hormenu = $("#main_hormenu");
\r
2102 var sidermenu = $("#page-sidebar-menu");
\r
2103 var hormenu = $("#main_hormenu");
\r
2104 var horSiderMenu = $('#' + megaSiderDivId );
\r
2105 var fhorMenu = $("#" + fMenuMegaDivId);
\r
2106 var fsiderMenu = $("#" + fMenuSiderDivId);
\r
2107 var pcontent = $("[class='page-content']");
\r
2108 if (sidermenu && sidermenu.length > 0 && hormenu && hormenu.length > 0 && fhorMenu && fhorMenu.length > 0) {
\r
2109 if (navPosOption === openoFrameWork_menu_horizontal) {
\r
2110 sidermenu.css('display','none');// 侧边栏隐藏
\r
2111 fhorMenu.css('display','none');
\r
2112 fsiderMenu.css('display','none');
\r
2113 pcontent.css("marginLeft",0);
\r
2114 $("body").addClass("page-full-width");//调整内容显示
\r
2115 hormenu.css("display", "block");//显示水平菜单栏
\r
2116 // 导航位置为水平菜单时,边栏和边栏位置为默认和靠左,且将其切换功能禁用掉
\r
2117 $('.sidebar-option', panel).val("default");
\r
2118 $('.sidebar-option', panel).attr("disabled", true);
\r
2119 $('.sidebar-pos-option', panel).val("left");
\r
2120 $('.sidebar-pos-option', panel).attr("disabled", true);
\r
2121 } else if (navPosOption === openoFrameWork_menu_vertical ) {
\r
2122 $("body").removeClass("page-full-width");
\r
2123 sidermenu.css('display','block');//侧边栏显示
\r
2124 var body = $('body');
\r
2125 if (body.hasClass("page-sidebar-closed")) {
\r
2126 pcontent.css("marginLeft", _sidebarCollapsedWidth);
\r
2128 pcontent.css("marginLeft", _sidebarWidth);
\r
2130 hormenu.css("display", "none");//隐藏水平菜单栏
\r
2131 fhorMenu.css('display','none');
\r
2132 fsiderMenu.css('display','none');
\r
2133 horSiderMenu.css('display','none');
\r
2134 $('.sidebar-option', panel).attr("disabled", false);
\r
2135 $('.sidebar-pos-option', panel).attr("disabled", false);
\r
2136 } else if(navPosOption === openoFrameWork_menu_fmenu ){
\r
2137 sidermenu.css('display','none');// 侧边栏隐藏
\r
2138 hormenu.css("display", "none");//隐藏水平菜单栏
\r
2139 fsiderMenu.css('display','none');
\r
2140 fhorMenu.css('display','block');
\r
2141 pcontent.css("marginLeft",0);
\r
2142 $("body").addClass("page-full-width");//调整内容显示
\r
2143 // 导航位置为水平菜单时,边栏和边栏位置为默认和靠左,且将其切换功能禁用掉
\r
2144 $('.sidebar-option', panel).val("default");
\r
2145 $('.sidebar-option', panel).attr("disabled", true);
\r
2146 $('.sidebar-pos-option', panel).val("left");
\r
2147 $('.sidebar-pos-option', panel).attr("disabled", true);
\r
2151 var dealSetLayout = function(){
\r
2152 var panel = $('.zte-theme-panel');
\r
2153 var layoutOption = $('.layout-option', panel).val();
\r
2154 var languageOption = $('.language-option', panel).val();
\r
2155 var headerOption = $('.header-option', panel).val();
\r
2156 var footerOption = $('.footer-option', panel).val();
\r
2157 var navPosOption = $('.nav-pos-direction', panel).val();
\r
2158 dealNavPos(navPosOption);
\r
2159 var sidebarOption = $('.sidebar-option', panel).val();
\r
2160 var sidebarPosOption = $('.sidebar-pos-option', panel).val();
\r
2161 if (sidebarOption == "fixed" && headerOption == "default") {
\r
2162 alert($.i18n.prop('com_zte_ums_ict_framework_ui_fixedsidedefaultheaderError')); //页头不支持固定边栏,先固定页头才能固定边栏.
\r
2163 $('.header-option', panel).val("fixed");
\r
2164 $('.sidebar-option', panel).val("fixed");
\r
2165 sidebarOption = 'fixed';
\r
2166 headerOption = 'fixed';
\r
2168 if (sidebarOption == "fixed" && sidebarPosOption == "right") {
\r
2169 alert($.i18n.prop('com_zte_ums_ict_framework_ui_fixedsiderightpositionError')); //固定边栏情况下,边栏不能靠右。.
\r
2170 $('.sidebar-pos-option', panel).val("left");
\r
2171 sidebarPosOption = 'left';
\r
2173 dealResetLayout(); // reset layout to default state
\r
2174 if (layoutOption === "boxed") {
\r
2175 $("body").addClass("page-boxed");
\r
2177 $('.header > .header-inner').addClass("container");
\r
2178 var cont = $('body > .clearfix').after('<div class="container"></div>');
\r
2180 $('.page-container').appendTo('body > .container');
\r
2182 if (footerOption === 'fixed') {
\r
2183 $('.footer').html('<div class="container">' + $('.footer').html() + '</div>');
\r
2185 $('.footer').appendTo('body > .container');
\r
2188 if (lastSelectedLayout != layoutOption) {
\r
2189 runResponsiveHandlers();
\r
2191 lastSelectedLayout = layoutOption;
\r
2193 if (headerOption === 'fixed') {
\r
2194 $("body").addClass("page-header-fixed");
\r
2195 $(".header").removeClass("navbar-static-top").addClass("navbar-fixed-top");
\r
2197 $("body").removeClass("page-header-fixed");
\r
2198 $(".header").removeClass("navbar-fixed-top").addClass("navbar-static-top");
\r
2201 if ($('body').hasClass('page-full-width') === false) {
\r
2202 if (sidebarOption === 'fixed') {
\r
2203 $("body").addClass("page-sidebar-fixed");
\r
2205 $("body").removeClass("page-sidebar-fixed");
\r
2209 if (footerOption === 'fixed') {
\r
2210 $("body").addClass("page-footer-fixed");
\r
2212 $("body").removeClass("page-footer-fixed");
\r
2214 //sidebar position
\r
2215 if (openoFrameWork.isRTL()) {
\r
2216 if (sidebarPosOption === 'left') {
\r
2217 $("body").addClass("page-sidebar-reversed");
\r
2218 $('#frontend-link').tooltip('destroy').tooltip({placement: 'right'});
\r
2220 var pcontent = $("[class='page-content']");
\r
2221 pcontent.css("marginLeft",0);//侧边栏靠右,则左边内容填充为0
\r
2222 $("body").removeClass("page-sidebar-reversed");
\r
2223 $('#frontend-link').tooltip('destroy').tooltip({placement: 'left'});
\r
2226 if (sidebarPosOption === 'right') {
\r
2227 var pcontent = $("[class='page-content']");
\r
2228 pcontent.css("marginLeft",0);//侧边栏靠右,则左边内容填充为0
\r
2229 $("body").addClass("page-sidebar-reversed");
\r
2230 $('#frontend-link').tooltip('destroy').tooltip({placement: 'left'});
\r
2232 $("body").removeClass("page-sidebar-reversed");
\r
2233 $('#frontend-link').tooltip('destroy').tooltip({placement: 'right'});
\r
2236 dealSidebarAndContentHeight();
\r
2237 dealFixedSidebar();
\r
2238 dealFixedSidebarHoverable();
\r
2239 dealSiderBarWidthChange();
\r
2240 setCookie('layout-option', layoutOption);
\r
2241 setCookie('language-option', languageOption);
\r
2242 setCookie('header-option', headerOption);
\r
2243 setCookie('sidebar-option', sidebarOption);
\r
2244 setCookie('sidebar-pos-option', sidebarPosOption);
\r
2245 setCookie('nav-pos-direction', navPosOption);
\r
2247 var setCookie = function (key, value) {
\r
2249 store(key, value);
\r
2252 var getCookie = function (key) {
\r
2254 return store(key);
\r
2260 var _getLocationHash = function() {
\r
2261 return location.hash.replace("#_", "");
\r
2264 var _setLocationHash = function(menuItemID) {
\r
2265 location.hash = getLocationHashByMenuId(menuItemID);
\r
2267 var getLocationHashByMenuId = function(menuItemID){
\r
2268 return "#_" + menuItemID;
\r
2271 var loadCurrentHash = function(e,data){
\r
2272 var locationhash = _getLocationHash(); //important
\r
2273 if(!!locationhash&&locationhash.length>0){
\r
2274 if(_hashSource.trim()=="dhByInterface"){
\r
2277 processChangedHash(locationhash,data);
\r
2281 // hash control 这种写法安全点
\r
2282 var processChangedHash = function(path) {
\r
2284 var action = undefined;
\r
2285 var spIndex = path.indexOf("/");
\r
2286 if(spIndex != -1) {
\r
2287 id = path.substring(0,spIndex);
\r
2288 action = path.substring(spIndex+1);
\r
2290 openoFrameWork.goToURLByIDAndNewAction(id,action);
\r
2292 var syncColorCSS=function(){//注册皮肤切换事件处理函数,处理iframe中的皮肤切换
\r
2293 var pagemyIframe=null;
\r
2294 if (cachedIframes.count()>0) {
\r
2295 for (var i in cachedIframes.hash()) {
\r
2296 pagemyIframe=$('.page-content .page-content-body .'+i);
\r
2297 if(pagemyIframe&&pagemyIframe.length>0){
\r
2298 openoFrameWork.SyncCSS(pagemyIframe[0],1,"");
\r
2303 var getCurrentVisibleIframe=function(){
\r
2304 var pagemyIframe=null;
\r
2305 if (cachedIframes.count()>0) {
\r
2306 for (var i in cachedIframes.hash()) {
\r
2307 if(cachedIframes.items(i)===1){
\r
2308 pagemyIframe=$('.page-content .page-content-body .'+i);
\r
2312 return pagemyIframe;
\r
2314 //处理跨域请求代理,通过该代理进行iframe间传递参数,注意这里的代理页面proxy.html必须部署到要跨域的对端域的服务器web根目录下
\r
2315 var dealCrossProxy=function(ifrm,crossproxysrc,ifmHeadlins,flag){//crossproxysrc这个是proxy.html对应的url根路径
\r
2316 var url=$.url(openoFrameWork.getCurrentScript(document));
\r
2317 var proxyHtmlPath=url.attr("directory")+"proxy/proxy.html"//这中情况适用于使用了该界面集成框架的应用系统
\r
2318 var _ifmProxy=$('<iframe id="ifm_Proxy" name="ifm_Proxy" oldproxyorigin="'+crossproxysrc+'" src="'+crossproxysrc+proxyHtmlPath+'" style="border: 0px; margin: 0px; padding: 0px; width: 100%; display:none;" ></iframe>');
\r
2319 var _ifm=$('#ifm_Proxy');
\r
2321 var pageContentBody=$('.page-content .page-content-body');
\r
2322 var linksrcs=new Array();
\r
2323 var linksids=new Array();
\r
2324 var linktyps=new Array();
\r
2326 for (i=0;i<ifmHeadlins.length;i++){
\r
2327 if(typeof ifmHeadlins[i].link.href!== "undefined"){
\r
2328 _src=ifmHeadlins[i].link.href;
\r
2329 linktyps.push("css");
\r
2331 else if(typeof ifmHeadlins[i].link.src!== "undefined"){
\r
2332 if(!!ifmHeadlins[i].link.src&&ifmHeadlins[i].link.src.length>0){
\r
2333 _src=ifmHeadlins[i].link.src;
\r
2334 linktyps.push("javascriptfile");
\r
2336 _src=ifmHeadlins[i].link.text;
\r
2337 linktyps.push("javascripttext");
\r
2340 linktyps.push("undefined");
\r
2342 linksrcs.push(_src);
\r
2343 linksids.push({"pos":ifmHeadlins[i].pos,"scope":ifmHeadlins[i].scope,"id":ifmHeadlins[i].link.id});
\r
2345 var parm={iFrame:ifrm,cssLinktyps:linktyps,cssLinksrcs:linksrcs,cssLinkids:linksids,origin:crossproxysrc,flag:flag};
\r
2346 if(_ifm&&_ifm.length<=0){//没有添加过
\r
2347 _ifmProxy.appendTo(pageContentBody);
\r
2348 _ifmProxy.one('load',parm,function(e){
\r
2349 var data={iFrame:e.data.iFrame,cssLinktyps:e.data.cssLinktyps,cssLinksrcs:e.data.cssLinksrcs,cssLinkids:e.data.cssLinkids,flag:flag};
\r
2350 $('#ifm_Proxy')[0].contentWindow.postMessage(data,e.data.origin);//window.location.origin
\r
2352 }else if(_ifm.attr("oldproxyorigin")!=crossproxysrc){//代理已经添加过了,看是否是同一个网站的代理,如果不是需要重新加载
\r
2353 _ifm.attr("src","");
\r
2354 _ifm.attr("oldproxyorigin",crossproxysrc);
\r
2355 _ifm.one('load',parm,function(e){
\r
2356 var data={iFrame:e.data.iFrame,cssLinktyps:e.data.cssLinktyps,cssLinksrcs:e.data.cssLinksrcs,cssLinkids:e.data.cssLinkids,flag:flag};
\r
2357 $('#ifm_Proxy')[0].contentWindow.postMessage(data,e.data.origin);//window.location.origin
\r
2359 _ifm.attr("src",_ifmProxy.attr("src"));
\r
2360 }else{//已经添加过,直接触发消息发送即可
\r
2361 var data={iFrame:parm.iFrame,cssLinktyps:parm.cssLinktyps,cssLinksrcs:parm.cssLinksrcs,cssLinkids:parm.cssLinkids,flag:flag};
\r
2362 _ifm[0].contentWindow.postMessage(data,parm.origin);//window.location.origin
\r
2366 init: function () {
\r
2367 if(zte_http_headers){
\r
2368 store("zte_http_headers",zte_http_headers);
\r
2371 dealResponsiveOnResize();
\r
2372 dealResponsiveOnInit();
\r
2373 dealClearCachedIframes(true); ////清理当前正在显示的iframe之外缓存的iframe,
\r
2374 breadcrumbBtnMenus.clear();
\r
2375 dealFixedSidebar(); // deals fixed sidebar menu
\r
2376 dealFixedSidebarHoverable(); // deals fixed sidebar on hover effect
\r
2377 dealSidebarMenu(); // deals main menu
\r
2378 dealHorizontalMenu(); // deals horizontal menu
\r
2379 dealSidebarToggler(); // deals sidebar hide/show
\r
2380 dealTheme(); // deals style customer tool
\r
2383 $(window).on('hashchange',function(){
\r
2384 loadCurrentHash();
\r
2387 dealFullScreenMode(); // deals full screen
\r
2388 $("#header_dropdown_user").css('display','block');
\r
2389 $("#com_zte_ums_ict_framework_img_netnumenLogo").css('display','inline');
\r
2390 $("#com_zte_ums_ict_framework_ui_main_title").css('display','inline');
\r
2391 handeCtxMenuitem();
\r
2393 //公开清理缓存的所有Iframe的方法:isALL==true则清理所有,否则清理当前正在显示的iframe之外缓存的iframe,。
\r
2394 clearCachedIframes:function(isAll){
\r
2395 dealClearCachedIframes(isAll);
\r
2398 setBaseURLRoot:function(ipportStr){//菜单url的跟ip和端口例如:http://10.74.151.122:21180
\r
2400 store('baseURLRoot', ipportStr);
\r
2402 var url = $.url(ipportStr);
\r
2403 location.hash=url.attr('fragment');
\r
2404 var auth=url.attr('query');
\r
2406 store('baseURLRootAuth', auth);
\r
2409 getBaseURLRoot:function(ipportStr){//菜单url的跟ip和端口例如:http://10.74.151.122:21180
\r
2412 rooturl=store('baseURLRoot');
\r
2414 return !rooturl?"":rooturl;
\r
2416 clearBaseURLRoot:function(){//菜单url的跟ip和端口例如:http://10.74.151.122:21180
\r
2418 store('baseURLRoot', "",-1);
\r
2421 setPageTitle:function(title){//设置页面标题
\r
2422 $('title').html(title+" - "+gdocTitle);
\r
2424 getLanguage:function(){//获取语言
\r
2425 return openoFrameWork_conf.acceptLanguage;
\r
2428 getLocationHash:function(){
\r
2429 return _getLocationHash();
\r
2431 setSceneURLRootPath:function(sceneURLRootPath){
\r
2432 if(sceneURLRootPath&&sceneURLRootPath.trim().length>0){//如果定义了场景的全局参数
\r
2433 _sceneURLRootPath=sceneURLRootPath.trim();
\r
2434 if(_sceneURLRootPath.charAt(_sceneURLRootPath.length-1)!='/')
\r
2436 _sceneURLRootPath=_sceneURLRootPath+'/';
\r
2440 //public function to add callback a function which will be called on window resize
\r
2441 addResponsiveHandler: function (func) {
\r
2442 responsiveHandlers.push(func);
\r
2445 hiddenAlarmLight:function(){
\r
2449 hiddenMenu:function(){
\r
2452 setBreadcrumbByMenuID:function(id){
\r
2453 //var breaditem=$('#'+id);
\r
2454 var menuitem=undefined;
\r
2455 // var items=$("a[id='"+id+"']");
\r
2456 var items = undefined;
\r
2457 var panel = $('.zte-theme-panel');
\r
2458 var navPosOption = $('.nav-pos-direction', panel).val();
\r
2459 if (navPosOption === "vertical"){ //从垂直菜单里面找
\r
2460 items=$("#page-sidebar-menu a[id='"+id+"']");
\r
2461 if (!items || items.length < 1) {
\r
2462 items=$(".page-content a[id='"+id+"']");
\r
2464 }else if(navPosOption === openoFrameWork_menu_horizontal){//从水平菜单里面找
\r
2465 items=$("#main_hormenu a[id='"+id+"']");
\r
2466 if(items.length == 0){
\r
2467 //横菜单没有找到,再在横菜单的子菜单找一次
\r
2468 items=$("#page-megachild-sidebar-menu a[id='"+id+"']");
\r
2470 }else if(navPosOption === openoFrameWork_menu_fmenu){
\r
2471 items=$("#f_hormenu a[id='"+id+"']");
\r
2472 if(items.length == 0){
\r
2473 //横菜单没有找到,再在竖菜单找一次。
\r
2474 items=$("#page-f-sidebar-menu a[id='"+id+"']");
\r
2477 var isbreadcrumbMenuItem=false;
\r
2478 if(items.length>0){
\r
2479 for(var i=0;i<items.length;i++){
\r
2480 if($(items[i]).parentsUntil('.header-inner').hasClass('hor-menu')){
\r
2481 menuitem=$(items[i]);
\r
2483 }else if($(items[i]).parentsUntil('.page-container').hasClass('page-sidebar')){
\r
2484 menuitem=$(items[i]);
\r
2486 }else if($(items[i]).parentsUntil('.more-botton-zone .btn-group').hasClass('dropdown-menu')){
\r
2487 menuitem=$(items[i]);
\r
2488 isbreadcrumbMenuItem=true;
\r
2490 }else if($(items[i]).parentsUntil('#pageableDiv').hasClass('row1')){
\r
2491 menuitem=$(items[i]);
\r
2492 isbreadcrumbMenuItem=true;
\r
2498 if(menuitem&&menuitem.length>0){
\r
2499 if(isbreadcrumbMenuItem){
\r
2500 dealBreadcrumbBtnGroupMenus(menuitem,false);
\r
2502 dealBreadcrumb(menuitem,true,null);
\r
2505 var breadcrumbBtnMenuItemParent="";
\r
2506 if(!menuitem||menuitem.length<=0){//没有找到该菜单,可能是面包削中的,需要额外处理
\r
2507 var menuItemID=id;
\r
2508 if (breadcrumbBtnMenus.contains(menuItemID)) {//有缓存
\r
2509 breadcrumbBtnMenuItemParent="#"+breadcrumbBtnMenus.items(menuItemID);
\r
2510 menuitem=$(breadcrumbBtnMenuItemParent);
\r
2511 //_breadcrumbSource=true;
\r
2514 var parm=undefined;
\r
2515 if(breadcrumbBtnMenuItemParent&&breadcrumbBtnMenuItemParent.length>0){
\r
2516 parm={breadcrumbBtnMenuItem:menuItemID};
\r
2518 if(parm&&menuitem&&menuitem.length>0) {
\r
2519 dealBreadcrumb(menuitem,true,parm);
\r
2523 setSiderbarCollapseWidth:function(width){
\r
2524 _sidebarCollapsedWidth = width;
\r
2526 getSiderbarCollapseWidth:function(){
\r
2527 return _sidebarCollapsedWidth;
\r
2529 setSidebarWidth:function(width){
\r
2530 _sidebarWidth = width;
\r
2532 getSidebarWidth:function(){
\r
2533 return _sidebarWidth;
\r
2535 //2015年10月26日新增动态切换菜单的功能,这里的菜单还需要再次更换菜单项访问的ip端口信息
\r
2536 handlBaseURL:function(url){
\r
2537 var baseURLRoot=openoFrameWork.getBaseURLRoot();
\r
2538 if (baseURLRoot.length>0) {//2015年10月26日新增动态切换菜单的功能,这里的菜单还需要再次更换菜单项访问的ip端口信息
\r
2539 baseURLRoot=openoFrameWork.getDomainURL(baseURLRoot);//去掉ip和port后多余的部分
\r
2540 console.log("old a link href url:"+url);
\r
2541 url=baseURLRoot+url.replace(openoFrameWork.getDomainURL(url),"");
\r
2542 console.log("baseURLRoot:"+baseURLRoot+" newURL:"+url);
\r
2547 startPageLoading: function(message) {
\r
2548 dealstartPageLoading(message);
\r
2550 stopPageLoading: function() {
\r
2551 dealstopPageLoading();
\r
2553 //public function to get a paremeter by name from URL
\r
2554 getLocationURLParameter: function (paramName,separator) {
\r
2555 var searchString = decodeURIComponent(window.location.search.substring(1)).toLowerCase(),
\r
2556 i, val, params = searchString.split(separator?separator:"&");
\r
2557 paramName=paramName.toLowerCase();
\r
2558 for (i = 0; i < params.length; i++) {
\r
2559 val = params[i].split("=");
\r
2560 if (val[0] == paramName) {
\r
2561 return unescape(val[1]);
\r
2566 //public function to get a paremeter by name from URL
\r
2567 getURLParameter: function (paramName,url) {
\r
2568 var searchString = decodeURIComponent(url).toLowerCase(),
\r
2569 i, val, params = searchString.split("&");
\r
2570 paramName=paramName.toLowerCase();
\r
2571 for (i = 0; i < params.length; i++) {
\r
2572 val = params[i].split("=");
\r
2573 if (val[0] == paramName) {
\r
2574 return unescape(val[1]);
\r
2579 // check for device touch support
\r
2580 isTouchDevice: function () {
\r
2583 getUniqueID: function(prefix) {
\r
2584 return prefix+'_' + Math.floor(Math.random() * (new Date()).getTime());
\r
2587 isIE8: function () {
\r
2591 isIE9: function () {
\r
2595 isRTL: function () {
\r
2598 getViewPort:function(){
\r
2599 return _getViewPort();
\r
2601 // get layout color code by color name
\r
2602 getLayoutColorCode: function (name) {
\r
2603 if (layoutColorCodes[name]) {
\r
2604 return layoutColorCodes[name];
\r
2609 fixContentHeight: function () {
\r
2610 dealSidebarAndContentHeight();
\r
2612 dealAtoIframe:function(aObj,event){
\r
2613 var containerStr=aObj.parentsUntil('.page-container').hasClass('page-sidebar')?'page-sidebar':"";//
\r
2614 containerStr=aObj.parentsUntil('.header-inner').hasClass('hor-menu')?'header':containerStr;
\r
2615 dealMenuItemClick(aObj,event,containerStr);
\r
2618 getDomainURL:function(urlAddress){
\r
2619 var url = $.url(urlAddress);
\r
2620 var protocol=url.attr('protocol');
\r
2621 var host=url.attr('host');
\r
2622 var port=url.attr('port');
\r
2623 var crossOrign=protocol+"://"+host+(port.length>0?":"+port:"");
\r
2624 return crossOrign;
\r
2626 getCurrentScript:function(doc) {//doc为 document对象
\r
2627 /* 注意该功能在其他脚本中调用时出safari获取到的脚本路径为本方法所在脚本的路径,
\r
2628 其他浏览器获取到的为调用该方法的脚本所在路径
\r
2631 if(doc&&doc.currentScript) { //firefox 4+
\r
2632 console.log("0、 "+doc.currentScript.src);
\r
2633 return doc.currentScript.src;
\r
2635 // 参考 https://github.com/samyk/jiagra/blob/master/jiagra.js
\r
2638 a.b.c(); //强制报错,以便捕获e.stack
\r
2639 } catch(e) {//safari的错误对象只有line,sourceId 或者高版本还有sourceURL
\r
2641 if(e.sourceURL){//safari 浏览器没有e.stack但有e.sourceURL
\r
2642 stack=e.sourceURL;
\r
2643 }else if(!stack && window.opera){
\r
2644 //opera 9没有e.stack,但有e.Backtrace,但不能直接取得,需要对e对象转字符串进行抽取
\r
2645 stack = (String(e).match(/of linked script \S+/g) || []).join(" ");
\r
2647 console.log("1、 "+stack);
\r
2650 /*e.stack最后一行在所有支持的浏览器大致如下:
\r
2652 * at http://113.93.50.63/data.js:4:1
\r
2654 *@http://113.93.50.63/query.js:4
\r
2656 *@http://113.93.50.63/data.js:4
\r
2658 * at Global code (http://113.93.50.63/data.js:4:1)
\r
2660 console.log("2、 "+stack);
\r
2661 stack = stack.split( /[@ ]/g).pop();//取得最后一行,最后一个空格或@之后的部分
\r
2662 stack = stack[0] == "(" ? stack.slice(1,-1) : stack;
\r
2663 console.log("3、 "+stack);
\r
2664 return stack.replace(/(:\d+)?:\d+$/i, "");//去掉行号与或许存在的出错字符起始位置
\r
2667 var nodes = doc.getElementsByTagName("script"); //只在head标签中寻找
\r
2668 for(var i = 0, node; node = nodes[i++];) {
\r
2669 if(node.readyState === "interactive") {
\r
2670 console.log("4、 "+(node.className = node.src));
\r
2671 return node.className = node.src;
\r
2676 /*下面的flag为0表示默认不触发孙子iframe中的onload事件,为1表示要触发,flag为10则对cssSrc重复执行,其他不做重复执行*/
\r
2677 SyncCSS:function(ifrm,flag,cssSrc){//将主框架中的皮肤css应用到打开的iframe页面中
\r
2679 var ifmHeadlins = new Array();
\r
2680 if(cssSrc&&cssSrc.length>0&&cssSrc.endWith(".css")){
\r
2681 var _div = $('<a href="'+cssSrc+'"></a>');
\r
2682 var csslink=document.createElement("link");
\r
2683 csslink.href=_div[0].href;//这里同步菜单定义中cssSrc属性指定的css文件到iframe
\r
2685 csslink.rel="stylesheet";
\r
2686 csslink.type="text/css";
\r
2687 csslink.id="ifram_csssrc";
\r
2688 ifmHeadlins.push({"pos":"head","scope":"all","link":csslink});//pos是添加到子iframe中的位置,scope是子窗体作用返回,one表示直接子窗体,all表示嵌套所有子窗体
\r
2690 if(flag!=10){//当flag为10时下面的css和js都不执行
\r
2691 if($('#style_color').length>0){
\r
2692 var csslink=document.createElement("link");
\r
2693 csslink.href=$('#style_color')[0].href.replace(".css","_ifrm.css");//这里同步的皮肤页面修改为原皮肤页面文件名后缀添加ifrm的css皮肤文件
\r
2694 csslink.rel="stylesheet";
\r
2695 csslink.type="text/css";
\r
2696 csslink.id="style_color";
\r
2697 ifmHeadlins.push({"pos":"head","scope":"all","link":csslink});//pos是添加到子iframe中的位置,scope是子窗体作用返回,one表示直接子窗体,all表示嵌套所有子窗体
\r
2699 // 将 font-awesome字体图标应用到模块iframe
\r
2700 if($('#font_awesome').length>0){
\r
2701 var awesomelink=document.createElement("link");
\r
2702 awesomelink.href=$('#font_awesome')[0].href;
\r
2703 awesomelink.rel="stylesheet";
\r
2704 awesomelink.type="text/css";
\r
2705 awesomelink.id="font_awesome";
\r
2706 ifmHeadlins.push({"pos":"head","scope":"all","link":awesomelink});
\r
2708 // 将pym.js or pym.min.js应用到模块iframe
\r
2709 var pymjsObj=$("script[src*='/pym.']");//模糊查找
\r
2710 pymjsObj=pymjsObj.length>0?pymjsObj:$("script[src*='/pym1.']");
\r
2711 if(pymjsObj.length>0){
\r
2712 var pymjs=document.createElement("script");
\r
2713 pymjs.src=pymjsObj[0].src;
\r
2714 pymjs.type="text/javascript";
\r
2715 pymjs.id=!!pymjsObj[0].id?pymjsObj[0].id:"pymjs";
\r
2716 ifmHeadlins.push({"pos":"head","scope":"one","link":pymjs});
\r
2717 pymjs=document.createElement("script"); //pym脚本文件加载后要执行new pym.Child()进行iframe子窗体实例化,便于子窗体和父窗体通讯new pym.Child({ id: '"+_iframe+"' ,polling: 1000})
\r
2718 var frameid=(_iframe.split('-').length>0?_iframe.split('-')[1]:"1");
\r
2719 pymjs.text="var t1;function pmchd(){console.log('In the frame "+_iframe+",pym code call is begining; '+(typeof pym!= 'undefined'));if(typeof pym != 'undefined'){pymChild"+frameid+" = new pym.Child({ id: 'pdiv_"+_iframe+"' ,polling: 500});window.clearInterval(t1); }};t1 = window.setInterval(pmchd,5);";
\r
2720 pymjs.type="text/javascript";
\r
2721 pymjs.id="pymChild";
\r
2722 ifmHeadlins.push({"pos":"htmlend","scope":"one","link":pymjs});
\r
2724 // 将hk.js or hk.min.js应用到模块iframe
\r
2725 var hkjsObj=$("script[src*='/hk.']");//模糊查找
\r
2726 hkjsObj=hkjsObj.length>0?hkjsObj:$("script[src*='/hk1.']");
\r
2727 if(hkjsObj.length>0){
\r
2728 var hkjs=document.createElement("script");
\r
2729 hkjs.src=hkjsObj[0].src;
\r
2730 hkjs.type="text/javascript";
\r
2731 hkjs.id=!!hkjsObj[0].id?hkjsObj[0].id:"hkjs";
\r
2732 ifmHeadlins.push({"pos":"head","scope":"one","link":hkjs});
\r
2733 hkjs=document.createElement("script"); ////hk.js 加载后拦截ajax请求进行转发
\r
2736 var crossOrign=openoFrameWork.getDomainURL(ifrm.src);
\r
2737 if( window.location.origin==crossOrign){ //第一层同域处理
\r
2738 for (i=0;i<ifmHeadlins.length;i++){
\r
2739 var link=ifrm.contentDocument.getElementById(ifmHeadlins[i].link.id);
\r
2741 if(link.parentNode.tagName.toUpperCase==="HEAD"){
\r
2742 ifrm.contentDocument.head.removeChild(link);
\r
2743 }else if(link.parentNode.tagName.toUpperCase==="HTML"){
\r
2744 ifrm.contentDocument.removeChild(link);
\r
2747 if(ifmHeadlins[i].pos=="head")
\r
2748 ifrm.contentDocument.head.appendChild(ifmHeadlins[i].link);
\r
2749 else if (ifmHeadlins[i].pos=="bodyend")
\r
2750 ifrm.contentDocument.body.appendChild(ifmHeadlins[i].link);
\r
2751 else if (ifmHeadlins[i].pos=="htmlend")
\r
2752 ifrm.contentDocument.body.parentNode.appendChild(ifmHeadlins[i].link);
\r
2754 //对iframe中又有嵌套一级iframe的地方进行同步,只同步scope为all的
\r
2755 var childifrms=ifrm.contentDocument.getElementsByTagName("iframe");
\r
2756 if(childifrms&&childifrms.length>0){
\r
2757 var ifmHeadlins2 = new Array();
\r
2758 for (i=0;i<ifmHeadlins.length;i++){//筛选出scope为all的
\r
2759 if(ifmHeadlins[i].scope=="one") break;
\r
2760 ifmHeadlins2.push(ifmHeadlins[i]);
\r
2762 for(j=0;j<childifrms.length;j++){
\r
2763 var parm={ifmHeadlins:ifmHeadlins2};
\r
2764 var childOrign=openoFrameWork.getDomainURL(childifrms[j].src);
\r
2765 if(window.location.origin==childOrign){//同域
\r
2766 var ifrmload=function(e){
\r
2767 for (i=0;i<e.data.ifmHeadlins.length;i++){
\r
2768 var ifmheadlink=$(e.data.ifmHeadlins[i].link).clone()[0];////注意这里必须克隆,否则会出现元素移动,前面ifrm添加的都会被移出
\r
2769 var link=this.contentDocument.getElementById(ifmheadlink.id);
\r
2771 if(link.parentNode.tagName.toUpperCase==="HEAD"){
\r
2772 this.contentDocument.head.removeChild(link);
\r
2773 }else if(link.parentNode.tagName.toUpperCase==="HTML"){
\r
2774 this.contentDocument.removeChild(link);
\r
2777 if(e.data.ifmHeadlins[i].pos=="head"){
\r
2778 this.contentDocument.head.appendChild(ifmheadlink);
\r
2779 }else if(e.data.ifmHeadlins[i].pos=="bodyend"){
\r
2780 this.contentDocument.body.appendChild(ifmheadlink);
\r
2781 }else if (ifmHeadlins2[i].pos=="htmlend"){
\r
2782 this.contentDocument.body.parentNode.appendChild(ifmheadlink);
\r
2786 $(childifrms[j]).off('onload',parm,ifrmload);
\r
2787 $(childifrms[j]).on('onload',parm,ifrmload);
\r
2788 $(childifrms[j]).trigger("onload");
\r
2791 if(ifmHeadlins2.length>0){
\r
2792 console.log('跨域访问: 系统将进入跨域访问代理处理流程 ');
\r
2793 dealCrossProxy(childifrms[j].name,childOrign,ifmHeadlins2,flag);
\r
2799 if(ifmHeadlins.length>0){
\r
2800 console.log('跨域访问: 系统将进入跨域访问代理处理流程 ');
\r
2801 dealCrossProxy(ifrm.name,crossOrign,ifmHeadlins,flag);
\r
2805 goToURL:function(url){
\r
2806 dhByBreadcrumb = true;//全局变量,声明此次事件是由点击面包屑发起的
\r
2807 var showNav=openoFrameWork.getLocationURLParameter('showNav');
\r
2808 if(showNav=="false"){//如果不显示菜单,就强制刷新本页
\r
2809 location.reload();
\r
2811 url="a[name='"+url+"']";
\r
2815 goToURLByName:function(name){
\r
2816 var showNav=openoFrameWork.getLocationURLParameter('showNav');
\r
2817 if(showNav=="false"){//如果不显示菜单,就强制刷新本页
\r
2818 location.reload();
\r
2820 url="a[name='"+name+"']";
\r
2824 goToURLByID:function(id){
\r
2828 var showNav=openoFrameWork.getLocationURLParameter('showNav');
\r
2829 if(showNav=="false"){//如果不显示菜单,就强制刷新本页
\r
2830 location.reload();
\r
2832 if(id.indexOf("#")<0){
\r
2838 goToPortal:function(id){
\r
2839 var _url=top.location.href;
\r
2840 console.log(_url);
\r
2841 //_url="/ngict/iui/framework/";
\r
2842 var url=$.url(_url);
\r
2843 top.location=url.attr("directory")+"uifportal.html#"+id+"/";
\r
2846 goToURLByIDAndNewIPPort:function(id,newIPPort,newActionStr){
\r
2847 //先把NewIPPort对象:newIPPort={menuCategoryID:'vim',ipPortStr:'htpp://10.74.151.123:31180',newTitle:''}缓存到Category数组中,
\r
2848 //menuCategoryID属性是更多菜单上配置的菜单的分类id,;
\r
2849 //ipPortStr属性是该id的菜单要替换的新的ip和端口地址字符串,包括协议部分,比如http://10.74.151.64:21169
\r
2850 //newTitle属性用于放置新开ip的页面对应到面包屑上的名字,可以为“”,空标识不关注
\r
2851 _menuCategorys.replace(newIPPort.menuCategoryID,{ipPort:newIPPort.ipPortStr,ipTitle:newIPPort.newTitle});//把当前面包削中的菜单id和该子菜单对应的父菜单关联缓存起来
\r
2853 store('menuCategoryID', newIPPort.menuCategoryID+"[menuCategoryID]"+newIPPort.ipPortStr+"[menuCategoryID]"+(!!newIPPort.newTitle?newIPPort.newTitle:""));
\r
2855 //这里增加按照newIPPort.menuCategoryID分类加载more菜单的处理逻辑
\r
2856 //首先根据id找到对应的主菜单菜单项
\r
2857 var menuitem = this.findMenuItemByMenuId(id);
\r
2858 if(!menuitem||menuitem.length<=0){//主菜单中没有找到,就找more菜单,找到id对应的more菜单项所属的主菜单项
\r
2859 var mainMenuId = this.getMenuItemId_From_MoreMenuRelation(id);
\r
2860 if( !!mainMenuId&&mainMenuId.length>0 ){//more菜单中找到了id对应的主菜单项id,根据id返回主菜单项
\r
2861 menuitem = this.findMenuItemByMenuId(mainMenuId);
\r
2862 if(!!menuitem&&menuitem.length>0){
\r
2863 var more=$("#"+id,$('#pageableDiv')).parent();
\r
2864 $(".box.boxOperation", $(".carousel-inner")).removeClass("moreButtonSelected");
\r
2865 more=$('a>div.box',more);
\r
2866 if (more.hasClass('moreButtonSelected') == false){
\r
2867 more.addClass('moreButtonSelected');
\r
2869 var pagesTags=$('.item.moreButtonsTag');
\r
2870 if(pagesTags.length>0){
\r
2871 for(var i=0;i<pagesTags.length;i++){
\r
2872 var tags=$(pagesTags[i]);
\r
2873 tags.removeClass('active');
\r
2874 if($('.moreButtonSelected',tags).length>0){
\r
2875 tags.addClass('active');
\r
2882 //其次找到的菜单项中newIPPort.menuCategoryID对应的src覆盖breadcrumgroupbuttonsrc属性值,
\r
2883 if(!!menuitem&&menuitem.length>0){
\r
2884 var mulsrc=menuitem.attr(newIPPort.menuCategoryID+"-multiInsrc");
\r
2886 menuitem.attr("breadcrumgroupbuttonsrc" ,mulsrc);
\r
2887 getBreadcrumbRightButtons(mulsrc,true);
\r
2891 clearInterval(waittime);
\r
2893 waittime = setInterval(function () {
\r
2894 if(moreMenusisLoaded==true){
\r
2895 clearInterval(waittime);
\r
2896 openoFrameWork.goToURLByIDAndNewAction(id,newActionStr,null);
\r
2900 goToURLByIDAndNewAction:function(id,newActionStr,newBrowserPageOption){
\r
2905 /*if(id.indexOf("#")<0){
\r
2908 var menuitem = this.findMenuItemByMenuId(id);
\r
2910 if(newBrowserPageOption){
\r
2911 var href = ICTFRAME_CONST_DEFAULTPAGE_PATH;
\r
2912 var hash = getLocationHashByMenuId(id);
\r
2913 var newin=window.open(href + newBrowserPageOption.paramStr + hash,newBrowserPageOption.windowTitle);
\r
2914 newin.name=newActionStr;//注意这种传递参数的方法,被打开的页面中需要通过top.name中获取该传递的参数。
\r
2917 //$(window).off('hashchange', loadCurrentHash);
\r
2918 var menuItemID=menuitem?menuitem.attr("id"):"";
\r
2919 if(!!menuItemID&&menuItemID.length>0){
\r
2920 //menuItemID="#" + menuItemID;
\r
2921 //menuItemID=!!newActionStr?menuItemID:menuItemID+"/no";
\r
2922 _setLocationHash(menuItemID);
\r
2924 var breadcrumbBtnMenuItemParent="";
\r
2925 if(!menuitem||menuitem.length<=0){//没有找到该菜单,可能是面包削中的,需要额外处理
\r
2927 if (breadcrumbBtnMenus.contains(menuItemID)) {//有缓存
\r
2928 breadcrumbBtnMenuItemParent=breadcrumbBtnMenus.items(menuItemID);
\r
2929 menuitem=this.findMenuItemByMenuId(breadcrumbBtnMenuItemParent);
\r
2930 //_breadcrumbSource=true;
\r
2932 // else{//在新增的可翻页的更多菜单里面找
\r
2933 // var pageDiv = $('#pageableDiv');
\r
2934 // menuitem=$('#' + menuItemID , pageDiv);
\r
2936 if( menuitem && menuitem.length > 0){
\r
2937 isMoreMenuItemClick = true;
\r
2940 if(!menuitem||menuitem.length<=0){
\r
2941 //面包屑和主菜单都没有找到,情况可能是:更多菜单点击打开后,刷新,hash已经更改,但是对应的更多菜单的html没有加载,需要找到更多菜单和主菜单的对应关系
\r
2942 var mainMenuId = this.getMenuItemId_From_MoreMenuRelation( id );
\r
2944 menuitem = this.findMenuItemByMenuId(mainMenuId);
\r
2948 if (store&&store("globleCurrentBreadcrumb")){
\r
2949 globleCurrentBreadcrumb=store("globleCurrentBreadcrumb");
\r
2950 //下面处理下刷新整个页面后从cookie中获取来的最后一次操作的面包屑对应的对应菜单的name属性回写,便于面包屑事件响应能够找到对应的菜单
\r
2951 var al=$("a",$("<div>"+globleCurrentBreadcrumb+"</div>"));
\r
2953 for(i=0;i<al.length;i++){
\r
2955 gal=$("a[id='"+alink.attr("id")+"']");//从整个页面查找
\r
2956 for(j=0;j<gal.length;j++){
\r
2957 $(gal[j]).attr("name",alink.attr("name"));
\r
2961 if(menuitem&&menuitem.length>0){
\r
2962 var panel = $('.zte-theme-panel');
\r
2963 var navPosOption = $('.nav-pos-direction', panel).val();
\r
2964 if(navPosOption === openoFrameWork_menu_fmenu){
\r
2965 var hparentid=menuitem.attr("hparentid");
\r
2966 var id=menuitem.attr("id");
\r
2967 var i=0,menuItemH=menuitem;
\r
2968 while (id!=hparentid&&i<20){
\r
2969 menuItemH=openoFrameWork.findMenuItemByMenuId(hparentid);
\r
2970 hparentid=menuItemH.attr("hparentid");
\r
2971 id=menuItemH.attr("id");
\r
2974 if(!menuItemH.hasClass('active'))
\r
2975 menuItemH.parent().addClass("active");
\r
2978 console.log("goToURLByIDAndNewAction():Can't find the menuitem.The menu ID is:"+id+".Please check if the ID or ID cache is correct.");
\r
2981 var parm=undefined;
\r
2982 if(!!newActionStr&&breadcrumbBtnMenuItemParent&&breadcrumbBtnMenuItemParent.length>0){
\r
2983 parm={action:newActionStr,breadcrumbBtnMenuItem:menuItemID};
\r
2984 }else if(!!newActionStr){
\r
2985 parm={action:newActionStr};
\r
2986 }else if(breadcrumbBtnMenuItemParent&&breadcrumbBtnMenuItemParent.length>0){
\r
2987 parm={breadcrumbBtnMenuItem:menuItemID};
\r
2988 }else if(mainMenuId){
\r
2989 isMoreMenuItemClick = true;
\r
2990 parm={breadcrumbBtnMenuItem:menuItemID};
\r
2992 //if(breadChangeType){
\r
2996 // parm.breadChangeType = breadChangeType;
\r
2998 if(parm&&parm.action || parm&&parm.breadChangeType) {
\r
2999 _hashSource="dhByInterface";
\r
3002 if(menuitem&&menuitem.length>0){
\r
3003 menuitem.one('click',parm,function(e){ //临时一次性的注册一次click事件处理函数,执行完毕会自动删除
\r
3004 openoFrameWork.dealAtoIframe($(this),e);
\r
3005 //$(window).one('hashchange', loadCurrentHash);
\r
3008 menuitem.click();//后执行
\r
3012 //$(window).on('hashchange', loadCurrentHash);
\r
3016 getBreadcrumbEle:function(){
\r
3017 return $('.breadcrumbUl')[0];
\r
3021 findMenuItemByMenuId:function( id ){
\r
3022 var menuitem=undefined;
\r
3023 var panel = $('.zte-theme-panel');
\r
3024 var navPosOption = $('.nav-pos-direction', panel).val();
\r
3026 var items = undefined;
\r
3027 if (navPosOption === "vertical"){ //从垂直菜单里面找
\r
3028 items=$("#page-sidebar-menu a[id='"+id+"']");
\r
3029 }else if(navPosOption === openoFrameWork_menu_horizontal){//从水平菜单里面找
\r
3030 items=$("#main_hormenu a[id='"+id+"']");
\r
3031 if(items.length == 0){
\r
3032 //横菜单没有找到,再在横菜单的子菜单找一次
\r
3033 items=$("#page-megachild-sidebar-menu a[id='"+id+"']");
\r
3035 }else if(navPosOption === openoFrameWork_menu_fmenu){
\r
3036 items=$("#f_hormenu a[id='"+id+"']");
\r
3037 if(items.length == 0){
\r
3038 //横菜单没有找到,再在竖菜单找一次。
\r
3039 items=$("#page-f-sidebar-menu a[id='"+id+"']");
\r
3044 if( items&&items.length == 0 ){
\r
3045 console.log( 'fmenu alink length is :' + $("#page-f-sidebar-menu a").length );
\r
3046 console.log( 'cant find menu in sidemenu、megamenu and fmenu , the menu id is ' + id );
\r
3048 if(items&&items.length>0){
\r
3049 for(var i=0;i<items.length;i++){
\r
3050 if($(items[i]).parentsUntil('.header-inner').hasClass('hor-menu')){
\r
3051 menuitem=$(items[i]);
\r
3053 }else if($(items[i]).parentsUntil('.page-container').hasClass('page-sidebar')){
\r
3054 menuitem=$(items[i]);
\r
3062 getMenuItemId_From_MoreMenuRelation:function( id ){
\r
3063 var panel = $('.zte-theme-panel');
\r
3064 var navPosOption = $('.nav-pos-direction', panel).val();
\r
3065 var mainMenuId = null;
\r
3066 if (navPosOption === openoFrameWork_menu_vertical){
\r
3067 relationAry=sideBarMenu_to_moreMenu_frame;
\r
3068 }else if(navPosOption === openoFrameWork_menu_horizontal){
\r
3069 relationAry=horBarMenu_to_moreMenu_frame;
\r
3070 }else if(navPosOption === openoFrameWork_menu_fmenu){
\r
3071 relationAry=horBarMenu_to_moreMenu_frame;
\r
3073 if ( !relationAry || !id ){
\r
3076 for ( var i = 0 ; i < relationAry.length ; i++ ){
\r
3077 var eachMain = relationAry[i];
\r
3078 var moreMenuIds = eachMain.moreMenuIds;
\r
3079 for ( var j = 0 ; j < moreMenuIds.length ; j++ ){
\r
3080 if( moreMenuIds[j] && moreMenuIds[j] == id ){
\r
3081 return eachMain.mainMenuId;
\r
3088 getMenuItemFoucsByID : function (id) {
\r
3092 var menuitem=undefined;
\r
3093 // var items=$("a[id='"+id+"']");
\r
3094 var items = undefined;
\r
3095 var panel = $('.zte-theme-panel');
\r
3096 var navPosOption = $('.nav-pos-direction', panel).val();
\r
3097 if (navPosOption === "vertical"){ //从垂直菜单里面找
\r
3098 items=$("#page-sidebar-menu a[id='"+id+"']");
\r
3099 }else if(navPosOption === openoFrameWork_menu_horizontal){//从水平菜单里面找
\r
3100 items=$("#main_hormenu a[id='"+id+"']");
\r
3101 if(items.length == 0){
\r
3102 //横菜单没有找到,再在横菜单的子菜单找一次
\r
3103 items=$("#page-megachild-sidebar-menu a[id='"+id+"']");
\r
3105 }else if(navPosOption === openoFrameWork_menu_fmenu){
\r
3106 items=$("#f_hormenu a[id='"+id+"']");
\r
3107 if(items.length == 0){
\r
3108 //横菜单没有找到,再在竖菜单找一次。
\r
3109 items=$("#page-f-sidebar-menu a[id='"+id+"']");
\r
3113 if(items.length>0){
\r
3114 for(var i=0;i<items.length;i++){
\r
3115 if($(items[i]).parentsUntil('.header-inner').hasClass('hor-menu')){
\r
3116 menuitem=$(items[i]);
\r
3118 }else if($(items[i]).parentsUntil('.page-container').hasClass('page-sidebar')){
\r
3119 menuitem=$(items[i]);
\r
3124 var breadcrumbBtnMenuItemParent="";
\r
3125 if(!menuitem||menuitem.length<=0){//没有找到该菜单,可能是面包削中的,需要额外处理
\r
3127 if (breadcrumbBtnMenus.contains(menuItemID)) {//有缓存
\r
3128 breadcrumbBtnMenuItemParent="#"+breadcrumbBtnMenus.items(menuItemID);
\r
3129 menuitem=$(breadcrumbBtnMenuItemParent);
\r
3132 var parm = undefined;
\r
3133 if (breadcrumbBtnMenuItemParent && breadcrumbBtnMenuItemParent.length > 0) {
\r
3135 breadcrumbBtnMenuItem : menuItemID
\r
3138 if (menuitem && menuitem.length > 0) {
\r
3139 menuitem.one('click', parm, function (e) { //临时一次性的注册一次click事件处理函数,执行完毕会自动删除
\r
3140 var containerStr = $(this).parentsUntil('.page-container').hasClass('page-sidebar') ? 'page-sidebar' : ""; //
\r
3141 containerStr = $(this).parentsUntil('.header-inner').hasClass('hor-menu') ? 'header' : containerStr;
\r
3142 _isClicked = false;
\r
3143 dealMenuItemGetFocus($(this),e,containerStr);
\r
3146 menuitem.click(); //后执行
\r
3149 // 处理面包削中的按钮菜单增加的导航连接,显示在iframe中
\r
3150 openbreadcrumbLink:function(aObject,e) {
\r
3151 var url = aObject.attr("href");
\r
3152 if(!url||url.length<2)
\r
3154 e.preventDefault();
\r
3156 var menuItemID=aObject.attr("id");
\r
3157 if(!!menuItemID&&menuItemID.length>0){
\r
3158 _setLocationHash(menuItemID);
\r
3159 _hashSource="dhByInterface";
\r
3161 dealstartPageLoading();
\r
3162 dealIframe(aObject,e);
\r
3164 getURLParam:function(name){
\r
3165 var reg = new RegExp("(^|&)" + name.toLowerCase() + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
\r
3166 var search =decodeURIComponent(location.search.substring(1)).toLowerCase();
\r
3167 var r =search.match(reg); //匹配目标参数
\r
3168 if (r != null) return unescape(r[2]);
\r
3169 return null; //返回参数值
\r
3174 //抽取html片段中任意位置的script标签(包括代码是内嵌的情况)逐个运行(不会在单个script加载不到的时候停下来)
\r
3175 function runHtmlScripts(s) {
\r
3176 var div = document.createElement('div');
\r
3177 div.innerHTML = s;
\r
3178 var scripts = div.getElementsByTagName('script');
\r
3180 var currentRunningScriptSrcPath = {};
\r
3181 $(scripts).each(function() {
\r
3182 var src = this.src;
\r
3183 src = openoFrameWork.handlBaseURL(src);
\r
3185 currentRunningScriptSrcPath[src.substring(src.lastIndexOf("/") + 1)] = src.substring(0, src.lastIndexOf("/") + 1);
\r
3188 $.globalEval(this.text || this.textContent || this.innerHTML || '');
\r
3193 function stripHtmlScripts(htmlContent) {
\r
3194 var divContent = document.createElement('div');
\r
3195 divContent.innerHTML = htmlContent;
\r
3196 var scripts = divContent.getElementsByTagName('script');
\r
3198 $(scripts).each(function() {
\r
3199 this.src = openoFrameWork.handlBaseURL(this.src);
\r
3200 this.parentNode.removeChild(this);
\r
3202 return divContent.innerHTML;
\r
3205 function getsiderBarMenu(url){
\r
3206 if (url.length<2){
\r
3209 url=openoFrameWork.handlBaseURL(url);
\r
3210 openoFrameWork.startPageLoading();//菜单加载中请稍候....
\r
3211 var pagesidebar=$('#page-sidebar-menu');
\r
3212 pagesidebar.empty();
\r
3213 pagesidebar.append("<li class='sidebar-toggler-wrapper'><div class='sidebar-toggler hidden-xs hidden-sm'></div></li>");
\r
3218 dataType: "html",
\r
3219 success: function (res) {
\r
3220 //去除script标签以后添加到主框架以防止append方法因为加载script标签失败导致后面的代码无法运行
\r
3221 //res = stripHtmlScripts(res);
\r
3222 var resScriptsSriped = stripHtmlScripts(res);
\r
3223 pagesidebar.append(resScriptsSriped);
\r
3224 runHtmlScripts(res);
\r
3226 siderBarMenuAuthentication();
\r
3227 dealMysqlBackupMenu();
\r
3228 //loadi18n_WebFramework_sideMenu();
\r
3229 setTimeout(function () {
\r
3230 openoFrameWork.stopPageLoading();
\r
3234 error: function (xhr, ajaxOptions, thrownError) {
\r
3235 //$('#page-sidebar-menu').append('<h4 class="nav-load-error">'+$.i18n.prop('com_zte_ums_ict_framework_ui_loadmenuerror')+'</h4>');//加载系统菜单失败!;//加载系统菜单失败!
\r
3239 var setLayoutValueByCookie = function () {
\r
3240 var panel = $('.zte-theme-panel');
\r
3241 if (store('layout-option') != undefined) {
\r
3242 $('.layout-option', panel).val(store('layout-option'));
\r
3244 if (store('language-option') != undefined) {
\r
3245 $('.language-option', panel).val(store('language-option'));
\r
3247 if (store('sidebar-option') != undefined) {
\r
3248 $('.sidebar-option', panel).val(store('sidebar-option'));
\r
3250 if (store('header-option') != undefined) {
\r
3251 $('.header-option', panel).val(store('header-option'));
\r
3253 if (store('sidebar-pos-option') != undefined) {
\r
3254 $('.sidebar-pos-option', panel).val(store('sidebar-pos-option'));
\r
3256 var horMenuLoadTip = $("[class='nav-load-error']", $(".hormenu"));
\r
3257 var sideMenuLoadTip = $("[class='nav-load-error']", $("[class='page-sidebar-menu']"));
\r
3258 // 横竖菜单都无错误提示,都正确加载
\r
3259 // if ((!horMenuLoadTip || horMenuLoadTip.length <= 0) && (!sideMenuLoadTip || sideMenuLoadTip.length <= 0)) {
\r
3260 // if (store('nav-pos-direction') != undefined) {
\r
3261 // var navPosOption = store('nav-pos-direction');
\r
3262 // $('.nav-pos-direction', panel).val(navPosOption);
\r
3264 $('.nav-pos-direction', panel).val('fmenu');
\r
3266 // "dataType" : 'json',
\r
3267 // "type" : "GET",
\r
3268 // "async" : false,
\r
3269 // url : FrameConst.REST_GET_FRAME_MENUDIRECTION + "&tmpstamp=" + new Date().getTime(),
\r
3270 // "success" : function (obj) {
\r
3271 // if (obj.value && (obj.value != "")) {
\r
3272 // $('.nav-pos-direction', panel).val(obj.value);
\r
3278 // $('.nav-pos-direction', panel).attr("disabled", true);
\r
3283 function iniFMenu() {
\r
3284 var fsidemenu = $('#' + fMenuSiderDivId);
\r
3287 openoFrameWork.startPageLoading();
\r
3289 var menuContent = initLeftMenu();
\r
3290 fsidemenu.empty();
\r
3291 fsidemenu.append("<li class='sidebar-toggler-wrapper'><div class='sidebar-toggler hidden-xs hidden-sm'></div></li>");
\r
3292 fsidemenu.append(menuContent);
\r
3293 loadi18n_WebFramework('web-framework-menu-i18n', 'i18n/', 'openo_frame_left_menu_i18n');
\r
3295 openoFrameWork.stopPageLoading();
\r
3299 function goToHomePage(){
\r
3300 locationhash = openoFrameWork.getLocationHash();
\r
3301 if(!!locationhash&&locationhash.length>0){//有锚点,直接触发
\r
3302 var newIPPort=null;
\r
3303 if (store&&store('menuCategoryID')) {
\r
3304 var s=store('menuCategoryID').split('[menuCategoryID]');
\r
3306 newIPPort={menuCategoryID:s[0],ipPortStr:s[1],newTitle:s[2]};
\r
3310 openoFrameWork.goToURLByIDAndNewIPPort(locationhash,newIPPort,null);
\r
3312 openoFrameWork.goToURLByIDAndNewAction(locationhash,null,null);
\r
3314 }else{//否则还是模拟点击配置了start类的菜单
\r
3315 var containerStr = "";
\r
3316 //var sidermenu = $("[class='page-sidebar-menu']", $("[class='page-sidebar navbar-collapse collapse']"));
\r
3317 var sidermenu = $("#page-sidebar-menu");
\r
3318 var hormenu = $("#main_hormenu");
\r
3319 var fhormenu = $('#' + fMenuMegaDivId);
\r
3320 var fhormenusider = $('#page-f-sidebar-menu');
\r
3321 var startmenu = null;
\r
3322 var navPosOption = $('.nav-pos-direction', panel).val();
\r
3323 // 侧边栏显示,根据侧边栏CSS选择
\r
3324 if (navPosOption === "vertical") {
\r
3325 //containerStr=$('.page-sidebar').length>0?'.page-sidebar':"";
\r
3326 startmenu = $('.iframe.start' , sidermenu);
\r
3327 dealStartMenu( startmenu, sidermenu );
\r
3329 // 水平菜单显示,根据水平菜单CSS选择
\r
3330 else if (navPosOption === "horizontal") {
\r
3331 //containerStr=$('.hor-menu').length>0?'.header':containerStr;
\r
3332 startmenu = $('.iframe.start' , hormenu);
\r
3333 dealStartMenu( startmenu, hormenu );
\r
3337 else if (navPosOption === openoFrameWork_menu_fmenu) {
\r
3338 //containerStr=$('.hor-menu').length>0?'.header':containerStr;
\r
3339 startmenu = $('.iframe.start' ,fhormenu);
\r
3340 if (startmenu && startmenu.length < 1) {
\r
3341 startmenu = $('.iframe.start' ,fhormenusider);
\r
3343 dealStartMenu( startmenu, fhormenu,fhormenusider );
\r
3347 var dealStartMenu = function(startmenu , menuContainer,menuContainer2 ){
\r
3348 var timer =setInterval(function () {
\r
3349 if(startmenu&&startmenu.length>0){
\r
3350 startmenu.click();
\r
3351 clearInterval(timer);
\r
3353 console.log('the start menu click event is not be triggerd ,so do it repeat!!');
\r
3354 $('a[operation]', menuContainer).each(function () {
\r
3355 startmenu = $(this);
\r
3358 if (menuContainer2&&startmenu && startmenu.length < 1) {
\r
3359 $('a[operation]', menuContainer2).each(function () {
\r
3360 startmenu = $(this);
\r
3366 handeCtxMenuitem();
\r
3369 function handeCtxMenuitem() {
\r
3370 $(".page-sidebar ul li a").each(function() {
\r
3371 if ($(this).attr("href") && $(this).attr("href") != "javascript:;" && $(this).attr("href") != "#") {
\r
3372 $(this).attr("oncontextmenu", "return false");
\r
3375 $(".hormenu li a").each(function() {
\r
3376 if ($(this).attr("href") && $(this).attr("href") != "javascript:;" && $(this).attr("href") != "#") {
\r
3377 $(this).attr("oncontextmenu", "return false");
\r
3381 function initBaseInfo(){
\r
3382 $("#logout_label").text($.i18n.prop('com_zte_ums_ict_framework_ui_group_logout'));
\r
3383 $("#fullscreen_label").text($.i18n.prop('com_zte_ums_ict_framework_ui_group_fullscreen'));
\r
3384 $("#changePwd_label").text($.i18n.prop('com_zte_ums_ict_framework_ui_changePwd'));
\r
3385 $("#com_zte_ums_ict_framework_moudle_about").text($.i18n.prop('com_zte_ums_ict_framework_moudle_about'));
\r
3386 $("#com_zte_ums_ict_framework_moudle_help").text($.i18n.prop('com_zte_ums_ict_framework_moudle_help'));
\r
3387 $("#zte_menu-toggler").attr("title",$.i18n.prop('com_zte_ums_ict_framework_moudle_menutoggler'));
\r
3389 window.closeModal = function(modalid) {
\r
3393 if(modalid.indexOf("#")<0){
\r
3394 modalid="#"+modalid;
\r
3396 $(modalid).modal('hide');
\r
3398 function getLcsRight(lcsoperations) {
\r
3399 var lcsrights = new Array();
\r
3400 if (lcsoperations && (lcsoperations.length > 0)) {
\r
3401 // 请求后台license value
\r
3402 //----test data----
\r
3403 // var testjson = '{"data":[{"id":"mylcs","name":"xxx","value":"false"}]}';
\r
3404 // var testopt = eval('(' + testjson + ')');
\r
3405 // var testarray = testopt.data;
\r
3406 //-----end test data---
\r
3408 "keys" : lcsoperations
\r
3410 var jsonvalues = JSON.stringify(keys);
\r
3412 "data" : jsonvalues
\r
3414 var url=FrameConst.REST_GETLICENSEINFO + "?tmpstamp=" + new Date().getTime();
\r
3415 url=openoFrameWork.handlBaseURL(url);
\r
3417 "dataType" : 'json',
\r
3422 //"contentType" : 'application/json; charset=utf-8',
\r
3423 "success" : function (response) {
\r
3425 lcsrights = response.data;
\r
3428 "error" : function (XMLHttpRequest, textStatus, errorThrown) {
\r
3437 function siderBarMenuAuthentication() {
\r
3439 var menuids = new Array();
\r
3440 var lcsoperations = new Array();
\r
3441 //从页面DOM取得菜单license项。
\r
3442 $('a[licenseid]', $('.page-sidebar-menu')).each(function () {
\r
3443 var licenseid = $(this).attr("licenseid");
\r
3445 lcsoperations.push(licenseid);
\r
3446 var id = $(this).attr("id");
\r
3450 var lcsrights = getLcsRight(lcsoperations);// 取得license数据。
\r
3451 if (lcsrights && (lcsrights.length == menuids.length)) {
\r
3452 // 根据后台license值判断所在菜单项是否显示
\r
3453 for (var i = 0; i < menuids.length; i++) {
\r
3454 var id = menuids[i];
\r
3455 var lcskey = lcsoperations[i];
\r
3456 var lcsitem = lcsrights[i];
\r
3457 // 菜单项如果配了licenseid, 并且不是true字符串, 则移除菜单项
\r
3458 if (lcsitem.value != "True") {
\r
3459 $('#'+id, $('.page-sidebar-menu')).parent().remove();
\r
3463 var operations = new Array();
\r
3464 $('a[operation]', $('.page-sidebar-menu')).each(function () {
\r
3465 var operation = $(this).attr("operation");
\r
3467 operations.push(operation);
\r
3469 }); // 遍历菜单项,提取所有的操作码
\r
3470 var rightObj = getAllOperCodeRights(operations); // 对操作码进行鉴权判断
\r
3471 $('a[operation]', $('.page-sidebar-menu')).each(function () {
\r
3472 var operation = $(this).attr("operation");
\r
3474 if (!hasRight(operation, rightObj)) {
\r
3475 $(this).parent("li").remove(); // 删除没有权限的菜单项
\r
3479 rebuildSiderBarMenu();
\r
3482 function horMenuAuthentication( horMenuId ) {
\r
3484 var menuids = new Array();
\r
3485 var lcsoperations = new Array();
\r
3486 //从页面DOM取得菜单license项。
\r
3487 $('a[licenseid]', $('#'+ horMenuId)).each(function () {
\r
3488 var licenseid = $(this).attr("licenseid");
\r
3490 lcsoperations.push(licenseid);
\r
3491 var id = $(this).attr("id");
\r
3495 var lcsrights = getLcsRight(lcsoperations);// 取得license数据。
\r
3496 if (lcsrights && (lcsrights.length == menuids.length)) {
\r
3497 // 根据后台license值判断所在菜单项是否显示
\r
3498 for (var i = 0; i < menuids.length; i++) {
\r
3499 var id = menuids[i];
\r
3500 var lcskey = lcsoperations[i];
\r
3501 var lcsitem = lcsrights[i];
\r
3502 // 菜单项如果配了licenseid, 并且不是true字符串, 则移除菜单项
\r
3503 if (lcsitem.value != "True") {
\r
3504 $('#'+id, $('#'+ horMenuId)).parent().remove();
\r
3508 var operations = new Array();
\r
3509 $('a[operation]', $('#'+ horMenuId)).each(function () {
\r
3510 var operation = $(this).attr("operation");
\r
3512 operations.push(operation);
\r
3514 }); // 遍历菜单项,提取所有的操作码
\r
3515 var rightObj = getAllOperCodeRights(operations); // 对操作码进行鉴权判断
\r
3516 $('a[operation]', $('#'+ horMenuId)).each(function () {
\r
3517 var operation = $(this).attr("operation");
\r
3519 if (!hasRight(operation, rightObj)) {
\r
3520 $(this).parent("li").remove(); // 删除没有权限的菜单项
\r
3528 function groupButtonAuthentication() {
\r
3530 var menuids = new Array();
\r
3531 var lcsoperations = new Array();
\r
3532 //从页面DOM取得菜单license项。
\r
3533 $('a[licenseid]', $('.more-botton-zone > li.btn-group')).each(function () {
\r
3534 var licenseid = $(this).attr("licenseid");
\r
3536 lcsoperations.push(licenseid);
\r
3537 var id = $(this).attr("id");
\r
3541 var lcsrights = getLcsRight(lcsoperations);// 取得license数据。
\r
3542 if (lcsrights && (lcsrights.length == menuids.length)) {
\r
3543 // 根据后台license值判断所在菜单项是否显示
\r
3544 for (var i = 0; i < menuids.length; i++) {
\r
3545 var id = menuids[i];
\r
3546 var lcskey = lcsoperations[i];
\r
3547 var lcsitem = lcsrights[i];
\r
3548 // 菜单项如果配了licenseid, 并且不是true字符串, 则移除菜单项
\r
3549 if (lcsitem.value != "True") {
\r
3550 $('#'+id, $('.more-botton-zone > li.btn-group')).parent().remove();
\r
3554 // 增加mysql判断,如果数据库为mysql,去掉基础数据备份功能菜单项
\r
3555 var dbType = openoFrameWork_conf.dbType;
\r
3556 if (dbType == "mysql") {
\r
3557 $("#uep-ict-backup-baseDataBack",$('.more-botton-zone > li.btn-group')).parent().remove();
\r
3559 var operations = new Array();
\r
3560 $('a[operation]', $('.more-botton-zone > li.btn-group')).each(function () {
\r
3561 var operation = $(this).attr("operation");
\r
3563 operations.push(operation);
\r
3565 }); // 遍历菜单项,提取所有的操作码
\r
3566 var rightObj = getAllOperCodeRights(operations); // 对操作码进行鉴权判断
\r
3567 $('a[operation]', $('.more-botton-zone > li.btn-group')).each(function () {
\r
3568 var operation = $(this).attr("operation");
\r
3570 if (!hasRight(operation, rightObj)) {
\r
3571 $(this).parent("li").remove(); // 删除没有权限的菜单项
\r
3575 // 如果“更多菜单”下没有子菜单了,则删除整个“更多菜单”下拉框。
\r
3576 if ($('li > a', $('.more-botton-zone > li.btn-group')).length == 0) {
\r
3577 $('.more-botton-zone > li.btn-group').remove();
\r
3580 // 删除没有子菜单的一级菜单,查看新菜单是否配了登录默认页面,如没有则指定第一个有权限的菜单作为登录后默认页面
\r
3581 function rebuildSiderBarMenu() {
\r
3582 if ($('a.start').length == 0) {
\r
3583 $('li > a[href!="javascript:;"]', $('.page-sidebar-menu')).eq(0).addClass("start");
\r
3585 $('ul.sub-menu', $('.page-sidebar-menu')).each(function () {
\r
3586 if ($(this).has('li').length == 0) {
\r
3587 $(this).parent("li").remove();
\r
3591 // 删除没有子菜单的一级菜单,查看新菜单是否配了登录默认页面,如没有则指定第一个有权限的菜单作为登录后默认页面
\r
3592 function rebuildHorMenu() {
\r
3593 if ($('a.start').length == 0) {
\r
3594 $('li > a[href!="#"]', $('#main_hormenu')).eq(0).addClass("start");
\r
3596 $('ul.mega-menu-submenu', $('#main_hormenu')).each(function () {
\r
3597 if ($(this).has('li > a').length == 0) {
\r
3598 $(this).remove(); // 删空的分组列
\r
3602 $('div.zteDivWidth', $('#main_hormenu')).each(function () {
\r
3603 if ($(this).has('ul').length == 0) {
\r
3604 $(this).remove(); // 删空的分组列
\r
3607 $('ul.dropdown-menu', $('#main_hormenu')).each(function () {
\r
3608 if ($(this).has('ul').length == 0) {
\r
3609 $(this).parent("li").remove(); // 删空的一级菜单栏
\r
3612 $('li.divider', $('#main_hormenu')).each(function () {
\r
3613 if ($(this).next().hasClass('divider')) {
\r
3614 $(this).remove(); // 连续出现分隔线则删除一个
\r
3617 $('li.divider', $('#main_hormenu')).each(function () {
\r
3618 if ($(this).next().length == 0) {
\r
3619 $(this).remove(); // 如果分隔线在最后一行,则删除之
\r
3624 function getAllOperCodeRights(operations) {
\r
3625 var rights = new Array();
\r
3626 if( operations && operations.length > 0 ){
\r
3628 "operations" : operations
\r
3630 var sendData = JSON.stringify(data);
\r
3631 var url=FrameConst.REST_CHECKRIGHT + "?data=" + sendData + "&tmpstamp=" + new Date().getTime();
\r
3632 url=openoFrameWork.handlBaseURL(url);
\r
3634 "dataType" : 'json',
\r
3639 //"contentType" : 'application/json; charset=utf-8',
\r
3640 "success" : function (response) {
\r
3641 rights = response.value;
\r
3643 "error" : function (XMLHttpRequest, textStatus, errorThrown) {
\r
3644 if (XMLHttpRequest.status == 401) {
\r
3645 window.location.replace("login.html");
\r
3647 console.log('Communication Error!');
\r
3653 opCodes : operations,
\r
3658 function hasRight(opCode, rightObj) {
\r
3659 for (var i = 0; i < rightObj.opCodes.length; i++) {
\r
3660 if (rightObj.opCodes[i] == opCode) {
\r
3661 return (rightObj.rights[i] == true);
\r
3666 // 处理mysql环境下备份菜单的合并问题
\r
3667 function dealMysqlBackupMenu() {
\r
3668 var dbType = openoFrameWork_conf.dbType;
\r
3669 if (dbType !== undefined && dbType !== "mysql") {
\r
3672 var sidermenu = $("[class='page-sidebar-menu']");
\r
3673 var hormenu = $(".hormenu");
\r
3674 //这段代码先这么写,html的位置不一定正确,如果后面位置不一致,再修改。
\r
3675 if (sidermenu.length > 0 && $('#uep-ict-backup-dataBackup').length > 0) {
\r
3676 $('#uep-ict-backup-dataBackup', sidermenu).attr("breadcrumGroupButtonSrc", ICTFRAME_CONST_DATABACKUP_PATH);
\r
3678 if (hormenu.length > 0 && $('#uep-ict-backup-dataBackup').length > 0) {
\r
3679 $('#uep-ict-backup-dataBackup', hormenu).attr("breadcrumGroupButtonSrc", ICTFRAME_CONST_DATABACKUP_PATH);
\r
3680 $('#uep-ict-backup-dataBackup').parent('li').attr('style', 'display:block');
\r
3681 $('#uep-ict-backup-allDbStructBackup').parent('li').attr('style', 'display:none');
\r
3682 $('#uep-ict-backup-baseDataBack').parent('li').attr('style', 'display:none');
\r
3685 // 浏览器缩小后导航栏隐藏的情况下点击navbar-toggle显示菜单的前置工作,
\r
3686 // 浏览器缩小后导航栏隐藏的情况下点击navbar-toggle显示菜单的前置工作,
\r
3687 function dealMavToggle(navtoggle) {
\r
3688 var sidermenu = $("#page-sidebar-menu");
\r
3689 var hormenu = $("#main_hormenu");
\r
3690 var panel = $(".zte-theme-panel");
\r
3691 var siderbarpos = $(".nav-pos-direction", panel).val()
\r
3692 if ("hidden" == $(navtoggle).attr("navtoggledispattr")) {
\r
3693 $(navtoggle).attr("navtoggledispattr", "display");
\r
3694 sidermenu.css('display','block');//侧边栏显示
\r
3695 hormenu.css("display", "none");//隐藏水平菜单栏
\r
3697 $(navtoggle).attr("navtoggledispattr", "hidden");
\r
3698 sidermenu.css('display','none');//侧边栏隐藏
\r
3699 hormenu.css("display", "none");
\r