123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 |
- /*
- * @Author: https://github.com/WangEn
- * @Author: https://gitee.com/lovetime/
- * @Date: 2018-01-01
- * @lastModify 2018-3-27 15:00:35
- * +----------------------------------------------------------------------
- * | Weadmin [ 后台管理模板 ]
- * | 基于Layui http://www.layui.com/
- * +----------------------------------------------------------------------
- */
- layui.define(['jquery', 'form', 'layer', 'element'], function (exports) {
- var $ = layui.jquery,
- form = layui.form,
- layer = layui.layer,
- element = layui.element;
- var menu = [];
- var curMenu;
- /*
- * @todo 初始化加载完成执行方法
- * 打开或刷新后执行
- */
- $(function () {
- /*
- * @todo 读取本地存储中记录的已打开的tab项
- * 刷新后,读取记录,打开原来已打开的tab项
- */
- /*
- * @todo table事件
- */
- tableCheck = {
- init: function () {
- $(".layui-form-checkbox").click(function (event) {
- if ($(this).hasClass('layui-form-checked')) {
- $(this).removeClass('layui-form-checked');
- if ($(this).hasClass('header')) {
- $(".layui-form-checkbox").removeClass('layui-form-checked');
- }
- } else {
- $(this).addClass('layui-form-checked');
- if ($(this).hasClass('header')) {
- $(".layui-form-checkbox").addClass('layui-form-checked');
- }
- }
- });
- },
- getData: function () {
- var obj = $(".layui-form-checked").not('.header');
- var arr = [];
- obj.each(function (index, el) {
- arr.push(obj.eq(index).attr('data-id'));
- });
- return arr;
- }
- }
- //开启表格多选
- tableCheck.init();
- //延时加载
- setTimeout(function () {
- if (sessionStorage.getItem("menu")) {
- menu = JSON.parse(sessionStorage.getItem("menu"));
- for (var i = 0; i < menu.length; i++) {
- tab.tabAdd(menu[i].title, menu[i].url, menu[i].id);
- }
- } else {
- return false;
- }
- if (sessionStorage.getItem("curMenu")) {
- $('.layui-tab-title').find('layui-this').removeClass('layui-class');
- curMenu = JSON.parse(sessionStorage.getItem("curMenu"));
- id = curMenu.id;
- if (id) { //因为默认桌面首页不存在lay-id,所以要对此判断
- $('.layui-tab-title li[lay-id="' + id + '"]').addClass('layui-this');
- tab.tabChange(id);
- } else {
- $(".layui-tab-title li").eq(0).addClass('layui-this'); //未生效
- $('.layui-tab-content iframe').eq(0).parent().addClass('layui-show');
- }
- } else {
- $(".layui-tab-title li").eq(0).addClass('layui-this'); //未生效
- $('.layui-tab-content iframe').eq(0).parent().addClass('layui-show');
- }
- }, 100);
- //点击tab标题时,触发reloadTab函数
- // $('#tabName').on('click','li',function(){
- // reloadTab(this);
- // });
- //初始化加载结束
- });
- /*
- * @todo 左侧导航菜单的显示和隐藏
- */
- // $('.container .left_open i').click(function(event) {
- $('.container').on('click', '.left_open i', function (event) {
- if ($('.left-nav').css('left') == '0px') {
- //此处左侧菜单是显示状态,点击隐藏
- $('.left-nav').animate({
- left: '-321px'
- }, 100);
- $('.page-content').animate({
- left: '0px'
- }, 100);
- $('.page-content-bg').hide();
- } else {
- //此处左侧菜单是隐藏状态,点击显示
- $('.left-nav').animate({
- left: '0px'
- }, 100);
- $('.page-content').animate({
- left: '321px'
- }, 100);
- //点击显示后,判断屏幕宽度较小时显示遮罩背景
- if ($(window).width() < 768) {
- $('.page-content-bg').show();
- }
- }
- });
- //点击遮罩背景,左侧菜单隐藏
- $('.page-content-bg').click(function (event) {
- $('.left-nav').animate({
- left: '-321px'
- }, 100);
- $('.page-content').animate({
- left: '0px'
- }, 100);
- $(this).hide();
- });
- /*
- * @todo 左侧菜单事件
- * 如果有子级就展开,没有就打开frame
- */
- $('body').on('click', '.left-nav #nav li', function (event) {
- if ($(this).children('.sub-menu').length) {
- if ($(this).hasClass('open')) {
- $(this).removeClass('open');
- $(this).find('.nav_right').html('');
- $(this).children('.sub-menu').stop().slideUp();
- $(this).siblings().children('.sub-menu').slideUp();
- } else {
- $(this).addClass('open');
- $(this).children('a').find('.nav_right').html('');
- $(this).children('.sub-menu').stop().slideDown();
- $(this).siblings().children('.sub-menu').stop().slideUp();
- $(this).siblings().find('.nav_right').html('');
- $(this).siblings().removeClass('open');
- }
- } else {
- var url = $(this).children('a').attr('_href');
- var title = $(this).find('cite').html();
- // var index = $('.left-nav #nav li').index($(this));
- var index = $(this).attr('id');
- // for (var i = 0; i < $('.weIframe').length; i++) {
- // if ($('.weIframe').eq(i).attr('tab-id') == index + 1) {
- // tab.tabChange(index + 1);
- // event.stopPropagation();
- // return;
- // }
- // }
- for (var i = 0; i < $('.weIframe').length; i++) {
- if ($('.weIframe').eq(i).attr('tab-id') == index) {
- tab.tabChange(index);
- event.stopPropagation();
- return;
- }
- }
- // tab.tabAdd(title, url, index + 1);
- tab.tabAdd(title, url, index);
- // tab.tabChange(index + 1);
- tab.tabChange(index);
- }
- event.stopPropagation(); //不触发任何前辈元素上的事件处理函数
- });
- /*
- * @todo tab触发事件:增加、删除、切换
- */
- var tab = {
- tabAdd: function (title, url, id) {
- //判断当前id的元素是否存在于tab中
- var li = $("#WeTabTip li[lay-id=" + id + "]").length;
- //console.log(li);
- if (li > 0) {
- //tab已经存在,直接切换到指定Tab项
- //console.log(">0");
- element.tabChange('wenav_tab', id); //切换到:用户管理
- } else {
- //该id不存在,新增一个Tab项
- //console.log("<0");
- element.tabAdd('wenav_tab', {
- title: title,
- content: '<iframe tab-id="' + id + '" frameborder="0" src="' + url + '" scrolling="yes" class="weIframe"></iframe>',
- id: id,
- });
- //当前窗口内容
- setStorageMenu(title, url, id);
- }
- CustomRightClick(id); //绑定右键菜单
- FrameWH(); //计算框架高度
- },
- tabDelete: function (id) {
- element.tabDelete("wenav_tab", id); //删除
- removeStorageMenu(id);
- },
- tabChange: function (id) {
- //切换到指定Tab项
- element.tabChange('wenav_tab', id);
- },
- tabDeleteAll: function (ids) { //删除所有
- $.each(ids, function (i, item) {
- element.tabDelete("wenav_tab", item);
- })
- sessionStorage.removeItem('menu');
- }
- };
- /*
- * @todo 监听右键事件,绑定右键菜单
- * 先取消默认的右键事件,再绑定菜单,触发不同的点击事件
- */
- function CustomRightClick(id) {
- //取消右键
- $('.layui-tab-title li').on('contextmenu', function () {
- return false;
- })
- $('.layui-tab-title,.layui-tab-title li').on('click', function () {
- $('.rightMenu').hide();
- });
- //桌面点击右击
- $('.layui-tab-title li').on('contextmenu', function (e) {
- var aid = $(this).attr("lay-id"); //获取右键时li的lay-id属性
- var popupmenu = $(".rightMenu");
- popupmenu.find("li").attr("data-id", aid);
- //console.log("popopmenuId:" + popupmenu.find("li").attr("data-id"));
- l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
- t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
- popupmenu.css({
- left: l,
- top: t
- }).show();
- //alert("右键菜单")
- return false;
- });
- }
- $("#rightMenu li").click(function () {
- var type = $(this).attr("data-type");
- var layId = $(this).attr("data-id")
- if (type == "current") {
- //console.log("close this:" + layId);
- tab.tabDelete(layId);
- } else if (type == "all") {
- //console.log("closeAll");
- var tabtitle = $(".layui-tab-title li");
- var ids = new Array();
- $.each(tabtitle, function (i) {
- ids[i] = $(this).attr("lay-id");
- })
- tab.tabDeleteAll(ids);
- } else if (type == "fresh") {
- //console.log("fresh:" + layId);
- tab.tabChange($(this).attr("data-id"));
- var othis = $('.layui-tab-title').find('>li[lay-id="' + layId + '"]'),
- index = othis.parent().children('li').index(othis),
- parents = othis.parents('.layui-tab').eq(0),
- item = parents.children('.layui-tab-content').children('.layui-tab-item'),
- src = item.eq(index).find('iframe').attr("src");
- item.eq(index).find('iframe').attr("src", src);
- } else if (type == "other") {
- var thisId = layId;
- $('.layui-tab-title').find('li').each(function (i, o) {
- var layId = $(o).attr('lay-id');
- if (layId != thisId && layId != 0) {
- tab.tabDelete(layId);
- }
- });
- }
- $('.rightMenu').hide();
- });
- /*
- * @todo 重新计算iframe高度
- */
- function FrameWH() {
- var h = $(window).height() - 90;
- // console.log(h);
- $("iframe[tab-id]").css("height", h + "px");
- }
- $(window).resize(function () {
- FrameWH();
- });
- window.TopTabMenu = function (title, url, id) {
- tab.tabAdd(title, url, id);
- tab.tabChange(id);
- }
- /*
- * @todo 弹出层,弹窗方法
- * layui.use 加载layui.define 定义的模块,当外部 js 或 onclick调用 use 内部函数时,需要在 use 中定义 window 函数供外部引用
- * http://blog.csdn.net/xcmonline/article/details/75647144
- */
- /*
- 参数解释:
- title 标题
- url 请求的url
- id 需要操作的数据id
- w 弹出层宽度(缺省调默认值)
- h 弹出层高度(缺省调默认值)
- */
- window.WeAdminShow = function (title, url, w, h) {
- if (title == null || title == '') {
- title = false;
- }
- ;
- if (url == null || url == '') {
- url = "404.html";
- }
- ;
- if (w == null || w == '') {
- w = ($(window).width() * 0.9);
- }
- ;
- if (h == null || h == '') {
- h = ($(window).height() - 50);
- }
- ;
- layer.open({
- type: 2,
- area: [w + 'px', h + 'px'],
- fix: false, //不固定
- maxmin: true,
- shadeClose: true,
- shade: 0.4,
- title: title,
- content: url
- });
- }
- /*弹出层+传递ID参数*/
- window.WeAdminEdit = function (title, url, id, w, h) {
- if (title == null || title == '') {
- title = false;
- }
- ;
- if (url == null || url == '') {
- url = "404.html";
- }
- ;
- if (w == null || w == '') {
- w = ($(window).width() * 0.9);
- }
- ;
- if (h == null || h == '') {
- h = ($(window).height() - 50);
- }
- ;
- layer.open({
- type: 2,
- area: [w + 'px', h + 'px'],
- fix: false, //不固定
- maxmin: true,
- shadeClose: true,
- shade: 0.4,
- title: title,
- content: url,
- success: function (layero, index) {
- //向iframe页的id=house的元素传值 // 参考 https://yq.aliyun.com/ziliao/133150
- var body = layer.getChildFrame('body', index);
- body.contents().find("#dataId").val(id);
- console.log(id);
- },
- error: function (layero, index) {
- alert("aaa");
- }
- });
- }
- /**
- *@todo tab监听:点击tab项对应的关闭按钮事件
- */
- $('.layui-tab-close').click(function (event) {
- $('.layui-tab-title li').eq(0).find('i').remove();
- });
- /**
- *@todo tab切换监听
- * tab切换监听不能写字初始化加载$(function())方法内,否则不执行
- */
- element.on('tab(wenav_tab)', function (data) {
- // console.log(this, $(this).attr('lay-id')); //当前Tab标题所在的原始DOM元素
- $('.left-nav #nav li').removeClass('active open');
- $('.left-nav #nav .sub-menu').stop().slideUp();
- $('.left-nav #nav li .nav_right').html('');
- $('#' + $(this).attr('lay-id')).addClass('active').parents('li').addClass('open');
- $('.left-nav #nav li.open > a .nav_right').html('')
- var open_li = $('.left-nav #nav li.open');
- // open_li.find('.nav_right').html('');
- open_li.children('.sub-menu').stop().slideDown('normal', function () {
- $(this).attr('style', 'display:block;');
- });
- $('#' + $(this).attr('lay-id')).siblings().find('.nav_right').html('');
- setStorageCurMenu();
- });
- /*
- * @todo 监听layui Tab项的关闭按钮,改变本地存储
- */
- element.on('tabDelete(wenav_tab)', function (data) {
- var layId = $(this).parent('li').attr('lay-id');
- // console.log(layId);
- removeStorageMenu(layId);
- });
- /**
- *@todo 本地存储 localStorage
- * 为了保持统一,将sessionStorage更换为存储周期更长的localStorage
- */
- //本地存储记录所有打开的窗口
- function setStorageMenu(title, url, id) {
- var menu = JSON.parse(sessionStorage.getItem('menu'));
- if (menu) {
- var deep = false;
- for (var i = 0; i < menu.length; i++) {
- if (menu[i].id == id) {
- deep = true;
- menu[i].title = title;
- menu[i].url = url;
- menu[i].id = id;
- }
- }
- if (!deep) {
- menu.push({
- title: title,
- url: url,
- id: id
- })
- }
- } else {
- var menu = [{
- title: title,
- url: url,
- id: id
- }]
- }
- sessionStorage.setItem('menu', JSON.stringify(menu));
- }
- //本地存储记录当前打开窗口
- function setStorageCurMenu() {
- var curMenu = sessionStorage.getItem('curMenu');
- var text = $('.layui-tab-title').find('.layui-this').text();
- text = text.split('ဆ')[0];
- var url = $('.layui-tab-content').find('.layui-show').find('.weIframe').attr('src');
- var id = $('.layui-tab-title').find('.layui-this').attr('lay-id');
- //console.log(text);
- curMenu = {
- title: text,
- url: url,
- id: id
- }
- if (url.indexOf("?") != -1) {
- sessionStorage.setItem('fileClassName', parse_url(url)[0])
- }
- sessionStorage.setItem('curMenu', JSON.stringify(curMenu));
- }
- // 获取url参数
- function parse_url(_url) {
- var name, value, info = [];
- var str = _url
- var num = str.indexOf("?");
- str = str.substr(num + 1);
- var arr = str.split("&");
- for (var i = 0; i < arr.length; i++) {
- num = arr[i].indexOf("=");
- if (num > 0) {
- name = arr[i].substring(0, num);
- value = arr[i].substr(num + 1);
- this[name] = value;
- info.push(value)
- }
- }
- return info
- }
- //本地存储中移除删除的元素
- function removeStorageMenu(id) {
- var menu = JSON.parse(sessionStorage.getItem('menu'));
- //var curMenu = JSON.parse(localStorage.getItem('curMenu'));
- if (menu) {
- var deep = false;
- for (var i = 0; i < menu.length; i++) {
- if (menu[i].id == id) {
- deep = true;
- menu.splice(i, 1);
- }
- }
- } else {
- return false;
- }
- sessionStorage.setItem('menu', JSON.stringify(menu));
- }
- /**
- *@todo 模拟登录
- * 判断初次登录时,跳转到登录页
- */
- var login = localStorage.getItem('login');
- $('.loginout').click(function () {
- login = 0;
- localStorage.setItem('login', login);
- });
- $('.loginin').click(function () {
- login = 1;
- localStorage.setItem('login', login);
- });
- /*
- *Tab加载后刷新
- * 判断是刷新后第一次点击时,刷新frame子页面
- * */
- window.reloadTab = function (which) {
- var len = $('.layui-tab-title').children('li').length;
- var layId = $(which).attr('lay-id');
- var i = 1;
- if ($(which).attr('data-bit')) {
- return false; //判断页面打开后第一次点击,执行刷新
- } else {
- $(which).attr('data-bit', i);
- var frame = $('.weIframe[tab-id=' + layId + ']');
- frame.attr('src', frame.attr('src'));
- console.log("reload:" + $(which).attr('data-bit'));
- }
- }
- /**
- *@todo Frame内部的按钮点击打开其他frame的tab
- */
- exports('admin', {});
- });
|