admin.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. /*
  2. * @Author: https://github.com/WangEn
  3. * @Author: https://gitee.com/lovetime/
  4. * @Date: 2018-01-01
  5. * @lastModify 2018-3-27 15:00:35
  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: '-321px'
  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: '321px'
  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: '-321px'
  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. var index = $(this).attr('id');
  151. // for (var i = 0; i < $('.weIframe').length; i++) {
  152. // if ($('.weIframe').eq(i).attr('tab-id') == index + 1) {
  153. // tab.tabChange(index + 1);
  154. // event.stopPropagation();
  155. // return;
  156. // }
  157. // }
  158. for (var i = 0; i < $('.weIframe').length; i++) {
  159. if ($('.weIframe').eq(i).attr('tab-id') == index) {
  160. tab.tabChange(index);
  161. event.stopPropagation();
  162. return;
  163. }
  164. }
  165. // tab.tabAdd(title, url, index + 1);
  166. tab.tabAdd(title, url, index);
  167. // tab.tabChange(index + 1);
  168. tab.tabChange(index);
  169. }
  170. event.stopPropagation(); //不触发任何前辈元素上的事件处理函数
  171. });
  172. /*
  173. * @todo tab触发事件:增加、删除、切换
  174. */
  175. var tab = {
  176. tabAdd: function (title, url, id) {
  177. //判断当前id的元素是否存在于tab中
  178. var li = $("#WeTabTip li[lay-id=" + id + "]").length;
  179. //console.log(li);
  180. if (li > 0) {
  181. //tab已经存在,直接切换到指定Tab项
  182. //console.log(">0");
  183. element.tabChange('wenav_tab', id); //切换到:用户管理
  184. } else {
  185. //该id不存在,新增一个Tab项
  186. //console.log("<0");
  187. element.tabAdd('wenav_tab', {
  188. title: title,
  189. content: '<iframe tab-id="' + id + '" frameborder="0" src="' + url + '" scrolling="yes" class="weIframe"></iframe>',
  190. id: id,
  191. });
  192. //当前窗口内容
  193. setStorageMenu(title, url, id);
  194. }
  195. CustomRightClick(id); //绑定右键菜单
  196. FrameWH(); //计算框架高度
  197. },
  198. tabDelete: function (id) {
  199. element.tabDelete("wenav_tab", id); //删除
  200. removeStorageMenu(id);
  201. },
  202. tabChange: function (id) {
  203. //切换到指定Tab项
  204. element.tabChange('wenav_tab', id);
  205. },
  206. tabDeleteAll: function (ids) { //删除所有
  207. $.each(ids, function (i, item) {
  208. element.tabDelete("wenav_tab", item);
  209. })
  210. sessionStorage.removeItem('menu');
  211. }
  212. };
  213. /*
  214. * @todo 监听右键事件,绑定右键菜单
  215. * 先取消默认的右键事件,再绑定菜单,触发不同的点击事件
  216. */
  217. function CustomRightClick(id) {
  218. //取消右键
  219. $('.layui-tab-title li').on('contextmenu', function () {
  220. return false;
  221. })
  222. $('.layui-tab-title,.layui-tab-title li').on('click', function () {
  223. $('.rightMenu').hide();
  224. });
  225. //桌面点击右击
  226. $('.layui-tab-title li').on('contextmenu', function (e) {
  227. var aid = $(this).attr("lay-id"); //获取右键时li的lay-id属性
  228. var popupmenu = $(".rightMenu");
  229. popupmenu.find("li").attr("data-id", aid);
  230. //console.log("popopmenuId:" + popupmenu.find("li").attr("data-id"));
  231. l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
  232. t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
  233. popupmenu.css({
  234. left: l,
  235. top: t
  236. }).show();
  237. //alert("右键菜单")
  238. return false;
  239. });
  240. }
  241. $("#rightMenu li").click(function () {
  242. var type = $(this).attr("data-type");
  243. var layId = $(this).attr("data-id")
  244. if (type == "current") {
  245. //console.log("close this:" + layId);
  246. tab.tabDelete(layId);
  247. } else if (type == "all") {
  248. //console.log("closeAll");
  249. var tabtitle = $(".layui-tab-title li");
  250. var ids = new Array();
  251. $.each(tabtitle, function (i) {
  252. ids[i] = $(this).attr("lay-id");
  253. })
  254. tab.tabDeleteAll(ids);
  255. } else if (type == "fresh") {
  256. //console.log("fresh:" + layId);
  257. tab.tabChange($(this).attr("data-id"));
  258. var othis = $('.layui-tab-title').find('>li[lay-id="' + layId + '"]'),
  259. index = othis.parent().children('li').index(othis),
  260. parents = othis.parents('.layui-tab').eq(0),
  261. item = parents.children('.layui-tab-content').children('.layui-tab-item'),
  262. src = item.eq(index).find('iframe').attr("src");
  263. item.eq(index).find('iframe').attr("src", src);
  264. } else if (type == "other") {
  265. var thisId = layId;
  266. $('.layui-tab-title').find('li').each(function (i, o) {
  267. var layId = $(o).attr('lay-id');
  268. if (layId != thisId && layId != 0) {
  269. tab.tabDelete(layId);
  270. }
  271. });
  272. }
  273. $('.rightMenu').hide();
  274. });
  275. /*
  276. * @todo 重新计算iframe高度
  277. */
  278. function FrameWH() {
  279. var h = $(window).height() - 90;
  280. // console.log(h);
  281. $("iframe[tab-id]").css("height", h + "px");
  282. }
  283. $(window).resize(function () {
  284. FrameWH();
  285. });
  286. window.TopTabMenu = function (title, url, id) {
  287. tab.tabAdd(title, url, id);
  288. tab.tabChange(id);
  289. }
  290. /*
  291. * @todo 弹出层,弹窗方法
  292. * layui.use 加载layui.define 定义的模块,当外部 js 或 onclick调用 use 内部函数时,需要在 use 中定义 window 函数供外部引用
  293. * http://blog.csdn.net/xcmonline/article/details/75647144
  294. */
  295. /*
  296. 参数解释:
  297. title 标题
  298. url 请求的url
  299. id 需要操作的数据id
  300. w 弹出层宽度(缺省调默认值)
  301. h 弹出层高度(缺省调默认值)
  302. */
  303. window.WeAdminShow = function (title, url, w, h) {
  304. if (title == null || title == '') {
  305. title = false;
  306. }
  307. ;
  308. if (url == null || url == '') {
  309. url = "404.html";
  310. }
  311. ;
  312. if (w == null || w == '') {
  313. w = ($(window).width() * 0.9);
  314. }
  315. ;
  316. if (h == null || h == '') {
  317. h = ($(window).height() - 50);
  318. }
  319. ;
  320. layer.open({
  321. type: 2,
  322. area: [w + 'px', h + 'px'],
  323. fix: false, //不固定
  324. maxmin: true,
  325. shadeClose: true,
  326. shade: 0.4,
  327. title: title,
  328. content: url
  329. });
  330. }
  331. /*弹出层+传递ID参数*/
  332. window.WeAdminEdit = function (title, url, id, w, h) {
  333. if (title == null || title == '') {
  334. title = false;
  335. }
  336. ;
  337. if (url == null || url == '') {
  338. url = "404.html";
  339. }
  340. ;
  341. if (w == null || w == '') {
  342. w = ($(window).width() * 0.9);
  343. }
  344. ;
  345. if (h == null || h == '') {
  346. h = ($(window).height() - 50);
  347. }
  348. ;
  349. layer.open({
  350. type: 2,
  351. area: [w + 'px', h + 'px'],
  352. fix: false, //不固定
  353. maxmin: true,
  354. shadeClose: true,
  355. shade: 0.4,
  356. title: title,
  357. content: url,
  358. success: function (layero, index) {
  359. //向iframe页的id=house的元素传值 // 参考 https://yq.aliyun.com/ziliao/133150
  360. var body = layer.getChildFrame('body', index);
  361. body.contents().find("#dataId").val(id);
  362. console.log(id);
  363. },
  364. error: function (layero, index) {
  365. alert("aaa");
  366. }
  367. });
  368. }
  369. /**
  370. *@todo tab监听:点击tab项对应的关闭按钮事件
  371. */
  372. $('.layui-tab-close').click(function (event) {
  373. $('.layui-tab-title li').eq(0).find('i').remove();
  374. });
  375. /**
  376. *@todo tab切换监听
  377. * tab切换监听不能写字初始化加载$(function())方法内,否则不执行
  378. */
  379. element.on('tab(wenav_tab)', function (data) {
  380. // console.log(this, $(this).attr('lay-id')); //当前Tab标题所在的原始DOM元素
  381. $('.left-nav #nav li').removeClass('active open');
  382. $('.left-nav #nav .sub-menu').stop().slideUp();
  383. $('.left-nav #nav li .nav_right').html('&#xe697;');
  384. $('#' + $(this).attr('lay-id')).addClass('active').parents('li').addClass('open');
  385. $('.left-nav #nav li.open > a .nav_right').html('&#xe6a6')
  386. var open_li = $('.left-nav #nav li.open');
  387. // open_li.find('.nav_right').html('&#xe6a6');
  388. open_li.children('.sub-menu').stop().slideDown('normal', function () {
  389. $(this).attr('style', 'display:block;');
  390. });
  391. $('#' + $(this).attr('lay-id')).siblings().find('.nav_right').html('&#xe697;');
  392. setStorageCurMenu();
  393. });
  394. /*
  395. * @todo 监听layui Tab项的关闭按钮,改变本地存储
  396. */
  397. element.on('tabDelete(wenav_tab)', function (data) {
  398. var layId = $(this).parent('li').attr('lay-id');
  399. // console.log(layId);
  400. removeStorageMenu(layId);
  401. });
  402. /**
  403. *@todo 本地存储 localStorage
  404. * 为了保持统一,将sessionStorage更换为存储周期更长的localStorage
  405. */
  406. //本地存储记录所有打开的窗口
  407. function setStorageMenu(title, url, id) {
  408. var menu = JSON.parse(sessionStorage.getItem('menu'));
  409. if (menu) {
  410. var deep = false;
  411. for (var i = 0; i < menu.length; i++) {
  412. if (menu[i].id == id) {
  413. deep = true;
  414. menu[i].title = title;
  415. menu[i].url = url;
  416. menu[i].id = id;
  417. }
  418. }
  419. if (!deep) {
  420. menu.push({
  421. title: title,
  422. url: url,
  423. id: id
  424. })
  425. }
  426. } else {
  427. var menu = [{
  428. title: title,
  429. url: url,
  430. id: id
  431. }]
  432. }
  433. sessionStorage.setItem('menu', JSON.stringify(menu));
  434. }
  435. //本地存储记录当前打开窗口
  436. function setStorageCurMenu() {
  437. var curMenu = sessionStorage.getItem('curMenu');
  438. var text = $('.layui-tab-title').find('.layui-this').text();
  439. text = text.split('ဆ')[0];
  440. var url = $('.layui-tab-content').find('.layui-show').find('.weIframe').attr('src');
  441. var id = $('.layui-tab-title').find('.layui-this').attr('lay-id');
  442. //console.log(text);
  443. curMenu = {
  444. title: text,
  445. url: url,
  446. id: id
  447. }
  448. if (url.indexOf("?") != -1) {
  449. sessionStorage.setItem('fileClassName', parse_url(url)[0])
  450. }
  451. sessionStorage.setItem('curMenu', JSON.stringify(curMenu));
  452. }
  453. // 获取url参数
  454. function parse_url(_url) {
  455. var name, value, info = [];
  456. var str = _url
  457. var num = str.indexOf("?");
  458. str = str.substr(num + 1);
  459. var arr = str.split("&");
  460. for (var i = 0; i < arr.length; i++) {
  461. num = arr[i].indexOf("=");
  462. if (num > 0) {
  463. name = arr[i].substring(0, num);
  464. value = arr[i].substr(num + 1);
  465. this[name] = value;
  466. info.push(value)
  467. }
  468. }
  469. return info
  470. }
  471. //本地存储中移除删除的元素
  472. function removeStorageMenu(id) {
  473. var menu = JSON.parse(sessionStorage.getItem('menu'));
  474. //var curMenu = JSON.parse(localStorage.getItem('curMenu'));
  475. if (menu) {
  476. var deep = false;
  477. for (var i = 0; i < menu.length; i++) {
  478. if (menu[i].id == id) {
  479. deep = true;
  480. menu.splice(i, 1);
  481. }
  482. }
  483. } else {
  484. return false;
  485. }
  486. sessionStorage.setItem('menu', JSON.stringify(menu));
  487. }
  488. /**
  489. *@todo 模拟登录
  490. * 判断初次登录时,跳转到登录页
  491. */
  492. var login = localStorage.getItem('login');
  493. $('.loginout').click(function () {
  494. login = 0;
  495. localStorage.setItem('login', login);
  496. });
  497. $('.loginin').click(function () {
  498. login = 1;
  499. localStorage.setItem('login', login);
  500. });
  501. /*
  502. *Tab加载后刷新
  503. * 判断是刷新后第一次点击时,刷新frame子页面
  504. * */
  505. window.reloadTab = function (which) {
  506. var len = $('.layui-tab-title').children('li').length;
  507. var layId = $(which).attr('lay-id');
  508. var i = 1;
  509. if ($(which).attr('data-bit')) {
  510. return false; //判断页面打开后第一次点击,执行刷新
  511. } else {
  512. $(which).attr('data-bit', i);
  513. var frame = $('.weIframe[tab-id=' + layId + ']');
  514. frame.attr('src', frame.attr('src'));
  515. console.log("reload:" + $(which).attr('data-bit'));
  516. }
  517. }
  518. /**
  519. *@todo Frame内部的按钮点击打开其他frame的tab
  520. */
  521. exports('admin', {});
  522. });