/**
|
* 界面入口模块
|
*/
|
|
layui.define('admin', function(exports){
|
var setter = layui.setter;
|
var element = layui.element;
|
var admin = layui.admin;
|
var tabsPage = admin.tabsPage;
|
var view = layui.view;
|
|
//根据路由渲染页面
|
var renderPage = function(){
|
var router = layui.router()
|
,path = router.path
|
,pathURL = admin.correctRouter(router.path.join('/'))
|
|
//默认读取主页
|
if(!path.length) path = [''];
|
|
//如果最后一项为空字符,则读取默认文件
|
if(path[path.length - 1] === ''){
|
path[path.length - 1] = setter.entry;
|
}
|
|
//重置状态
|
var reset = function(type){
|
//renderPage.haveInit && layer.closeAll();
|
if(renderPage.haveInit){
|
$('.layui-layer').each(function(){
|
var othis = $(this),
|
index = othis.attr('times');
|
if(!(othis.hasClass('layui-layim') || othis.hasClass('layui-layim-chat'))){
|
layer.close(index);
|
}
|
});
|
}
|
renderPage.haveInit = true;
|
|
$(APP_BODY).scrollTop(0);
|
delete tabsPage.type; //重置页面标签的来源类型
|
};
|
|
//如果路由来自于 tab 切换,则不重新请求视图
|
if(tabsPage.type === 'tab'){
|
//切换到非主页、或者切换到主页且主页必须有内容。方可阻止请求
|
if(pathURL !== '/' || (pathURL === '/' && admin.tabsBody().html())){
|
admin.tabsBodyChange(tabsPage.index);
|
return reset(tabsPage.type);
|
}
|
}
|
|
//请求视图渲染
|
view().render(path.join('/')).then(function(res){
|
|
//遍历页签选项卡
|
var matchTo
|
,tabs = $('#LAY_app_tabsheader>li');
|
|
tabs.each(function(index){
|
var li = $(this)
|
,layid = li.attr('lay-id');
|
|
if(layid === pathURL){
|
matchTo = true;
|
tabsPage.index = index;
|
}
|
});
|
|
//如果未在选项卡中匹配到,则追加选项卡
|
if(setter.pageTabs && pathURL !== '/'){
|
if(!matchTo){
|
$(APP_BODY).append('<div class="layadmin-tabsbody-item layui-show"></div>');
|
tabsPage.index = tabs.length;
|
element.tabAdd(FILTER_TAB_TBAS, {
|
title: '<span>'+ (res.title || '新标签页') +'</span>'
|
,id: pathURL
|
,attr: router.href
|
});
|
}
|
}
|
|
this.container = admin.tabsBody(tabsPage.index);
|
setter.pageTabs || this.container.scrollTop(0); //如果不开启标签页,则跳转时重置滚动条
|
|
//定位当前tabs
|
element.tabChange(FILTER_TAB_TBAS, pathURL);
|
admin.tabsBodyChange(tabsPage.index);
|
|
}).done(function(){
|
layui.use('common', layui.cache.callback.common);
|
$win.on('resize', layui.data.resize);
|
|
element.render('breadcrumb', 'breadcrumb');
|
|
//容器 scroll 事件,剔除吸附层
|
admin.tabsBody(tabsPage.index).on('scroll', function(){
|
var othis = $(this)
|
,elemDate = $('.layui-laydate')
|
,layerOpen = $('.layui-layer')[0];
|
|
//关闭 layDate
|
if(elemDate[0]){
|
elemDate.each(function(){
|
var thisElemDate = $(this);
|
thisElemDate.hasClass('layui-laydate-static') || thisElemDate.remove();
|
});
|
othis.find('input').blur();
|
}
|
|
//关闭 Tips 层
|
layerOpen && layer.closeAll('tips');
|
});
|
});
|
|
reset();
|
};
|
|
//入口页面
|
var entryPage = function(fn){
|
var router = layui.router()
|
,container = view(setter.container)
|
,pathURL = admin.correctRouter(router.path.join('/'))
|
,isIndPage;
|
|
//检查是否属于独立页面
|
layui.each(setter.indPage, function(index, item){
|
if(pathURL === item){
|
return isIndPage = true;
|
}
|
});
|
|
//将模块根路径设置为 modules 目录
|
layui.config({
|
base: setter.paths.base + 'modules/'
|
});
|
|
//独立页面
|
if(isIndPage || pathURL === '/user/login'){ //此处单独判断登入页,是为了兼容旧版(即未在 config.js 配置 indPage 的情况)
|
container.render(router.path.join('/')).done(function(){
|
admin.pageType = 'alone';
|
});
|
} else { //后台框架页面
|
|
//强制拦截未登入
|
if(setter.interceptor){
|
var local = layui.data(setter.tableName);
|
if(!local[setter.request.tokenName]){
|
return location.hash = '/user/login/redirect='+ encodeURIComponent(pathURL); //跳转到登入页
|
}
|
}
|
|
//渲染后台结构
|
if(admin.pageType === 'console') { //后台主体页
|
renderPage();
|
} else { //初始控制台结构
|
container.render('layout').done(function(){
|
renderPage();
|
layui.element.render();
|
|
if(admin.screen() < 2){
|
admin.sideFlexible();
|
}
|
admin.pageType = 'console';
|
});
|
}
|
|
}
|
};
|
|
var APP_BODY = '#LAY_app_body';
|
var FILTER_TAB_TBAS = 'layadmin-layout-tabs';
|
var $ = layui.$, $win = $(window);
|
|
//初始主体结构
|
layui.link(
|
setter.paths.core + 'css/admin.css?v='+ admin.v
|
,function(){
|
entryPage()
|
}
|
,'layuiAdmin'
|
);
|
|
//Hash改变
|
window.onhashchange = function(){
|
entryPage();
|
//执行 {setter.MOD_NAME}.hash 下的事件
|
layui.event.call(this, setter.MOD_NAME, 'hash({*})', layui.router());
|
};
|
|
// 对外输出
|
var adminuiIndex = {
|
render: renderPage
|
};
|
|
$.extend(admin, adminuiIndex);
|
exports('adminIndex', adminuiIndex);
|
});
|