249 lines
10 KiB
JavaScript
249 lines
10 KiB
JavaScript
/**
|
|
* date:2020/02/27
|
|
* author:Mr.Chung
|
|
* version:2.0
|
|
* description:layuimini 主体框架扩展
|
|
*/
|
|
layui.define(["jquery","element", "miniTab"], function (exports) {
|
|
var $ = layui.$,
|
|
layer = layui.layer,
|
|
dropdown = layui.dropdown,
|
|
element = layui.element ,
|
|
miniTab = layui.miniTab;
|
|
|
|
if (!/http(s*):\/\//.test(location.href)) {
|
|
var tips = "请先将项目部署至web容器(Apache/Tomcat/Nginx/IIS/等),否则部分数据将无法显示";
|
|
return layer.alert(tips);
|
|
}
|
|
|
|
var xphp = {
|
|
|
|
/**
|
|
* 后台框架初始化
|
|
* @param options.iniUrl 后台初始化接口地址
|
|
* @param options.urlHashLocation URL地址hash定位
|
|
* @param options.bgColorDefault 默认皮肤
|
|
* @param options.multiModule 是否开启多模块
|
|
* @param options.menuChildOpen 是否展开子菜单
|
|
* @param options.loadingTime 初始化加载时间
|
|
* @param options.pageAnim iframe窗口动画
|
|
* @param options.maxTabNum 最大的tab打开数量
|
|
*/
|
|
render: function (options) {
|
|
options.iniUrl = options.iniUrl || null;
|
|
options.urlHashLocation = options.urlHashLocation || false;
|
|
options.bgColorDefault = options.bgColorDefault || 0;
|
|
options.multiModule = options.multiModule || false;
|
|
options.menuChildOpen = options.menuChildOpen || false;
|
|
options.loadingTime = options.loadingTime || 0;
|
|
options.pageAnim = options.pageAnim || false;
|
|
options.maxTabNum = options.maxTabNum || 200;
|
|
options.isHideOpenMenu = !options.isHideOpenMenu ? options.isHideOpenMenu : true;
|
|
$.getJSON(options.iniUrl, function (data) {
|
|
if (data == null) {
|
|
xphp.error('暂无菜单信息')
|
|
} else {
|
|
xphp.renderHome(data.homeInfo);
|
|
xphp.renderAnim(options.pageAnim);
|
|
xphp.listen();
|
|
dropdown.render({
|
|
elem: '.menuitemon',
|
|
data:data.menuInfo,
|
|
customName: {
|
|
id: 'id',
|
|
title: 'title',
|
|
children: 'children'
|
|
},
|
|
trigger: 'hover',
|
|
click: function(obj){
|
|
miniTab.openNewTab({...obj,href:obj.dizhi});
|
|
}
|
|
});
|
|
//tab页
|
|
miniTab.render({
|
|
filter: 'layuiminiTab',
|
|
urlHashLocation: options.urlHashLocation,
|
|
multiModule: options.multiModule,
|
|
menuChildOpen: options.menuChildOpen,
|
|
maxTabNum: options.maxTabNum,
|
|
menuList: data.menuInfo,
|
|
homeInfo: data.homeInfo,
|
|
switchtoindex:options.switchtoindex||false,
|
|
listenSwichCallback: function () {
|
|
xphp.renderDevice();
|
|
}
|
|
});
|
|
xphp.deleteLoader(options.loadingTime);
|
|
xphp.isHideOpenMenu(options.isHideOpenMenu);
|
|
}
|
|
}).fail(function () {
|
|
xphp.error('菜单接口有误');
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 点击左侧下拉菜单,关闭其他下拉菜单
|
|
* @param data
|
|
*/
|
|
isHideOpenMenu: function (data) {
|
|
$(".layui-side").on("click", ".layui-nav-item", function () {
|
|
if (data) {
|
|
$(this).siblings('li').attr('class', 'layui-nav-item');
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 初始化首页
|
|
* @param data
|
|
*/
|
|
renderHome: function (data) {
|
|
sessionStorage.setItem('layuiminiHomeHref', data.href);
|
|
$('#layuiminiHomeTabId').html('<span class="layuimini-tab-active"></span><span class="disable-close">' + data.title + '</span><i class="layui-icon layui-unselect layui-tab-close">ဆ</i>');
|
|
$('#layuiminiHomeTabId').attr('lay-id', data.id);
|
|
$('#layuiminiHomeTabIframe').html('<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" src="' + data.href + '"></iframe>');
|
|
},
|
|
|
|
/**
|
|
* 初始化iframe窗口动画
|
|
* @param anim
|
|
*/
|
|
renderAnim: function (anim) {
|
|
if (anim) {
|
|
$('#layuimini-bg-color').after('<style id="layuimini-page-anim">' +
|
|
'.layui-tab-item.layui-show {animation:moveTop 1s;-webkit-animation:moveTop 1s;animation-fill-mode:both;-webkit-animation-fill-mode:both;position:relative;height:100%;-webkit-overflow-scrolling:touch;}\n' +
|
|
'@keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
|
|
' 100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
|
|
'}\n' +
|
|
'@-o-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
|
|
' 100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
|
|
'}\n' +
|
|
'@-moz-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
|
|
' 100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
|
|
'}\n' +
|
|
'@-webkit-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
|
|
' 100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
|
|
'}' +
|
|
'</style>');
|
|
}
|
|
},
|
|
/**
|
|
* 初始化设备端
|
|
*/
|
|
renderDevice: function () {
|
|
if (xphp.checkMobile()) {
|
|
$('.layuimini-tool i').attr('data-side-fold', 1);
|
|
$('.layuimini-tool i').attr('class', 'layui-icon layui-icon-list');
|
|
$('.layui-layout-body').removeClass('layuimini-mini');
|
|
$('.layui-layout-body').addClass('layuimini-all');
|
|
}
|
|
},
|
|
|
|
|
|
/**
|
|
* 初始化加载时间
|
|
* @param loadingTime
|
|
*/
|
|
deleteLoader: function (loadingTime) {
|
|
if (loadingTime) {
|
|
setTimeout(function () {
|
|
$('.layuimini-loader').fadeOut();
|
|
}, loadingTime * 1000)
|
|
} else {
|
|
$('.layuimini-loader').fadeOut();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 成功
|
|
* @param title
|
|
* @returns {*}
|
|
*/
|
|
success: function (title) {
|
|
return layer.msg(title, {icon: 1, shade: this.shade, scrollbar: false, time: 2000, shadeClose: true});
|
|
},
|
|
|
|
/**
|
|
* 失败
|
|
* @param title
|
|
* @returns {*}
|
|
*/
|
|
error: function (title) {
|
|
return layer.msg(title, {icon: 2, shade: this.shade, scrollbar: false, time: 3000, shadeClose: true});
|
|
},
|
|
|
|
/**
|
|
* 判断是否为手机
|
|
* @returns {boolean}
|
|
*/
|
|
checkMobile: function () {
|
|
var ua = navigator.userAgent.toLocaleLowerCase();
|
|
var pf = navigator.platform.toLocaleLowerCase();
|
|
var isAndroid = (/android/i).test(ua) || ((/iPhone|iPod|iPad/i).test(ua) && (/linux/i).test(pf))
|
|
|| (/ucweb.*linux/i.test(ua));
|
|
var isIOS = (/iPhone|iPod|iPad/i).test(ua) && !isAndroid;
|
|
var isWinPhone = (/Windows Phone|ZuneWP7/i).test(ua);
|
|
var clientWidth = document.documentElement.clientWidth;
|
|
if (!isAndroid && !isIOS && !isWinPhone && clientWidth > 1024) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 监听
|
|
*/
|
|
listen: function () {
|
|
|
|
/**
|
|
* 监听提示信息
|
|
*/
|
|
$("body").on("mouseenter", ".layui-nav-tree .menu-li", function () {
|
|
if (xphp.checkMobile()) {
|
|
return false;
|
|
}
|
|
var classInfo = $(this).attr('class'),
|
|
tips = $(this).prop("innerHTML"),
|
|
isShow = $('.layuimini-tool i').attr('data-side-fold');
|
|
if (isShow == 0 && tips) {
|
|
tips = "<ul class='layuimini-menu-left-zoom layui-nav layui-nav-tree layui-this'><li class='layui-nav-item layui-nav-itemed'>"+tips+"</li></ul>" ;
|
|
window.openTips = layer.tips(tips, $(this), {
|
|
tips: [2, '#2f4056'],
|
|
time: 300000,
|
|
skin:"popup-tips",
|
|
success:function (el) {
|
|
var left = $(el).position().left - 10 ;
|
|
$(el).css({ left:left });
|
|
element.render();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
$("body").on("mouseleave", ".popup-tips", function () {
|
|
if (xphp.checkMobile()) {
|
|
return false;
|
|
}
|
|
var isShow = $('.layuimini-tool i').attr('data-side-fold');
|
|
if (isShow == 0) {
|
|
try {
|
|
layer.close(window.openTips);
|
|
} catch (e) {
|
|
console.log(e.message);
|
|
}
|
|
}
|
|
});
|
|
/**
|
|
* 点击遮罩层
|
|
*/
|
|
$('body').on('click', '.layuimini-make', function () {
|
|
xphp.renderDevice();
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
exports("xphp", xphp);
|
|
});
|