index.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. /**
  2. * 首页方法封装处理
  3. * Copyright (c) 2019 ruoyi
  4. */
  5. layer.config({
  6. extend: 'moon/style.css',
  7. skin: 'layer-ext-moon'
  8. });
  9. var isMobile = false;
  10. var sidebarHeight = isMobile ? '100%' : '96%';
  11. $(function() {
  12. // MetsiMenu
  13. $('#side-menu').metisMenu();
  14. // 固定菜单栏
  15. $('.sidebar-collapse').slimScroll({
  16. height: sidebarHeight,
  17. railOpacity: 0.9,
  18. alwaysVisible: false
  19. });
  20. // 菜单切换
  21. $('.navbar-minimalize').click(function() {
  22. if (isMobile) {
  23. $("body").toggleClass("canvas-menu");
  24. } else {
  25. $("body").toggleClass("mini-navbar");
  26. }
  27. SmoothlyMenu();
  28. });
  29. $('#side-menu>li').click(function() {
  30. if ($('body').hasClass('canvas-menu mini-navbar')) {
  31. NavToggle();
  32. }
  33. });
  34. $('#side-menu>li li a:not(:has(span))').click(function() {
  35. if ($(window).width() < 769) {
  36. NavToggle();
  37. }
  38. });
  39. $('.nav-close').click(NavToggle);
  40. //ios浏览器兼容性处理
  41. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  42. $('#content-main').css('overflow-y', 'auto');
  43. }
  44. });
  45. $(window).bind("load resize", function() {
  46. isMobile = $.common.isMobile() || $(window).width() < 769;
  47. if (isMobile) {
  48. $('body').addClass('canvas-menu');
  49. $("body").removeClass("mini-navbar");
  50. $("nav .logo").addClass("hide");
  51. $(".slimScrollDiv").css({ "overflow": "hidden" });
  52. $('.navbar-static-side').fadeOut();
  53. } else {
  54. if($('body').hasClass('canvas-menu')) {
  55. $('body').addClass('fixed-sidebar');
  56. $('body').removeClass('canvas-menu');
  57. $("body").removeClass("mini-navbar");
  58. $("nav .logo").removeClass("hide");
  59. $(".slimScrollDiv").css({ "overflow": "visible" });
  60. $('.navbar-static-side').fadeIn();
  61. }
  62. }
  63. });
  64. function syncMenuTab(dataId) {
  65. if(isLinkage) {
  66. var $dataObj = $('a[href$="' + decodeURI(dataId) + '"]');
  67. if ($dataObj.attr("class") != null && !$dataObj.hasClass("noactive")) {
  68. $('.nav ul').removeClass("in");
  69. $dataObj.parents("ul").addClass("in")
  70. $dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
  71. $dataObj.parents("ul").css('height', 'auto').height();
  72. $(".nav ul li, .nav li").removeClass("selected");
  73. $dataObj.parent("li").addClass("selected");
  74. setIframeUrl(dataId);
  75. // 顶部菜单同步处理
  76. var tabStr = $dataObj.parents(".tab-pane").attr("id");
  77. if ($.common.isNotEmpty(tabStr)) {
  78. var sepIndex = tabStr.lastIndexOf('_');
  79. var menuId = tabStr.substring(sepIndex + 1, tabStr.length);
  80. $("#tab_" + menuId + " a").click();
  81. }
  82. }
  83. }
  84. }
  85. function NavToggle() {
  86. $('.navbar-minimalize').trigger('click');
  87. }
  88. function fixedSidebar() {
  89. $('#side-menu').hide();
  90. $("nav .logo").addClass("hide");
  91. setTimeout(function() {
  92. $('#side-menu').fadeIn(500);
  93. }, 100);
  94. }
  95. // 设置锚点
  96. function setIframeUrl(href) {
  97. if($.common.equals("history", mode)) {
  98. storage.set('publicPath', href);
  99. } else {
  100. var nowUrl = window.location.href;
  101. var newUrl = nowUrl.substring(0, nowUrl.indexOf("#"));
  102. window.location.href = newUrl + "#" + href;
  103. }
  104. }
  105. function SmoothlyMenu() {
  106. if (isMobile && !$('body').hasClass('canvas-menu')) {
  107. $('.navbar-static-side').fadeIn();
  108. fixedSidebar();
  109. } else if (!isMobile &&!$('body').hasClass('mini-navbar')) {
  110. fixedSidebar();
  111. $("nav .logo").removeClass("hide");
  112. } else if (isMobile && $('body').hasClass('fixed-sidebar')) {
  113. $('.navbar-static-side').fadeOut();
  114. fixedSidebar();
  115. } else if (!isMobile && $('body').hasClass('fixed-sidebar')) {
  116. fixedSidebar();
  117. } else {
  118. $('#side-menu').removeAttr('style');
  119. }
  120. }
  121. /**
  122. * iframe处理
  123. */
  124. $(function() {
  125. //计算元素集合的总宽度
  126. function calSumWidth(elements) {
  127. var width = 0;
  128. $(elements).each(function() {
  129. width += $(this).outerWidth(true);
  130. });
  131. return width;
  132. }
  133. // 激活指定选项卡
  134. function setActiveTab(element) {
  135. if (!$(element).hasClass('active')) {
  136. var currentId = $(element).data('id');
  137. syncMenuTab(currentId);
  138. // 显示tab对应的内容区
  139. $('.RuoYi_iframe').each(function() {
  140. if ($(this).data('id') == currentId) {
  141. $(this).show().siblings('.RuoYi_iframe').hide();
  142. }
  143. });
  144. $(element).addClass('active').siblings('.menuTab').removeClass('active');
  145. scrollToTab(element);
  146. }
  147. }
  148. //滚动到指定选项卡
  149. function scrollToTab(element) {
  150. var marginLeftVal = calSumWidth($(element).prevAll()),
  151. marginRightVal = calSumWidth($(element).nextAll());
  152. // 可视区域非tab宽度
  153. var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
  154. //可视区域tab宽度
  155. var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
  156. //实际滚动宽度
  157. var scrollVal = 0;
  158. if ($(".page-tabs-content").outerWidth() < visibleWidth) {
  159. scrollVal = 0;
  160. } else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
  161. if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
  162. scrollVal = marginLeftVal;
  163. var tabElement = element;
  164. while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) {
  165. scrollVal -= $(tabElement).prev().outerWidth();
  166. tabElement = $(tabElement).prev();
  167. }
  168. }
  169. } else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
  170. scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
  171. }
  172. $('.page-tabs-content').animate({ marginLeft: 0 - scrollVal + 'px' }, "fast");
  173. }
  174. //查看左侧隐藏的选项卡
  175. function scrollTabLeft() {
  176. var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
  177. // 可视区域非tab宽度
  178. var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
  179. //可视区域tab宽度
  180. var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
  181. //实际滚动宽度
  182. var scrollVal = 0;
  183. if (($(".page-tabs-content").width()) < visibleWidth) {
  184. return false;
  185. } else {
  186. var tabElement = $(".menuTab:first");
  187. var offsetVal = 0;
  188. while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
  189. offsetVal += $(tabElement).outerWidth(true);
  190. tabElement = $(tabElement).next();
  191. }
  192. offsetVal = 0;
  193. if (calSumWidth($(tabElement).prevAll()) > visibleWidth) {
  194. while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
  195. offsetVal += $(tabElement).outerWidth(true);
  196. tabElement = $(tabElement).prev();
  197. }
  198. scrollVal = calSumWidth($(tabElement).prevAll());
  199. }
  200. }
  201. $('.page-tabs-content').animate({ marginLeft: 0 - scrollVal + 'px' }, "fast");
  202. }
  203. //查看右侧隐藏的选项卡
  204. function scrollTabRight() {
  205. var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
  206. // 可视区域非tab宽度
  207. var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
  208. //可视区域tab宽度
  209. var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
  210. //实际滚动宽度
  211. var scrollVal = 0;
  212. if ($(".page-tabs-content").width() < visibleWidth) {
  213. return false;
  214. } else {
  215. var tabElement = $(".menuTab:first");
  216. var offsetVal = 0;
  217. while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
  218. offsetVal += $(tabElement).outerWidth(true);
  219. tabElement = $(tabElement).next();
  220. }
  221. offsetVal = 0;
  222. while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
  223. offsetVal += $(tabElement).outerWidth(true);
  224. tabElement = $(tabElement).next();
  225. }
  226. scrollVal = calSumWidth($(tabElement).prevAll());
  227. if (scrollVal > 0) {
  228. $('.page-tabs-content').animate({ marginLeft: 0 - scrollVal + 'px' }, "fast");
  229. }
  230. }
  231. }
  232. //通过遍历给菜单项加上data-index属性
  233. $(".menuItem").each(function(index) {
  234. if (!$(this).attr('data-index')) {
  235. $(this).attr('data-index', index);
  236. }
  237. });
  238. function menuItem() {
  239. // 获取标识数据
  240. var dataUrl = $(this).attr('href'),
  241. dataIndex = $(this).data('index'),
  242. menuName = $(this).data('title') || $.trim($(this).text()),
  243. isRefresh = $(this).data("refresh"),
  244. flag = true;
  245. var $dataObj = $('a[href$="' + decodeURI(dataUrl) + '"]');
  246. if (!$dataObj.hasClass("noactive")) {
  247. $('.tab-pane li').removeClass("active");
  248. $('.nav ul').removeClass("in");
  249. $dataObj.parents("ul").addClass("in")
  250. $dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
  251. $dataObj.parents("ul").css('height', 'auto').height();
  252. $(".nav ul li, .nav li").removeClass("selected");
  253. $(this).parent("li").addClass("selected");
  254. }
  255. setIframeUrl(dataUrl);
  256. if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
  257. // 选项卡菜单已存在
  258. $('.menuTab').each(function() {
  259. if ($(this).data('id') == dataUrl) {
  260. if (!$(this).hasClass('active')) {
  261. $(this).addClass('active').siblings('.menuTab').removeClass('active');
  262. scrollToTab(this);
  263. // 显示tab对应的内容区
  264. $('.mainContent .RuoYi_iframe').each(function() {
  265. if ($(this).data('id') == dataUrl) {
  266. $(this).show().siblings('.RuoYi_iframe').hide();
  267. return false;
  268. }
  269. });
  270. }
  271. if (isRefresh) {
  272. refreshTab();
  273. }
  274. flag = false;
  275. return false;
  276. }
  277. });
  278. // 选项卡菜单不存在
  279. if (flag) {
  280. var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
  281. $('.menuTab').removeClass('active');
  282. // 添加选项卡对应的iframe
  283. var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" data-refresh="' + isRefresh + '" seamless></iframe>';
  284. $('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
  285. $.modal.loading("数据加载中,请稍候...");
  286. $('.mainContent iframe:visible').on('load', function() {
  287. $.modal.closeLoading();
  288. });
  289. // 添加选项卡
  290. $('.menuTabs .page-tabs-content').append(str);
  291. scrollToTab($('.menuTab.active'));
  292. }
  293. return false;
  294. }
  295. function menuBlank() {
  296. // 新窗口打开外网以http://开头,如http://ruoyi.vip
  297. var dataUrl = $(this).attr('href');
  298. window.open(dataUrl);
  299. return false;
  300. }
  301. $('.menuItem').on('click', menuItem);
  302. $('.menuBlank').on('click', menuBlank);
  303. var menuShou = false;
  304. $("#shouqiMenu").on('click',function(){
  305. if(!menuShou){
  306. $("#comDiv").css("width","95.5%");
  307. $("#headMenuDiv").css("width","95.5%");
  308. $("#navMenuIndex").removeClass("navMenuIndexMeClass");
  309. menuShou =true;
  310. }else{
  311. $("#comDiv").css("width","87%");
  312. $("#headMenuDiv").css("width","87%");
  313. $("#navMenuIndex").addClass("navMenuIndexMeClass");
  314. menuShou =false;
  315. }
  316. });
  317. // 关闭选项卡菜单
  318. function closeTab() {
  319. var closeTabId = $(this).parents('.menuTab').data('id');
  320. var currentWidth = $(this).parents('.menuTab').width();
  321. var panelUrl = $(this).parents('.menuTab').data('panel');
  322. // 当前元素处于活动状态
  323. if ($(this).parents('.menuTab').hasClass('active')) {
  324. // 当前元素后面有同辈元素,使后面的一个元素处于活动状态
  325. if ($(this).parents('.menuTab').next('.menuTab').length) {
  326. var activeId = $(this).parents('.menuTab').next('.menuTab:eq(0)').data('id');
  327. $(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active');
  328. $('.mainContent .RuoYi_iframe').each(function() {
  329. if ($(this).data('id') == activeId) {
  330. $(this).show().siblings('.RuoYi_iframe').hide();
  331. return false;
  332. }
  333. });
  334. var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left'));
  335. if (marginLeftVal < 0) {
  336. $('.page-tabs-content').animate({ marginLeft: (marginLeftVal + currentWidth) + 'px' }, "fast");
  337. }
  338. // 移除当前选项卡
  339. $(this).parents('.menuTab').remove();
  340. // 移除tab对应的内容区
  341. $('.mainContent .RuoYi_iframe').each(function() {
  342. if ($(this).data('id') == closeTabId) {
  343. $(this).remove();
  344. return false;
  345. }
  346. });
  347. }
  348. // 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态
  349. if ($(this).parents('.menuTab').prev('.menuTab').length) {
  350. var activeId = $(this).parents('.menuTab').prev('.menuTab:last').data('id');
  351. $(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
  352. $('.mainContent .RuoYi_iframe').each(function() {
  353. if ($(this).data('id') == activeId) {
  354. $(this).show().siblings('.RuoYi_iframe').hide();
  355. return false;
  356. }
  357. });
  358. // 移除当前选项卡
  359. $(this).parents('.menuTab').remove();
  360. // 移除tab对应的内容区
  361. $('.mainContent .RuoYi_iframe').each(function() {
  362. if ($(this).data('id') == closeTabId) {
  363. $(this).remove();
  364. return false;
  365. }
  366. });
  367. if($.common.isNotEmpty(panelUrl)){
  368. $('.menuTab[data-id="' + panelUrl + '"]').addClass('active').siblings('.menuTab').removeClass('active');
  369. $('.mainContent .RuoYi_iframe').each(function() {
  370. if ($(this).data('id') == panelUrl) {
  371. $(this).show().siblings('.RuoYi_iframe').hide();
  372. return false;
  373. }
  374. });
  375. }
  376. }
  377. }
  378. // 当前元素不处于活动状态
  379. else {
  380. // 移除当前选项卡
  381. $(this).parents('.menuTab').remove();
  382. // 移除相应tab对应的内容区
  383. $('.mainContent .RuoYi_iframe').each(function() {
  384. if ($(this).data('id') == closeTabId) {
  385. $(this).remove();
  386. return false;
  387. }
  388. });
  389. }
  390. scrollToTab($('.menuTab.active'));
  391. syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
  392. return false;
  393. }
  394. $('.menuTabs').on('click', '.menuTab i', closeTab);
  395. //滚动到已激活的选项卡
  396. function showActiveTab() {
  397. scrollToTab($('.menuTab.active'));
  398. }
  399. $('.tabShowActive').on('click', showActiveTab);
  400. // 点击选项卡菜单
  401. function activeTab() {
  402. if (!$(this).hasClass('active')) {
  403. var currentId = $(this).data('id');
  404. var isRefresh = false;
  405. syncMenuTab(currentId);
  406. // 显示tab对应的内容区
  407. $('.mainContent .RuoYi_iframe').each(function() {
  408. if ($(this).data('id') == currentId) {
  409. $(this).show().siblings('.RuoYi_iframe').hide();
  410. isRefresh = $(this).data('refresh');
  411. return false;
  412. }
  413. });
  414. $(this).addClass('active').siblings('.menuTab').removeClass('active');
  415. if (isRefresh) {
  416. refreshTab();
  417. }
  418. scrollToTab(this);
  419. }
  420. }
  421. // 点击选项卡菜单
  422. $('.menuTabs').on('click', '.menuTab', activeTab);
  423. // 刷新iframe
  424. function refreshTab() {
  425. var currentId = $('.page-tabs-content').find('.active').attr('data-id');
  426. var target = $('.RuoYi_iframe[data-id="' + currentId + '"]');
  427. var url = target.attr('src');
  428. target.attr('src', url).ready();
  429. }
  430. // 页签全屏
  431. function fullScreenTab() {
  432. var currentId = $('.page-tabs-content').find('.active').attr('data-id');
  433. var target = $('.RuoYi_iframe[data-id="' + currentId + '"]');
  434. target.fullScreen(true);
  435. }
  436. // 关闭当前选项卡
  437. function tabCloseCurrent() {
  438. $('.page-tabs-content').find('.active i').trigger("click");
  439. }
  440. //关闭其他选项卡
  441. function tabCloseOther() {
  442. $('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function() {
  443. $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
  444. $(this).remove();
  445. });
  446. $('.page-tabs-content').animate({ marginLeft: '0px' }, "fast");
  447. }
  448. // 关闭全部选项卡
  449. function tabCloseAll() {
  450. $('.page-tabs-content').children("[data-id]").not(":first").each(function() {
  451. $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
  452. $(this).remove();
  453. });
  454. $('.page-tabs-content').children("[data-id]:first").each(function() {
  455. $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').show();
  456. $(this).addClass("active");
  457. });
  458. $('.page-tabs-content').css("margin-left", "0");
  459. syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
  460. }
  461. // 全屏显示
  462. $('#fullScreen').on('click', function () {
  463. $(document).toggleFullScreen();
  464. });
  465. $(document).toggleFullScreen();
  466. // 锁定屏幕
  467. $('#lockScreen').on('click', function () {
  468. storage.set('lockPath', $('.page-tabs-content').find('.active').attr('data-id'));
  469. location.href = ctx + "lockscreen";
  470. });
  471. var menuFlag = false;//是否隐藏
  472. // 极简模式切换
  473. $('#hideMenu').on('click', function () {
  474. hideModel();
  475. });
  476. $('#showMenu').on('click', function () {
  477. hideModel();
  478. });
  479. //TODO 子窗口调用
  480. top.window.tagObj = hideModel;
  481. top.window.tagFull = fullScreenTab;
  482. top.window.tagMenu = menuFlag;
  483. function viewClassAD() {
  484. if(menuFlag){
  485. // $("#content-main").addClass("viewHeight");
  486. }else{
  487. // $("#content-main").removeClass("viewHeight");
  488. }
  489. }
  490. //极简模式切换
  491. function hideModel() {
  492. //找到菜单栏元素以及右侧部分
  493. let $menu = $("#navMenuIndex");
  494. let $right = $("#page-wrapper");//此上两元素是控制菜单栏的
  495. let $comDiv = $("#comDiv");//精细div
  496. let $simpleDiv = $("#simpleDiv");//极简div
  497. let $headMenuDiv = $("#headMenuDiv");
  498. if(!menuFlag){
  499. menuFlag = true;
  500. // $menu.addClass("menuClass");
  501. $right.addClass("rightClass");
  502. $menu.hide();
  503. $comDiv.hide();
  504. $headMenuDiv.hide();
  505. $simpleDiv.show();
  506. tabCloseAll();//关闭所有页
  507. // activeOneTab();//点击首页然后显示首页
  508. $('#content-main').toggleClass('max');
  509. $("#content-main").removeClass("contentPositClass");
  510. }else{
  511. menuFlag = false;
  512. $right.removeClass("rightClass");
  513. $menu.show();
  514. $comDiv.show();
  515. $headMenuDiv.show();
  516. $simpleDiv.hide();
  517. $('#content-main').toggleClass('max');
  518. $("#content-main").addClass("contentPositClass");
  519. }
  520. viewClassAD();
  521. }
  522. function activeOneTab() {
  523. if (!$(this).hasClass('active')) {
  524. var currentId = "/system/main";
  525. var isRefresh = false;
  526. syncMenuTab(currentId);
  527. // 显示tab对应的内容区
  528. $('.mainContent .RuoYi_iframe').each(function() {
  529. if ($(this).data('id') == currentId) {
  530. $(this).show().siblings('.RuoYi_iframe').hide();
  531. isRefresh = $(this).data('refresh');
  532. return false;
  533. }
  534. });
  535. $(this).addClass('active').siblings('.menuTab').removeClass('active');
  536. if (isRefresh) {
  537. refreshTab();
  538. }
  539. scrollToTab(this);
  540. }
  541. }
  542. hideModel();//默认隐藏
  543. // 页签刷新按钮
  544. $('.tabReload').on('click', refreshTab);
  545. // 页签全屏按钮
  546. $('.tabFullScreen').on('click', fullScreenTab);
  547. // 双击选项卡全屏显示
  548. $('.menuTabs').on('dblclick', '.menuTab', activeTabMax);
  549. // 左移按扭
  550. $('.tabLeft').on('click', scrollTabLeft);
  551. // 右移按扭
  552. $('.tabRight').on('click', scrollTabRight);
  553. // 关闭当前
  554. $('.tabCloseCurrent').on('click', tabCloseCurrent);
  555. // 关闭其他
  556. $('.tabCloseOther').on('click', tabCloseOther);
  557. // 关闭全部
  558. $('.tabCloseAll').on('click', tabCloseAll);
  559. // tab全屏显示
  560. $('.tabMaxCurrent').on('click', function () {
  561. $('.page-tabs-content').find('.active').trigger("dblclick");
  562. });
  563. // 关闭全屏
  564. $('#ax_close_max').click(function(){
  565. $('#content-main').toggleClass('max');
  566. $('#ax_close_max').hide();
  567. })
  568. // 双击选项卡全屏显示
  569. function activeTabMax() {
  570. $('#content-main').toggleClass('max');
  571. $('#ax_close_max').show();
  572. }
  573. $(window).keydown(function(event) {
  574. if (event.keyCode == 27) {
  575. $('#content-main').removeClass('max');
  576. $('#ax_close_max').hide();
  577. }
  578. });
  579. window.onhashchange = function() {
  580. var hash = location.hash;
  581. var url = hash.substring(1, hash.length);
  582. $('a[href$="' + url + '"]').click();
  583. };
  584. // 右键菜单实现
  585. $.contextMenu({
  586. selector: ".menuTab",
  587. trigger: 'right',
  588. autoHide: true,
  589. items: {
  590. "close_current": {
  591. name: "关闭当前",
  592. icon: "fa-close",
  593. callback: function(key, opt) {
  594. opt.$trigger.find('i').trigger("click");
  595. }
  596. },
  597. "close_other": {
  598. name: "关闭其他",
  599. icon: "fa-window-close-o",
  600. callback: function(key, opt) {
  601. setActiveTab(this);
  602. tabCloseOther();
  603. }
  604. },
  605. "close_left": {
  606. name: "关闭左侧",
  607. icon: "fa-reply",
  608. callback: function(key, opt) {
  609. setActiveTab(this);
  610. this.prevAll('.menuTab').not(":last").each(function() {
  611. if ($(this).hasClass('active')) {
  612. setActiveTab(this);
  613. }
  614. $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
  615. $(this).remove();
  616. });
  617. $('.page-tabs-content').animate({ marginLeft: '0px' }, "fast");
  618. }
  619. },
  620. "close_right": {
  621. name: "关闭右侧",
  622. icon: "fa-share",
  623. callback: function(key, opt) {
  624. setActiveTab(this);
  625. this.nextAll('.menuTab').each(function() {
  626. $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
  627. $(this).remove();
  628. });
  629. }
  630. },
  631. "close_all": {
  632. name: "全部关闭",
  633. icon: "fa-window-close",
  634. callback: function(key, opt) {
  635. tabCloseAll();
  636. }
  637. },
  638. "step": "---------",
  639. "full": {
  640. name: "全屏显示",
  641. icon: "fa-arrows-alt",
  642. callback: function(key, opt) {
  643. setActiveTab(this);
  644. var target = $('.RuoYi_iframe[data-id="' + this.data('id') + '"]');
  645. target.fullScreen(true);
  646. }
  647. },
  648. "refresh": {
  649. name: "刷新页面",
  650. icon: "fa-refresh",
  651. callback: function(key, opt) {
  652. setActiveTab(this);
  653. var target = $('.RuoYi_iframe[data-id="' + this.data('id') + '"]');
  654. var url = target.attr('src');
  655. $.modal.loading("数据加载中,请稍候...");
  656. target.attr('src', url).on('load', function() {
  657. $.modal.closeLoading();
  658. });
  659. }
  660. },
  661. "open": {
  662. name: "新窗口打开",
  663. icon: "fa-link",
  664. callback: function(key, opt) {
  665. var target = $('.RuoYi_iframe[data-id="' + this.data('id') + '"]');
  666. window.open(target.attr('src'));
  667. }
  668. },
  669. }
  670. });
  671. });