admin.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. /*
  2. * @Author: https://github.com/WangEn
  3. * @Author: https://gitee.com/lovetime/
  4. * @Date: 2018-01-01
  5. * @lastModify 2019-06-20 17:23:47
  6. * +----------------------------------------------------------------------
  7. * | Weadmin [ 后台管理模板 ]
  8. * | 基于Layui http://www.layui.com/
  9. * +----------------------------------------------------------------------
  10. */
  11. layui.define(['jquery', 'form', 'layer', 'element'], function(exports) {
  12. var $ = layui.jquery,
  13. form = layui.form,
  14. layer = layui.layer,
  15. element = layui.element;
  16. var menu = [];
  17. var curMenu;
  18. /*
  19. * @todo 初始化加载完成执行方法
  20. * 打开或刷新后执行
  21. */
  22. $(function() {
  23. /*
  24. * @todo 读取本地存储中记录的已打开的tab项
  25. * 刷新后,读取记录,打开原来已打开的tab项
  26. */
  27. /*
  28. * @todo table事件
  29. */
  30. tableCheck = {
  31. init: function() {
  32. $(".layui-form-checkbox").click(function(event) {
  33. if($(this).hasClass('layui-form-checked')) {
  34. $(this).removeClass('layui-form-checked');
  35. if($(this).hasClass('header')) {
  36. $(".layui-form-checkbox").removeClass('layui-form-checked');
  37. }
  38. } else {
  39. $(this).addClass('layui-form-checked');
  40. if($(this).hasClass('header')) {
  41. $(".layui-form-checkbox").addClass('layui-form-checked');
  42. }
  43. }
  44. });
  45. },
  46. getData: function() {
  47. var obj = $(".layui-form-checked").not('.header');
  48. var arr = [];
  49. obj.each(function(index, el) {
  50. arr.push(obj.eq(index).attr('data-id'));
  51. });
  52. return arr;
  53. }
  54. }
  55. //开启表格多选
  56. tableCheck.init();
  57. //延时加载
  58. setTimeout(function() {
  59. if(sessionStorage.getItem("menu")) {
  60. menu = JSON.parse(sessionStorage.getItem("menu"));
  61. for(var i = 0; i < menu.length; i++) {
  62. tab.tabAdd(menu[i].title, menu[i].url, menu[i].id);
  63. }
  64. } else {
  65. return false;
  66. }
  67. if(sessionStorage.getItem("curMenu")) {
  68. $('.layui-tab-title').find('layui-this').removeClass('layui-class');
  69. curMenu = JSON.parse(sessionStorage.getItem("curMenu"));
  70. id = curMenu.id;
  71. if(id) { //因为默认桌面首页不存在lay-id,所以要对此判断
  72. $('.layui-tab-title li[lay-id="' + id + '"]').addClass('layui-this');
  73. tab.tabChange(id);
  74. } else {
  75. $(".layui-tab-title li").eq(0).addClass('layui-this'); //未生效
  76. $('.layui-tab-content iframe').eq(0).parent().addClass('layui-show');
  77. }
  78. } else {
  79. $(".layui-tab-title li").eq(0).addClass('layui-this'); //未生效
  80. $('.layui-tab-content iframe').eq(0).parent().addClass('layui-show');
  81. }
  82. }, 100);
  83. //点击tab标题时,触发reloadTab函数
  84. $('#tabName').on('click','li',function(){
  85. reloadTab(this);
  86. });
  87. //初始化加载结束
  88. });
  89. /*
  90. * @todo 左侧导航菜单的显示和隐藏
  91. */
  92. // $('.container .left_open i').click(function(event) {
  93. $('.container').on('click', '.left_open i', function(event) {
  94. if($('.left-nav').css('left') == '0px') {
  95. //此处左侧菜单是显示状态,点击隐藏
  96. $('.left-nav').animate({
  97. left: '-221px'
  98. }, 100);
  99. $('.page-content').animate({
  100. left: '0px'
  101. }, 100);
  102. $('.page-content-bg').hide();
  103. } else {
  104. //此处左侧菜单是隐藏状态,点击显示
  105. $('.left-nav').animate({
  106. left: '0px'
  107. }, 100);
  108. $('.page-content').animate({
  109. left: '221px'
  110. }, 100);
  111. //点击显示后,判断屏幕宽度较小时显示遮罩背景
  112. if($(window).width() < 768) {
  113. $('.page-content-bg').show();
  114. }
  115. }
  116. });
  117. //点击遮罩背景,左侧菜单隐藏
  118. $('.page-content-bg').click(function(event) {
  119. $('.left-nav').animate({
  120. left: '-221px'
  121. }, 100);
  122. $('.page-content').animate({
  123. left: '0px'
  124. }, 100);
  125. $(this).hide();
  126. });
  127. /*
  128. * @todo 左侧菜单事件
  129. * 如果有子级就展开,没有就打开frame
  130. */
  131. $('body').on('click', '.left-nav #nav li', function(event) {
  132. if($(this).children('.sub-menu').length) {
  133. if($(this).hasClass('open')) {
  134. $(this).removeClass('open');
  135. $(this).find('.nav_right').html('&#xe697;');
  136. $(this).children('.sub-menu').stop().slideUp();
  137. $(this).siblings().children('.sub-menu').slideUp();
  138. } else {
  139. $(this).addClass('open');
  140. $(this).children('a').find('.nav_right').html('&#xe6a6;');
  141. $(this).children('.sub-menu').stop().slideDown();
  142. $(this).siblings().children('.sub-menu').stop().slideUp();
  143. $(this).siblings().find('.nav_right').html('&#xe697;');
  144. $(this).siblings().removeClass('open');
  145. }
  146. } else {
  147. var url = $(this).children('a').attr('_href');
  148. var title = $(this).find('cite').html();
  149. var index = $('.left-nav #nav li').index($(this));
  150. for(var i = 0; i < $('.weIframe').length; i++) {
  151. if($('.weIframe').eq(i).attr('tab-id') == index + 1) {
  152. tab.tabChange(index + 1);
  153. event.stopPropagation();
  154. return;
  155. }
  156. };
  157. tab.tabAdd(title, url, index + 1);
  158. tab.tabChange(index + 1);
  159. }
  160. event.stopPropagation(); //不触发任何前辈元素上的事件处理函数
  161. });
  162. /*
  163. * @todo tab触发事件:增加、删除、切换
  164. */
  165. var tab = {
  166. tabAdd: function(title, url, id) {
  167. //判断当前id的元素是否存在于tab中
  168. var li = $("#WeTabTip li[lay-id=" + id + "]").length;
  169. //console.log(li);
  170. if(li > 0) {
  171. //tab已经存在,直接切换到指定Tab项
  172. //console.log(">0");
  173. element.tabChange('wenav_tab', id); //切换到:用户管理
  174. } else {
  175. //该id不存在,新增一个Tab项
  176. //console.log("<0");
  177. element.tabAdd('wenav_tab', {
  178. title: title,
  179. content: '<iframe tab-id="' + id + '" frameborder="0" src="' + url + '" scrolling="yes" class="weIframe"></iframe>',
  180. id: id
  181. });
  182. //当前窗口内容
  183. setStorageMenu(title, url, id);
  184. }
  185. CustomRightClick(id); //绑定右键菜单
  186. FrameWH(); //计算框架高度
  187. },
  188. tabDelete: function(id) {
  189. element.tabDelete("wenav_tab", id); //删除
  190. removeStorageMenu(id);
  191. },
  192. tabChange: function(id) {
  193. //切换到指定Tab项
  194. element.tabChange('wenav_tab', id);
  195. },
  196. tabDeleteAll: function(ids) { //删除所有
  197. $.each(ids, function(i, item) {
  198. element.tabDelete("wenav_tab", item);
  199. })
  200. sessionStorage.removeItem('menu');
  201. }
  202. };
  203. /*
  204. * @todo 监听右键事件,绑定右键菜单
  205. * 先取消默认的右键事件,再绑定菜单,触发不同的点击事件
  206. */
  207. function CustomRightClick(id) {
  208. //取消右键
  209. $('.layui-tab-title li').on('contextmenu', function() {
  210. return false;
  211. })
  212. $('.layui-tab-title,.layui-tab-title li').on('click', function() {
  213. $('.rightMenu').hide();
  214. });
  215. //桌面点击右击
  216. $('.layui-tab-title li').on('contextmenu', function(e) {
  217. var aid = $(this).attr("lay-id"); //获取右键时li的lay-id属性
  218. var popupmenu = $(".rightMenu");
  219. popupmenu.find("li").attr("data-id", aid);
  220. //console.log("popopmenuId:" + popupmenu.find("li").attr("data-id"));
  221. l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
  222. t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
  223. popupmenu.css({
  224. left: l,
  225. top: t
  226. }).show();
  227. //alert("右键菜单")
  228. return false;
  229. });
  230. }
  231. $("#rightMenu li").click(function() {
  232. var type = $(this).attr("data-type");
  233. var layId = $(this).attr("data-id")
  234. if(type == "current") {
  235. //console.log("close this:" + layId);
  236. tab.tabDelete(layId);
  237. } else if(type == "all") {
  238. //console.log("closeAll");
  239. var tabtitle = $(".layui-tab-title li");
  240. var ids = new Array();
  241. $.each(tabtitle, function(i) {
  242. ids[i] = $(this).attr("lay-id");
  243. })
  244. tab.tabDeleteAll(ids);
  245. } else if(type == "fresh") {
  246. //console.log("fresh:" + layId);
  247. tab.tabChange($(this).attr("data-id"));
  248. var othis = $('.layui-tab-title').find('>li[lay-id="' + layId + '"]'),
  249. index = othis.parent().children('li').index(othis),
  250. parents = othis.parents('.layui-tab').eq(0),
  251. item = parents.children('.layui-tab-content').children('.layui-tab-item'),
  252. src = item.eq(index).find('iframe').attr("src");
  253. item.eq(index).find('iframe').attr("src", src);
  254. } else if(type == "other") {
  255. var thisId = layId;
  256. $('.layui-tab-title').find('li').each(function(i, o) {
  257. var layId = $(o).attr('lay-id');
  258. if(layId != thisId && layId != 0) {
  259. tab.tabDelete(layId);
  260. }
  261. });
  262. }
  263. $('.rightMenu').hide();
  264. });
  265. /*
  266. * @todo 重新计算iframe高度
  267. */
  268. function FrameWH() {
  269. var h = $(window).height() - 164;
  270. $("iframe").css("height", h + "px");
  271. }
  272. $(window).resize(function() {
  273. FrameWH();
  274. });
  275. /*
  276. * @todo 弹出层,弹窗方法
  277. * layui.use 加载layui.define 定义的模块,当外部 js 或 onclick调用 use 内部函数时,需要在 use 中定义 window 函数供外部引用
  278. * http://blog.csdn.net/xcmonline/article/details/75647144
  279. */
  280. /*
  281. 参数解释:
  282. title 标题
  283. url 请求的url
  284. id 需要操作的数据id
  285. w 弹出层宽度(缺省调默认值)
  286. h 弹出层高度(缺省调默认值)
  287. */
  288. window.WeAdminShow = function(title, url, w, h) {
  289. if(title == null || title == '') {
  290. title = false;
  291. };
  292. if(url == null || url == '') {
  293. url = "404.html";
  294. };
  295. if(w == null || w == '') {
  296. w = ($(window).width() * 0.9);
  297. };
  298. if(h == null || h == '') {
  299. h = ($(window).height() - 50);
  300. };
  301. layer.open({
  302. type: 2,
  303. area: [w + 'px', h + 'px'],
  304. fix: false, //不固定
  305. maxmin: true,
  306. shadeClose: true,
  307. shade: 0.4,
  308. title: title,
  309. content: url
  310. });
  311. }
  312. /*弹出层+传递ID参数*/
  313. window.WeAdminEdit = function(title, url, id, w, h) {
  314. if(title == null || title == '') {
  315. title = false;
  316. };
  317. if(url == null || url == '') {
  318. url = "404.html";
  319. };
  320. if(w == null || w == '') {
  321. w = ($(window).width() * 0.9);
  322. };
  323. if(h == null || h == '') {
  324. h = ($(window).height() - 50);
  325. };
  326. layer.open({
  327. type: 2,
  328. area: [w + 'px', h + 'px'],
  329. fix: false, //不固定
  330. maxmin: true,
  331. shadeClose: true,
  332. shade: 0.4,
  333. title: title,
  334. content: url,
  335. success: function(layero, index) {
  336. //向iframe页的id=house的元素传值 // 参考 https://yq.aliyun.com/ziliao/133150
  337. var body = layer.getChildFrame('body', index);
  338. body.contents().find("#dataId").val(id);
  339. console.log(id);
  340. },
  341. error: function(layero, index) {
  342. alert("aaa");
  343. }
  344. });
  345. }
  346. /**
  347. *@todo tab监听:点击tab项对应的关闭按钮事件
  348. */
  349. $('.layui-tab-close').click(function(event) {
  350. $('.layui-tab-title li').eq(0).find('i').remove();
  351. });
  352. /**
  353. *@todo tab切换监听
  354. * tab切换监听不能写字初始化加载$(function())方法内,否则不执行
  355. */
  356. element.on('tab(wenav_tab)', function(data) {
  357. //console.log(this); //当前Tab标题所在的原始DOM元素
  358. setStorageCurMenu();
  359. });
  360. /*
  361. * @todo 监听layui Tab项的关闭按钮,改变本地存储
  362. */
  363. element.on('tabDelete(wenav_tab)', function(data) {
  364. var layId = $(this).parent('li').attr('lay-id');
  365. //console.log(layId);
  366. removeStorageMenu(layId);
  367. });
  368. /**
  369. *@todo 本地存储 localStorage
  370. * 为了保持统一,将sessionStorage更换为存储周期更长的localStorage
  371. */
  372. //本地存储记录所有打开的窗口
  373. function setStorageMenu(title, url, id) {
  374. var menu = JSON.parse(sessionStorage.getItem('menu'));
  375. if(menu) {
  376. var deep = false;
  377. for(var i = 0; i < menu.length; i++) {
  378. if(menu[i].id == id) {
  379. deep = true;
  380. menu[i].title = title;
  381. menu[i].url = url;
  382. menu[i].id = id;
  383. }
  384. }
  385. if(!deep) {
  386. menu.push({
  387. title: title,
  388. url: url,
  389. id: id
  390. })
  391. }
  392. } else {
  393. var menu = [{
  394. title: title,
  395. url: url,
  396. id: id
  397. }]
  398. }
  399. sessionStorage.setItem('menu', JSON.stringify(menu));
  400. }
  401. //本地存储记录当前打开窗口
  402. function setStorageCurMenu() {
  403. var curMenu = sessionStorage.getItem('curMenu');
  404. var text = $('.layui-tab-title').find('.layui-this').text();
  405. text = text.split('ဆ')[0];
  406. var url = $('.layui-tab-content').find('.layui-show').find('.weIframe').attr('src');
  407. var id = $('.layui-tab-title').find('.layui-this').attr('lay-id');
  408. //console.log(text);
  409. curMenu = {
  410. title: text,
  411. url: url,
  412. id: id
  413. }
  414. sessionStorage.setItem('curMenu', JSON.stringify(curMenu));
  415. }
  416. //本地存储中移除删除的元素
  417. function removeStorageMenu(id) {
  418. var menu = JSON.parse(sessionStorage.getItem('menu'));
  419. //var curMenu = JSON.parse(localStorage.getItem('curMenu'));
  420. if(menu) {
  421. var deep = false;
  422. for(var i = 0; i < menu.length; i++) {
  423. if(menu[i].id == id) {
  424. deep = true;
  425. menu.splice(i, 1);
  426. }
  427. }
  428. } else {
  429. return false;
  430. }
  431. sessionStorage.setItem('menu', JSON.stringify(menu));
  432. }
  433. /**
  434. * 模拟登录
  435. * localStorage模拟登录及退出
  436. */
  437. var login = localStorage.getItem('login');
  438. $('.loginout').click(function() {
  439. login = 0;
  440. localStorage.setItem('login', login);
  441. });
  442. $('.loginin').click(function() {
  443. login = 1;
  444. localStorage.setItem('login', login);
  445. });
  446. /*
  447. *Tab加载后刷新
  448. * 判断是刷新后第一次点击时,刷新frame子页面
  449. * */
  450. window.reloadTab = function(which){
  451. var len = $('.layui-tab-title').children('li').length;
  452. var layId = $(which).attr('lay-id');
  453. var i=1;
  454. if($(which).attr('data-bit')){
  455. return false; //判断页面打开后第一次点击,执行刷新
  456. }else{
  457. $(which).attr('data-bit',i);
  458. var frame = $('.weIframe[tab-id='+layId+']');
  459. frame.attr('src', frame.attr('src'));
  460. console.log("reload:"+$(which).attr('data-bit'));
  461. }
  462. }
  463. /**
  464. *@todo Frame内部的按钮点击打开其他frame的tab
  465. */
  466. exports('admin', {});
  467. });