...
parent
3b859530e5
commit
6e2d98d86a
100
js/home2.js
100
js/home2.js
|
|
@ -1,57 +1,57 @@
|
|||
"use strict";
|
||||
var useModel = ["form", "okUtils", "table", "laytpl", "laydate",
|
||||
"element", "jquery", "countUp", "home2Data"];//需要引入的模块
|
||||
"element", "jquery", "countUp", "home2Data"];//需要引入的模块
|
||||
layui.config({
|
||||
base: "../js/"
|
||||
base: "../js/"
|
||||
}).use(useModel, function () {
|
||||
var $form = layui.form,
|
||||
countUp = layui.countUp,
|
||||
laydate = layui.laydate,
|
||||
element = layui.element,
|
||||
table = layui.table,
|
||||
okUtils = layui.okUtils,
|
||||
$ = layui.jquery,
|
||||
laytpl = layui.laytpl;
|
||||
/**静态数据**/
|
||||
var echartsData = layui.home2Data;
|
||||
init();
|
||||
|
||||
function init() {
|
||||
/**今日访问量**/
|
||||
var elem_nums = $(".media-cont .num");
|
||||
elem_nums.each(function (i, j) {
|
||||
let ran = parseInt(Math.random() * 99 + 1);
|
||||
!new countUp({
|
||||
target: j,
|
||||
endVal: 20 * ran
|
||||
}).start();
|
||||
});
|
||||
|
||||
/**4个图表**/
|
||||
var echIncome = echarts.init($("#echIncome")[0]);
|
||||
var echGoods = echarts.init($('#echGoods')[0]);
|
||||
var echBlogs = echarts.init($("#echBlogs")[0]);
|
||||
var echUser = echarts.init($('#echUser')[0]);
|
||||
okUtils.echartsResize([echIncome, echGoods, echBlogs, echUser]);
|
||||
|
||||
echIncome.setOption(echartsData.income);//数据图
|
||||
echGoods.setOption(echartsData.goods);//数据图
|
||||
echBlogs.setOption(echartsData.blogs);//数据图
|
||||
echUser.setOption(echartsData.user);//数据图
|
||||
|
||||
//用户活跃量,用户访问来源
|
||||
var echOne = echarts.init($("#echOne")[0], "themez");
|
||||
var echTwo = echarts.init($("#echTwo")[0], "themez");
|
||||
var mapThree = echarts.init($("#mapThree")[0], "themez");
|
||||
okUtils.echartsResize([echOne, echTwo, mapThree]);
|
||||
|
||||
echOne.setOption(echartsData.echOne);//数据图
|
||||
echTwo.setOption(echartsData.echTwo);//数据图
|
||||
mapThree.setOption(echartsData.mapThree);//数据图
|
||||
|
||||
|
||||
}
|
||||
|
||||
var $form = layui.form,
|
||||
countUp = layui.countUp,
|
||||
laydate = layui.laydate,
|
||||
element = layui.element,
|
||||
table = layui.table,
|
||||
okUtils = layui.okUtils,
|
||||
$ = layui.jquery,
|
||||
laytpl = layui.laytpl;
|
||||
/**静态数据**/
|
||||
var echartsData = layui.home2Data;
|
||||
init();
|
||||
|
||||
function init() {
|
||||
/**今日访问量**/
|
||||
var elem_nums = $(".media-cont .num");
|
||||
elem_nums.each(function (i, j) {
|
||||
let ran = parseInt(Math.random() * 1900 + 100); //[100,2000)包括100不包括2000
|
||||
!new countUp({
|
||||
target: j,
|
||||
endVal: ran
|
||||
}).start();
|
||||
});
|
||||
|
||||
/**4个图表**/
|
||||
var echIncome = echarts.init($("#echIncome")[0]);
|
||||
var echGoods = echarts.init($('#echGoods')[0]);
|
||||
var echBlogs = echarts.init($("#echBlogs")[0]);
|
||||
var echUser = echarts.init($('#echUser')[0]);
|
||||
okUtils.echartsResize([echIncome, echGoods, echBlogs, echUser]);
|
||||
|
||||
echIncome.setOption(echartsData.income);//数据图
|
||||
echGoods.setOption(echartsData.goods);//数据图
|
||||
echBlogs.setOption(echartsData.blogs);//数据图
|
||||
echUser.setOption(echartsData.user);//数据图
|
||||
|
||||
//用户活跃量,用户访问来源
|
||||
var echOne = echarts.init($("#echOne")[0], "themez");
|
||||
var echTwo = echarts.init($("#echTwo")[0], "themez");
|
||||
var mapThree = echarts.init($("#mapThree")[0], "themez");
|
||||
okUtils.echartsResize([echOne, echTwo, mapThree]);
|
||||
|
||||
echOne.setOption(echartsData.echOne);//数据图
|
||||
echTwo.setOption(echartsData.echTwo);//数据图
|
||||
mapThree.setOption(echartsData.mapThree);//数据图
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,451 +1,455 @@
|
|||
var $;
|
||||
String.prototype.format = function () {
|
||||
//字符串占位符
|
||||
//eg: var str1 = "hello {0}".format("world");
|
||||
if (arguments.length == 0) return this;
|
||||
var param = arguments[0];
|
||||
var s = this;
|
||||
if (typeof (param) == 'object') {
|
||||
for (var key in param) {
|
||||
s = s.replace(new RegExp("\\{" + key + "\\}", "g"), param[key]);
|
||||
}
|
||||
return s;
|
||||
} else {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
//字符串占位符
|
||||
//eg: var str1 = "hello {0}".format("world");
|
||||
if (arguments.length == 0) return this;
|
||||
var param = arguments[0];
|
||||
var s = this;
|
||||
if (typeof (param) == 'object') {
|
||||
for (var key in param) {
|
||||
s = s.replace(new RegExp("\\{" + key + "\\}", "g"), param[key]);
|
||||
}
|
||||
return s;
|
||||
} else {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
};
|
||||
|
||||
layui.define(["element", "jquery"], function (exports) {
|
||||
var layui = parent.layui || layui;
|
||||
$ = layui.jquery;
|
||||
var element = layui.element,
|
||||
layer = layui.layer,
|
||||
okTab = function () {
|
||||
this.tabConfig = {
|
||||
openTabNum: 30, //最大可打开窗口数量默认30
|
||||
tabFilter: "ok-tab", //添加窗口的filter
|
||||
url: "./data/navs.json" //获取菜单的接口地址
|
||||
}
|
||||
};
|
||||
/**
|
||||
* 导航初始化的操作(只执行一次)
|
||||
* @param option 配置tabConfig参数
|
||||
* @returns {okTab}
|
||||
*/
|
||||
okTab.prototype.init = function (option) {
|
||||
var _this = this; //这个this就是代表okTab(因为prototype的原因)
|
||||
$.extend(true, _this.tabConfig, option); //函数用于将一个或多个对象的内容合并到目标对象。http://www.runoob.com/jquery/misc-extend.html
|
||||
this.tabDelete(); //关闭导航页的操作
|
||||
this.tab(); //tab导航切换时的操作
|
||||
return _this;
|
||||
};
|
||||
|
||||
/**
|
||||
* 定位tab位置
|
||||
* @param superEle 父级元素
|
||||
* @param ele 当前tab
|
||||
*/
|
||||
okTab.prototype.positionTab = function (contEle, ele) {
|
||||
var superEle = $(".ok-tab");//父级元素
|
||||
contEle = $(contEle);//tab内容存放的父元素
|
||||
ele = $(ele);//当前的tab
|
||||
|
||||
var menuSet = $(".okadmin-side a[lay-id]");//获取所有菜单集合
|
||||
var thatLayId = ele.attr('lay-id');
|
||||
|
||||
var contWidth = contEle.width(),//父级元素宽度
|
||||
superWidth = parseInt(superEle.width()) - 40 * 3,//可显示的宽度
|
||||
subWidth = ele.outerWidth(),//当前元素宽度
|
||||
elePrevAll = ele.prevAll(),//左边的所有同级元素
|
||||
leftWidth = 0,//左边距离
|
||||
postLeft = Math.abs(contEle.position().left);//当前移动的位置
|
||||
var maxMoveWidth = contWidth - superWidth;//最大可移动的宽度
|
||||
|
||||
/*console.log("maxMoveWidth:" + maxMoveWidth);
|
||||
console.log("superWidth:" + superWidth);
|
||||
console.log("contWidth:" + contWidth);*/
|
||||
for (let i = 0; i < elePrevAll.length; i++) {
|
||||
leftWidth += $(elePrevAll[i]).outerWidth() * 1;
|
||||
}
|
||||
if (contWidth > superWidth) {
|
||||
/**
|
||||
* 移动tab栏的位置
|
||||
*/
|
||||
var showPost = leftWidth - postLeft;//当前点击的元素位置(显示区域的位置)
|
||||
var halfPlace = parseInt(superWidth / 2);//可显示的宽度的一半
|
||||
var layui = parent.layui || layui;
|
||||
$ = layui.jquery;
|
||||
var element = layui.element,
|
||||
layer = layui.layer,
|
||||
okTab = function () {
|
||||
this.tabConfig = {
|
||||
openTabNum: 30, //最大可打开窗口数量默认30
|
||||
tabFilter: "ok-tab", //添加窗口的filter
|
||||
url: "./data/navs.json" //获取菜单的接口地址
|
||||
}
|
||||
};
|
||||
/**
|
||||
* 导航初始化的操作(只执行一次)
|
||||
* @param option 配置tabConfig参数
|
||||
* @returns {okTab}
|
||||
*/
|
||||
okTab.prototype.init = function (option) {
|
||||
var _this = this; //这个this就是代表okTab(因为prototype的原因)
|
||||
$.extend(true, _this.tabConfig, option); //函数用于将一个或多个对象的内容合并到目标对象。http://www.runoob.com/jquery/misc-extend.html
|
||||
this.tabDelete(); //关闭导航页的操作
|
||||
this.tab(); //tab导航切换时的操作
|
||||
return _this;
|
||||
};
|
||||
|
||||
/**
|
||||
* 定位tab位置
|
||||
* @param superEle 父级元素
|
||||
* @param ele 当前tab
|
||||
*/
|
||||
okTab.prototype.positionTab = function (contEle, ele) {
|
||||
var superEle = $(".ok-tab");//父级元素
|
||||
contEle = $(contEle);//tab内容存放的父元素
|
||||
ele = $(ele);//当前的tab
|
||||
|
||||
if (halfPlace < showPost) {//从右往左移动
|
||||
var tempMove = leftWidth - subWidth;//预留一部分距离
|
||||
if(tempMove > maxMoveWidth){//当前移动的距离超过最大可移动的宽度
|
||||
tempMove = maxMoveWidth;
|
||||
}
|
||||
contEle.animate({
|
||||
left: -tempMove
|
||||
}, 50);
|
||||
}else{//从左往右移动
|
||||
console.log("从左往右移动");
|
||||
var tempMove = leftWidth - halfPlace;//预留一部分距离
|
||||
if(tempMove < 0){
|
||||
tempMove = 0;
|
||||
}
|
||||
contEle.animate({
|
||||
left: -tempMove
|
||||
}, 50);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 左侧菜单的样式和多级菜单的展开
|
||||
*/
|
||||
$(".okadmin-side").find("li,dd").removeClass("layui-this").removeClass("layui-nav-itemed");//关闭所有展开的菜单
|
||||
for (let i = 0; i < menuSet.length; i++) {
|
||||
if ($(menuSet[i]).attr('lay-id') == thatLayId) {
|
||||
$(menuSet[i]).parents("dd").addClass("layui-nav-itemed");
|
||||
$(menuSet[i]).parents("li").addClass("layui-nav-itemed");
|
||||
$(menuSet[i]).parent().removeClass("layui-nav-itemed").addClass("layui-this");
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 点击导航页的操作
|
||||
okTab.prototype.tab = function () {
|
||||
var that = this;
|
||||
var filter = this.tabConfig.tabFilter;
|
||||
// "hello {0}".format("world");
|
||||
//`tab(${filter})`
|
||||
element.on("tab({0})".format(filter), function (data) {
|
||||
var index = data.index;//点击的某个tab索引
|
||||
var elSuper = $(".ok-tab"),//视窗元素
|
||||
elMove = $(".ok-tab-title"),//移动的元素
|
||||
elTabs = $(".ok-tab-title li"),//所有已存在的tab集合
|
||||
thatElem = $(elTabs[index]);//当前元素
|
||||
that.positionTab(elMove, thatElem);
|
||||
});
|
||||
};
|
||||
|
||||
//删除tab页的操作(此处为点击关闭按钮的操作)
|
||||
okTab.prototype.tabDelete = function () {
|
||||
var that = this;
|
||||
var filter = this.tabConfig.tabFilter;
|
||||
//`tabDelete(${filter})`
|
||||
element.on("tabDelete({0})".format(filter), function (data) {
|
||||
// that.navMove("right");
|
||||
});
|
||||
};
|
||||
|
||||
//右侧内容nav操作添加tab页
|
||||
okTab.prototype.tabAdd = function (_thisa) {
|
||||
var that = this;
|
||||
var _this = $(_thisa).clone(true);//拷贝dom(js: _this.cloneNode(true) )
|
||||
|
||||
var openTabNum = that.tabConfig.openTabNum;
|
||||
var tabFilter = that.tabConfig.tabFilter;
|
||||
var url = _this.attr("data-url");//选项卡的页面路径
|
||||
var tabId = _this.attr("lay-id");//选项卡ID
|
||||
var thatTabNum = $('.ok-tab-title > li').length;//当前已经打开的选项卡的数量
|
||||
var iframes = $(".ok-tab-content iframe");
|
||||
var isClose = _this.attr('is-close') || "true";
|
||||
|
||||
_this.prepend("<strong style='display: none;' is-close=" + isClose + " lay-id=" + tabId + "></strong>");
|
||||
|
||||
if (_this.children("i").length < 1) {
|
||||
_this.prepend("<i class='layui-icon'></i>");
|
||||
}
|
||||
if (_this.attr("target") == "_blank") {
|
||||
window.location.href = _this.attr("data-url");
|
||||
} else if (url != undefined) {
|
||||
var title = '';
|
||||
var html = _this.html();
|
||||
// 去重复选项卡
|
||||
/**
|
||||
* 这里还有一种情况就是同一选项卡页面路径不同(这个是多余的没必要了,页面不同,跳转的选项卡也应该新增)
|
||||
*/
|
||||
for (var i = 0; i < thatTabNum; i++) {
|
||||
if ($('.ok-tab-title > li').eq(i).attr('lay-id') == tabId) {
|
||||
var iframeParam = (iframes[i].src).split("?")[1];
|
||||
var urlParam = url.split("?")[1];
|
||||
if (urlParam == iframeParam) {
|
||||
element.tabChange(tabFilter, tabId);
|
||||
} else {
|
||||
//参数不一样的时候刷新并且更换参数
|
||||
iframes[i].contentWindow.location.reload(true);
|
||||
iframes[i].src = url;
|
||||
element.tabChange(tabFilter, tabId);
|
||||
}
|
||||
if (event) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
var menuSet = $(".okadmin-side a[lay-id]");//获取所有菜单集合
|
||||
var thatLayId = ele.attr('lay-id');
|
||||
|
||||
if (thatTabNum >= openTabNum) {
|
||||
layer.msg('最多只能同时打开' + openTabNum + '个选项卡哦。不然系统会卡的!');
|
||||
return;
|
||||
}
|
||||
var contentIframe = ("<iframe src='{0}' lay-id='{1}'"+
|
||||
"frameborder='0' scrolling='yes' width='100%' height='100%'>"+
|
||||
"</iframe>").format(url,tabId);
|
||||
element.tabAdd(tabFilter, {
|
||||
title: html,
|
||||
content: contentIframe,
|
||||
id: tabId
|
||||
});
|
||||
var contWidth = contEle.width(),//父级元素宽度
|
||||
superWidth = parseInt(superEle.width()) - 40 * 3,//可显示的宽度
|
||||
subWidth = ele.outerWidth(),//当前元素宽度
|
||||
elePrevAll = ele.prevAll(),//左边的所有同级元素
|
||||
leftWidth = 0,//左边距离
|
||||
postLeft = Math.abs(contEle.position().left);//当前移动的位置
|
||||
var maxMoveWidth = contWidth - superWidth;//最大可移动的宽度
|
||||
|
||||
// 切换选项卡
|
||||
element.tabChange(tabFilter, tabId);
|
||||
this.navMove("rightmax");
|
||||
}
|
||||
};
|
||||
|
||||
//生成左侧菜单
|
||||
var temp = "";
|
||||
okTab.prototype.navBar = function (strData) {
|
||||
var data;
|
||||
if (typeof (strData) == "string") {
|
||||
var data = JSON.parse(strData); //有可能是字符串,转换一下
|
||||
} else {
|
||||
data = strData;
|
||||
}
|
||||
var ulItem = '';
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
temp = "";
|
||||
if (data[i].isCheck) {
|
||||
ulItem += '<li class="layui-nav-item layui-this">';
|
||||
} else if (data[i].spread) {
|
||||
ulItem += '<li class="layui-nav-item layui-nav-itemed">';
|
||||
} else {
|
||||
ulItem += '<li class="layui-nav-item">';
|
||||
/*console.log("maxMoveWidth:" + maxMoveWidth);
|
||||
console.log("superWidth:" + superWidth);
|
||||
console.log("contWidth:" + contWidth);*/
|
||||
for (let i = 0; i < elePrevAll.length; i++) {
|
||||
leftWidth += $(elePrevAll[i]).outerWidth() * 1;
|
||||
}
|
||||
createMenu(data[i], (i + 1).toString());
|
||||
ulItem += temp;
|
||||
ulItem += '</li>';
|
||||
}
|
||||
return ulItem;
|
||||
};
|
||||
|
||||
/**
|
||||
* 递归生成菜单
|
||||
* @param data 数据
|
||||
* @param tabID 设置lay-id使用
|
||||
*/
|
||||
function createMenu(data, tabID) {
|
||||
if (data.children != undefined && data.children.length > 0) {
|
||||
temp += '<a>';
|
||||
if (data.icon != undefined && data.icon != '') {
|
||||
if (!data.fontFamily || data.fontFamily.indexOf("layui-icon") >= 0) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="layui-icon">{0}</i>').format(data.icon);
|
||||
} else {
|
||||
temp += ('<i class="layui-icon {0}"></i>').format(data.icon);
|
||||
}
|
||||
} else if (data.fontFamily) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="{0}">{1}</i>').format(data.fontFamily, data.icon);
|
||||
} else {
|
||||
temp += ('<i class="{0} {1}"></i>').format(data.fontFamily, data.icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
temp += '<cite>' + data.title + '</cite>';
|
||||
temp += '<span class="layui-nav-more"></span>';
|
||||
temp += '</a>';
|
||||
temp += '<dl class="layui-nav-child">';
|
||||
for (var i = 0; i < data.children.length; i++) {
|
||||
temp += '<dd>';
|
||||
var lay_id = tabID + "-" + (i + 1);
|
||||
createMenu(data.children[i], lay_id);
|
||||
temp += '</dd>';
|
||||
}
|
||||
temp += "</dl>";
|
||||
} else {
|
||||
var isClose = data.isClose === false ? "false" : "true";
|
||||
if (data.target) {
|
||||
temp += ('<a lay-id="{0}" data-url="{1}" target="{2}" is-close="{3}">').format(tabID, data.href, data.target, isClose);
|
||||
} else {
|
||||
temp += ('<a lay-id="{0}" data-url="{1}" is-close="{2}">').format(tabID, data.href, isClose);
|
||||
}
|
||||
if (data.icon != undefined && data.icon != '') {
|
||||
if (!data.fontFamily || data.fontFamily.indexOf("layui-icon") >= 0) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="layui-icon">{0}</i>').format(data.icon);
|
||||
} else {
|
||||
temp += ('<i class="layui-icon {0}"></i>').format(data.icon);
|
||||
}
|
||||
} else if (data.fontFamily) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="{0}">{1}</i>').format(data.fontFamily, data.icon);
|
||||
} else {
|
||||
temp += ('<i class="{0} {1}"></i>').format(data.fontFamily, data.icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
temp += ('<cite>{0}</cite></a>').format(data.title);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//重新对导航进行渲染(此处有个回调函数,主要用作渲染完成之后的操作)
|
||||
okTab.prototype.render = function (fun) {
|
||||
let _this = this;//data
|
||||
$.get(_this.tabConfig.url, function (data) {
|
||||
$("#navBar").html(_this.navBar(data));
|
||||
element.render('nav');
|
||||
$(window).resize(function () {
|
||||
$("#navBar").height($(window).height() - 245);
|
||||
});
|
||||
if (typeof fun == "function") {
|
||||
fun();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//刷新当前tab页
|
||||
okTab.prototype.refresh = function (_this) {
|
||||
if (!($(_this).hasClass("refreshThis"))) {
|
||||
$(_this).addClass("refreshThis");
|
||||
$(".ok-tab-content .layui-show").find("iframe")[0].contentWindow.location.reload(true);
|
||||
setTimeout(function () {
|
||||
$(_this).removeClass("refreshThis");
|
||||
}, 2000)
|
||||
} else {
|
||||
layer.msg("客官请不要频繁点击哦!我会反应不过来的");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 关闭tab标签页操作
|
||||
* @param num 默认为1
|
||||
* 1:代表关闭当前标签页
|
||||
* 2:代表关闭其他标签页
|
||||
* 3:代表关闭所有标签页
|
||||
*/
|
||||
okTab.prototype.tabClose = function (num) {
|
||||
num = num || 1;
|
||||
num = num * 1;//强制转换成数字
|
||||
var that = this;
|
||||
let openTabs = $('.ok-tab-title > li strong[lay-id]').not('strong[is-close=false]'),//获取已打开的tab元素(除开不会被关闭的导航)
|
||||
thatLayID = $('.ok-tab-title > li.layui-this strong[lay-id]').not('strong[is-close=false]').attr("lay-id") || '';//获取当前打开的tab元素ID(除开不会被关闭的导航)
|
||||
|
||||
var filter = that.tabConfig.tabFilter;
|
||||
if (thatLayID.length < 1 && num == 1) {
|
||||
layer.msg("您不能关闭当前页哦 (๑╹◡╹)ノ");
|
||||
return;
|
||||
} else if (openTabs.length < 1) {
|
||||
layer.msg("您好!当前没有可关闭的窗口了 (๑╹◡╹)ノ");
|
||||
return;
|
||||
}
|
||||
switch (num) {
|
||||
case 1:
|
||||
element.tabDelete(filter, thatLayID);
|
||||
break;
|
||||
case 2:
|
||||
if (openTabs.length > 0) {
|
||||
openTabs.each(function (i, j) {
|
||||
if ($(j).attr("lay-id") != thatLayID) {
|
||||
element.tabDelete(filter, $(j).attr("lay-id"));
|
||||
if (contWidth > superWidth) {
|
||||
/**
|
||||
* 移动tab栏的位置
|
||||
*/
|
||||
var showPost = leftWidth - postLeft;//当前点击的元素位置(显示区域的位置)
|
||||
var halfPlace = parseInt(superWidth / 2);//可显示的宽度的一半
|
||||
|
||||
if (halfPlace < showPost) {//从右往左移动
|
||||
var tempMove = leftWidth - subWidth;//预留一部分距离
|
||||
if (tempMove > maxMoveWidth) {//当前移动的距离超过最大可移动的宽度
|
||||
tempMove = maxMoveWidth;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg("您好!当前没有可关闭的窗口了 (๑╹◡╹)ノ");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
openTabs.each(function (i, j) {
|
||||
element.tabDelete(filter, $(j).attr("lay-id"));
|
||||
});
|
||||
break;
|
||||
}
|
||||
element.render("tab", filter);
|
||||
// this.navMove("rightmax");
|
||||
};
|
||||
|
||||
/**
|
||||
* 移动标签导航
|
||||
* @param moveId
|
||||
* 为left:往左边移动
|
||||
* 为right:往右边移动
|
||||
* 为rightmax:跑到最右边
|
||||
* 为leftmax:跑到最左边
|
||||
*/
|
||||
okTab.prototype.navMove = function (moveId, that) {
|
||||
var superEle = $(".ok-tab"),//父级元素
|
||||
contEle = $(".ok-tab-title"),//tab内容存放的父元素
|
||||
superWidth = parseInt(superEle.width()) - 40 * 3,//可显示的宽度
|
||||
contWidth = parseInt(contEle.width()),//移动元素的总宽度
|
||||
elTabs = $(".ok-tab-title li"),//所有已存在的tab集合
|
||||
postLeft = contEle.position().left;//当前移动的位置
|
||||
|
||||
/*elTabs.each(function (i, j) {
|
||||
moveWidth += $(j).outerWidth() * 1;
|
||||
});*/
|
||||
|
||||
var movePost = moveId.toLowerCase().indexOf("left") < 0 ? -1 : 1;//移动方向
|
||||
var step = parseInt((superWidth * 0.25 < 20 ? 20 : superWidth * 0.25));//移动步长
|
||||
var moveLeft = postLeft + step * movePost;
|
||||
var moveWidth = contWidth - superWidth;
|
||||
if (contWidth > superWidth) {
|
||||
switch (moveId) {
|
||||
case 'left':
|
||||
if (moveLeft >= step) {
|
||||
layer.tips('已到最左边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = 0;
|
||||
}
|
||||
break;
|
||||
case 'leftmax':
|
||||
if (moveLeft >= step) {
|
||||
layer.tips('已到最左边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = 0;
|
||||
}
|
||||
break;
|
||||
case 'right':
|
||||
if (superWidth + Math.abs(moveLeft) >= contWidth + step) {
|
||||
layer.tips('已到最右边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = -moveWidth;
|
||||
}
|
||||
if (superWidth + Math.abs(moveLeft) >= contWidth) {
|
||||
moveLeft = -moveWidth;
|
||||
}
|
||||
break;
|
||||
case 'rightmax':
|
||||
if (superWidth + Math.abs(postLeft) >= contWidth + step) {
|
||||
layer.tips('已到最右边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
}
|
||||
moveLeft = -moveWidth;
|
||||
contEle.animate({
|
||||
left: -tempMove
|
||||
}, 50);
|
||||
} else {//从左往右移动
|
||||
console.log("从左往右移动");
|
||||
var tempMove = leftWidth - halfPlace;//预留一部分距离
|
||||
if (tempMove < 0) {
|
||||
tempMove = 0;
|
||||
}
|
||||
contEle.animate({
|
||||
left: -tempMove
|
||||
}, 50);
|
||||
}
|
||||
} else {
|
||||
contEle.animate({
|
||||
left: 0
|
||||
}, 50);
|
||||
//this.navMove("rightmax");
|
||||
}
|
||||
if (moveLeft > 0) {
|
||||
moveLeft = 0;
|
||||
|
||||
/**
|
||||
* 左侧菜单的样式和多级菜单的展开
|
||||
*/
|
||||
$(".okadmin-side").find("li,dd").removeClass("layui-this").removeClass("layui-nav-itemed");//关闭所有展开的菜单
|
||||
for (let i = 0; i < menuSet.length; i++) {
|
||||
if ($(menuSet[i]).attr('lay-id') == thatLayId) {
|
||||
$(menuSet[i]).parents("dd").addClass("layui-nav-itemed");
|
||||
$(menuSet[i]).parents("li").addClass("layui-nav-itemed");
|
||||
$(menuSet[i]).parent().removeClass("layui-nav-itemed").addClass("layui-this");
|
||||
break;
|
||||
}
|
||||
}
|
||||
contEle.animate({
|
||||
left: moveLeft
|
||||
}, 50);
|
||||
} else {
|
||||
contEle.animate({
|
||||
left: 0
|
||||
}, 50);
|
||||
}
|
||||
};
|
||||
|
||||
exports("okTab", function (option) {
|
||||
return new okTab().init(option);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// 点击导航页的操作
|
||||
okTab.prototype.tab = function () {
|
||||
var that = this;
|
||||
var filter = this.tabConfig.tabFilter;
|
||||
// "hello {0}".format("world");
|
||||
//`tab(${filter})`
|
||||
element.on("tab({0})".format(filter), function (data) {
|
||||
var index = data.index;//点击的某个tab索引
|
||||
var elSuper = $(".ok-tab"),//视窗元素
|
||||
elMove = $(".ok-tab-title"),//移动的元素
|
||||
elTabs = $(".ok-tab-title li"),//所有已存在的tab集合
|
||||
thatElem = $(elTabs[index]);//当前元素
|
||||
that.positionTab(elMove, thatElem);
|
||||
});
|
||||
};
|
||||
|
||||
//删除tab页的操作(此处为点击关闭按钮的操作)
|
||||
okTab.prototype.tabDelete = function () {
|
||||
var that = this;
|
||||
var filter = this.tabConfig.tabFilter;
|
||||
//`tabDelete(${filter})`
|
||||
element.on("tabDelete({0})".format(filter), function (data) {
|
||||
// that.navMove("right");
|
||||
});
|
||||
};
|
||||
|
||||
//右侧内容nav操作添加tab页
|
||||
okTab.prototype.tabAdd = function (_thisa) {
|
||||
var that = this;
|
||||
var _this = $(_thisa).clone(true);//拷贝dom(js: _this.cloneNode(true) )
|
||||
|
||||
var openTabNum = that.tabConfig.openTabNum;
|
||||
var tabFilter = that.tabConfig.tabFilter;
|
||||
var url = _this.attr("data-url");//选项卡的页面路径
|
||||
var tabId = _this.attr("lay-id");//选项卡ID
|
||||
var thatTabNum = $('.ok-tab-title > li').length;//当前已经打开的选项卡的数量
|
||||
var iframes = $(".ok-tab-content iframe");
|
||||
var isClose = _this.attr('is-close') || "true";
|
||||
|
||||
_this.prepend("<strong style='display: none;' is-close=" + isClose + " lay-id=" + tabId + "></strong>");
|
||||
|
||||
if (_this.children("i").length < 1) {
|
||||
_this.prepend("<i class='layui-icon'></i>");
|
||||
}
|
||||
if (_this.attr("target") == "_blank") {
|
||||
window.location.href = _this.attr("data-url");
|
||||
} else if (url != undefined) {
|
||||
var title = '';
|
||||
var html = _this.html();
|
||||
// 去重复选项卡
|
||||
/**
|
||||
* 这里还有一种情况就是同一选项卡页面路径不同(这个是多余的没必要了,页面不同,跳转的选项卡也应该新增)
|
||||
*/
|
||||
for (var i = 0; i < thatTabNum; i++) {
|
||||
if ($('.ok-tab-title > li').eq(i).attr('lay-id') == tabId) {
|
||||
var iframeParam = (iframes[i].src).split("?")[1];
|
||||
var urlParam = url.split("?")[1];
|
||||
if (urlParam == iframeParam) {
|
||||
element.tabChange(tabFilter, tabId);
|
||||
} else {
|
||||
//参数不一样的时候刷新并且更换参数
|
||||
iframes[i].contentWindow.location.reload(true);
|
||||
iframes[i].src = url;
|
||||
element.tabChange(tabFilter, tabId);
|
||||
}
|
||||
if (event) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (thatTabNum >= openTabNum) {
|
||||
layer.msg('最多只能同时打开' + openTabNum + '个选项卡哦。不然系统会卡的!');
|
||||
return;
|
||||
}
|
||||
var contentIframe = ("<iframe src='{0}' lay-id='{1}'" +
|
||||
"frameborder='0' scrolling='yes' width='100%' height='100%'>" +
|
||||
"</iframe>").format(url, tabId);
|
||||
element.tabAdd(tabFilter, {
|
||||
title: html,
|
||||
content: contentIframe,
|
||||
id: tabId
|
||||
});
|
||||
|
||||
// 切换选项卡
|
||||
element.tabChange(tabFilter, tabId);
|
||||
this.navMove("rightmax");
|
||||
}
|
||||
};
|
||||
|
||||
//生成左侧菜单
|
||||
var temp = "";
|
||||
okTab.prototype.navBar = function (strData) {
|
||||
var data;
|
||||
if (typeof (strData) == "string") {
|
||||
var data = JSON.parse(strData); //有可能是字符串,转换一下
|
||||
} else {
|
||||
data = strData;
|
||||
}
|
||||
var ulItem = '';
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
temp = "";
|
||||
if (data[i].isCheck) {
|
||||
ulItem += '<li class="layui-nav-item layui-this">';
|
||||
} else if (data[i].spread) {
|
||||
ulItem += '<li class="layui-nav-item layui-nav-itemed">';
|
||||
} else {
|
||||
ulItem += '<li class="layui-nav-item">';
|
||||
}
|
||||
createMenu(data[i], (i + 1).toString());
|
||||
ulItem += temp;
|
||||
ulItem += '</li>';
|
||||
}
|
||||
return ulItem;
|
||||
};
|
||||
|
||||
/**
|
||||
* 递归生成菜单
|
||||
* @param data 数据
|
||||
* @param tabID 设置lay-id使用
|
||||
*/
|
||||
function createMenu(data, tabID) {
|
||||
if (data.children != undefined && data.children.length > 0) {
|
||||
temp += '<a>';
|
||||
if (data.icon != undefined && data.icon != '') {
|
||||
if (!data.fontFamily || data.fontFamily.indexOf("layui-icon") >= 0) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="layui-icon">{0}</i>').format(data.icon);
|
||||
} else {
|
||||
temp += ('<i class="layui-icon {0}"></i>').format(data.icon);
|
||||
}
|
||||
} else if (data.fontFamily) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="{0}">{1}</i>').format(data.fontFamily, data.icon);
|
||||
} else {
|
||||
temp += ('<i class="{0} {1}"></i>').format(data.fontFamily, data.icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
temp += '<cite>' + data.title + '</cite>';
|
||||
temp += '<span class="layui-nav-more"></span>';
|
||||
temp += '</a>';
|
||||
temp += '<dl class="layui-nav-child">';
|
||||
for (var i = 0; i < data.children.length; i++) {
|
||||
temp += '<dd>';
|
||||
var lay_id = tabID + "-" + (i + 1);
|
||||
createMenu(data.children[i], lay_id);
|
||||
temp += '</dd>';
|
||||
}
|
||||
temp += "</dl>";
|
||||
} else {
|
||||
var isClose = data.isClose === false ? "false" : "true";
|
||||
if (data.target) {
|
||||
temp += ('<a lay-id="{0}" data-url="{1}" target="{2}" is-close="{3}">').format(tabID, data.href, data.target, isClose);
|
||||
} else {
|
||||
temp += ('<a lay-id="{0}" data-url="{1}" is-close="{2}">').format(tabID, data.href, isClose);
|
||||
}
|
||||
if (data.icon != undefined && data.icon != '') {
|
||||
if (!data.fontFamily || data.fontFamily.indexOf("layui-icon") >= 0) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="layui-icon">{0}</i>').format(data.icon);
|
||||
} else {
|
||||
temp += ('<i class="layui-icon {0}"></i>').format(data.icon);
|
||||
}
|
||||
} else if (data.fontFamily) {
|
||||
if (data.icon.indexOf("&#") >= 0) {
|
||||
temp += ('<i class="{0}">{1}</i>').format(data.fontFamily, data.icon);
|
||||
} else {
|
||||
temp += ('<i class="{0} {1}"></i>').format(data.fontFamily, data.icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
temp += ('<cite>{0}</cite></a>').format(data.title);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//重新对导航进行渲染(此处有个回调函数,主要用作渲染完成之后的操作)
|
||||
okTab.prototype.render = function (fun) {
|
||||
let _this = this;//data
|
||||
$.get(_this.tabConfig.url, function (data) {
|
||||
$("#navBar").html(_this.navBar(data));
|
||||
element.render('nav');
|
||||
$(window).resize(function () {
|
||||
$("#navBar").height($(window).height() - 245);
|
||||
});
|
||||
if (typeof fun == "function") {
|
||||
fun();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//刷新当前tab页
|
||||
okTab.prototype.refresh = function (_this) {
|
||||
if (!($(_this).hasClass("refreshThis"))) {
|
||||
$(_this).addClass("refreshThis");
|
||||
$(".ok-tab-content .layui-show").find("iframe")[0].contentWindow.location.reload(true);
|
||||
setTimeout(function () {
|
||||
$(_this).removeClass("refreshThis");
|
||||
}, 2000)
|
||||
} else {
|
||||
layer.msg("客官请不要频繁点击哦!我会反应不过来的");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 关闭tab标签页操作
|
||||
* @param num 默认为1
|
||||
* 1:代表关闭当前标签页
|
||||
* 2:代表关闭其他标签页
|
||||
* 3:代表关闭所有标签页
|
||||
*/
|
||||
okTab.prototype.tabClose = function (num) {
|
||||
num = num || 1;
|
||||
num = num * 1;//强制转换成数字
|
||||
var that = this;
|
||||
let openTabs = $('.ok-tab-title > li strong[lay-id]').not('strong[is-close=false]'),//获取已打开的tab元素(除开不会被关闭的导航)
|
||||
thatLayID = $('.ok-tab-title > li.layui-this strong[lay-id]').not('strong[is-close=false]').attr("lay-id") || '';//获取当前打开的tab元素ID(除开不会被关闭的导航)
|
||||
|
||||
var filter = that.tabConfig.tabFilter;
|
||||
if (thatLayID.length < 1 && num == 1) {
|
||||
layer.msg("您不能关闭当前页哦 (๑╹◡╹)ノ");
|
||||
return;
|
||||
} else if (openTabs.length < 1) {
|
||||
layer.msg("您好!当前没有可关闭的窗口了 (๑╹◡╹)ノ");
|
||||
return;
|
||||
}
|
||||
switch (num) {
|
||||
case 1:
|
||||
element.tabDelete(filter, thatLayID);
|
||||
break;
|
||||
case 2:
|
||||
if (openTabs.length > 0) {
|
||||
openTabs.each(function (i, j) {
|
||||
if ($(j).attr("lay-id") != thatLayID) {
|
||||
element.tabDelete(filter, $(j).attr("lay-id"));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg("您好!当前没有可关闭的窗口了 (๑╹◡╹)ノ");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
openTabs.each(function (i, j) {
|
||||
element.tabDelete(filter, $(j).attr("lay-id"));
|
||||
});
|
||||
break;
|
||||
}
|
||||
element.render("tab", filter);
|
||||
};
|
||||
|
||||
/**
|
||||
* 移动标签导航
|
||||
* @param moveId
|
||||
* 为left:往左边移动
|
||||
* 为right:往右边移动
|
||||
* 为rightmax:跑到最右边
|
||||
* 为leftmax:跑到最左边
|
||||
*/
|
||||
okTab.prototype.navMove = function (moveId, that) {
|
||||
var superEle = $(".ok-tab"),//父级元素
|
||||
contEle = $(".ok-tab-title"),//tab内容存放的父元素
|
||||
superWidth = parseInt(superEle.width()) - 40 * 3,//可显示的宽度
|
||||
contWidth = parseInt(contEle.width()),//移动元素的总宽度
|
||||
elTabs = $(".ok-tab-title li"),//所有已存在的tab集合
|
||||
postLeft = contEle.position().left;//当前移动的位置
|
||||
|
||||
/*elTabs.each(function (i, j) {
|
||||
moveWidth += $(j).outerWidth() * 1;
|
||||
});*/
|
||||
|
||||
var movePost = moveId.toLowerCase().indexOf("left") < 0 ? -1 : 1;//移动方向
|
||||
var step = parseInt((superWidth * 0.25 < 20 ? 20 : superWidth * 0.25));//移动步长
|
||||
var moveLeft = postLeft + step * movePost;
|
||||
var moveWidth = contWidth - superWidth;
|
||||
if (contWidth > superWidth) {
|
||||
switch (moveId) {
|
||||
case 'left':
|
||||
if (moveLeft >= step) {
|
||||
layer.tips('已到最左边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = 0;
|
||||
}
|
||||
break;
|
||||
case 'leftmax':
|
||||
if (moveLeft >= step) {
|
||||
layer.tips('已到最左边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = 0;
|
||||
}
|
||||
break;
|
||||
case 'right':
|
||||
if (superWidth + Math.abs(moveLeft) >= contWidth + step) {
|
||||
layer.tips('已到最右边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
moveLeft = -moveWidth;
|
||||
}
|
||||
if (superWidth + Math.abs(moveLeft) >= contWidth) {
|
||||
moveLeft = -moveWidth;
|
||||
}
|
||||
break;
|
||||
case 'rightmax':
|
||||
if (superWidth + Math.abs(postLeft) >= contWidth + step) {
|
||||
layer.tips('已到最右边啦', that, {
|
||||
tips: [1, '#000'],
|
||||
time: 2000
|
||||
});
|
||||
}
|
||||
moveLeft = -moveWidth;
|
||||
}
|
||||
if (moveLeft > 0) {
|
||||
moveLeft = 0;
|
||||
}
|
||||
contEle.animate({
|
||||
left: moveLeft
|
||||
}, 50);
|
||||
} else {
|
||||
contEle.animate({
|
||||
left: 0
|
||||
}, 50);
|
||||
}
|
||||
};
|
||||
|
||||
exports("okTab", function (option) {
|
||||
return new okTab().init(option);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue