190 lines
5.6 KiB
JavaScript
190 lines
5.6 KiB
JavaScript
layui.define(['element', 'layer'], function (exports) {
|
|
|
|
var $ = layui.$, $body = $('body'),
|
|
element = layui.element,
|
|
layer = layui.layer;
|
|
|
|
var screen_size = {
|
|
pc: [991, -1],
|
|
pad: [768, 990],
|
|
mobile: [0, 767]
|
|
}
|
|
|
|
var getDevice = function () {
|
|
var width = $(window).width();
|
|
for (var i in screen_size) {
|
|
var sizes = screen_size[i],
|
|
min = sizes[0],
|
|
max = sizes[1];
|
|
if (max == -1) max = width;
|
|
if (min <= width && max >= width) {
|
|
return i;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
var isDevice = function (label) {
|
|
return getDevice() == label;
|
|
}
|
|
|
|
var isMobile = function () {
|
|
return isDevice('mobile');
|
|
}
|
|
|
|
var Tab = function (el) {
|
|
this.el = el;
|
|
this.urls = [];
|
|
}
|
|
|
|
Tab.prototype.content = function (src) {
|
|
var iframe = document.createElement("iframe");
|
|
iframe.setAttribute("frameborder", "0");
|
|
iframe.setAttribute("src", src);
|
|
iframe.setAttribute("data-id", this.urls.length);
|
|
return iframe.outerHTML;
|
|
};
|
|
|
|
Tab.prototype.is = function (url) {
|
|
return (this.urls.indexOf(url) !== -1)
|
|
};
|
|
|
|
Tab.prototype.add = function (title, url) {
|
|
if (this.is(url)) return false;
|
|
this.urls.push(url);
|
|
element.tabAdd(this.el, {
|
|
title: title
|
|
, content: this.content(url)
|
|
, id: url
|
|
});
|
|
this.change(url);
|
|
};
|
|
|
|
Tab.prototype.change = function (url) {
|
|
element.tabChange(this.el, url);
|
|
};
|
|
|
|
Tab.prototype.delete = function (url) {
|
|
element.tabDelete(this.el, url);
|
|
};
|
|
|
|
Tab.prototype.onChange = function (callback) {
|
|
element.on('tab(' + this.el + ')', callback);
|
|
};
|
|
|
|
Tab.prototype.onDelete = function (callback) {
|
|
var self = this;
|
|
element.on('tabDelete(' + this.el + ')', function (data) {
|
|
var i = data.index;
|
|
self.urls.splice(i, 1);
|
|
callback && callback(data);
|
|
});
|
|
};
|
|
|
|
var Home = function () {
|
|
|
|
var tabs = new Tab('tabs'), navItems = [];
|
|
Home.prototype.TabController = tabs;
|
|
$('#Nav a').on('click', function (event) {
|
|
event.preventDefault();
|
|
var $this = $(this), url = $this.attr('href'),
|
|
title = $.trim($this.text());
|
|
if (url && url !== 'javascript:;') {
|
|
if (tabs.is(url)) {
|
|
tabs.change(url);
|
|
} else {
|
|
navItems.push($this);
|
|
tabs.add(title, url);
|
|
}
|
|
}
|
|
$this.closest('li.layui-nav-item')
|
|
.addClass('layui-nav-itemed')
|
|
.siblings()
|
|
.removeClass('layui-nav-itemed');
|
|
});
|
|
|
|
// 默认触发第一个子菜单的点击事件
|
|
$('#Nav li.layui-nav-item:eq(0) > dl.layui-nav-child > dd > a:eq(0)').trigger('click');
|
|
|
|
tabs.onChange(function (data) {
|
|
var i = data.index, $this = navItems[i];
|
|
if ($this && typeof $this === 'object') {
|
|
$('#Nav dd').removeClass('layui-this');
|
|
$this.parent('dd').addClass('layui-this');
|
|
$this.closest('li.layui-nav-item')
|
|
.addClass('layui-nav-itemed')
|
|
.siblings()
|
|
.removeClass('layui-nav-itemed');
|
|
}
|
|
});
|
|
|
|
tabs.onDelete(function (data) {
|
|
var i = data.index;
|
|
navItems.splice(i, 1);
|
|
});
|
|
|
|
this.slideSideBar();
|
|
}
|
|
|
|
Home.prototype.TabAdd = function () {
|
|
/*
|
|
if(tabs.is(url)){
|
|
tabs.change(url);
|
|
} else {
|
|
navItems.push($this);
|
|
tabs.add(title, url);
|
|
}
|
|
$this.closest('li.layui-nav-item')
|
|
.addClass('layui-nav-itemed')
|
|
.siblings()
|
|
.removeClass('layui-nav-itemed');
|
|
*/
|
|
}
|
|
|
|
Home.prototype.slideSideBar = function () {
|
|
var $slideSidebar = $('.slide-sidebar'),
|
|
$pageContainer = $('.layui-body'),
|
|
$mobileMask = $('.mobile-mask');
|
|
|
|
var isFold = false;
|
|
$slideSidebar.click(function (e) {
|
|
e.preventDefault();
|
|
var $this = $(this), $icon = $this.find('i'),
|
|
$admin = $body.find('.layui-layout-admin');
|
|
var toggleClass = isMobile() ? 'fold-side-bar-xs' : 'fold-side-bar';
|
|
if ($icon.hasClass('ai-menufold')) {
|
|
$icon.removeClass('ai-menufold').addClass('ai-menuunfold');
|
|
$admin.addClass(toggleClass);
|
|
isFold = true;
|
|
if (isMobile()) $mobileMask.show();
|
|
} else {
|
|
$icon.removeClass('ai-menuunfold').addClass('ai-menufold');
|
|
$admin.removeClass(toggleClass);
|
|
isFold = false;
|
|
if (isMobile()) $mobileMask.hide();
|
|
}
|
|
});
|
|
|
|
var tipIndex;
|
|
// 菜单收起后的模块信息小提示
|
|
$('#Nav li > a').hover(function () {
|
|
var $this = $(this);
|
|
if (isFold) {
|
|
tipIndex = layer.tips($this.find('em').text(), $this);
|
|
}
|
|
}, function () {
|
|
if (isFold && tipIndex) {
|
|
layer.close(tipIndex);
|
|
tipIndex = null
|
|
}
|
|
})
|
|
|
|
if (isMobile()) {
|
|
$mobileMask.click(function () {
|
|
$slideSidebar.trigger('click');
|
|
});
|
|
}
|
|
}
|
|
|
|
exports('home', new Home);
|
|
}); |