Initial commit
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
if(window.top!==window.self){window.top.location=window.location};
|
||||
layui.use(['element'], function () {
|
||||
var $ = layui.jquery;
|
||||
$(document).on('click', '.captcha-img', function () {
|
||||
var src = this.src.split("?")[0];
|
||||
this.src = src + "?" + Math.random();
|
||||
});
|
||||
$(document).on('click', '.ajax-login', function (e) {
|
||||
e.preventDefault();
|
||||
var form = $(this).parents("form");
|
||||
var url = form.attr("action");
|
||||
var serializeArray = form.serializeArray();
|
||||
$.post(url, serializeArray, function (result) {
|
||||
if(result.code != 200){
|
||||
$('.captcha-img').click();
|
||||
}
|
||||
$.fn.Messager(result);
|
||||
});
|
||||
})
|
||||
});
|
||||
@@ -0,0 +1,369 @@
|
||||
layui.use(['element', 'form', 'layer', 'upload'], function () {
|
||||
var $ = layui.jquery;
|
||||
var element = layui.element; //加载element模块
|
||||
var form = layui.form; //加载form模块
|
||||
var layer = layui.layer; //加载layer模块
|
||||
var upload = layui.upload; //加载upload模块
|
||||
|
||||
/* 侧边栏开关 */
|
||||
$(".side-toggle").on("click", function (e) {
|
||||
e.preventDefault();
|
||||
var to = $(".layui-layout-admin");
|
||||
to.toggleClass("layui-side-shrink");
|
||||
to.attr("toggle") === 'on' ? to.attr("toggle", "off") : to.attr("toggle", "on");
|
||||
});
|
||||
$(".layui-side").on("click", function () {
|
||||
var to = $(".layui-layout-admin");
|
||||
if (to.attr("toggle") === 'on') {
|
||||
to.attr("toggle", "off");
|
||||
to.removeClass("layui-side-shrink");
|
||||
}
|
||||
});
|
||||
|
||||
/* 最大化窗口 */
|
||||
$(".timo-screen-full").on("click", function (e) {
|
||||
e.preventDefault();
|
||||
if (!$(this).hasClass("full-on")) {
|
||||
var docElm = document.documentElement;
|
||||
var full = docElm.requestFullScreen || docElm.webkitRequestFullScreen ||
|
||||
docElm.mozRequestFullScreen || docElm.msRequestFullscreen;
|
||||
"undefined" !== typeof full && full && full.call(docElm);
|
||||
} else {
|
||||
document.exitFullscreen ? document.exitFullscreen()
|
||||
: document.mozCancelFullScreen ? document.mozCancelFullScreen()
|
||||
: document.webkitCancelFullScreen ? document.webkitCancelFullScreen()
|
||||
: document.msExitFullscreen && document.msExitFullscreen()
|
||||
}
|
||||
$(this).toggleClass("full-on");
|
||||
});
|
||||
|
||||
/* 新建或切换标签栏 */
|
||||
var tabs = function (url) {
|
||||
var item = $('[lay-url="' + url + '"]');
|
||||
if (url !== undefined && url !== '#' && item.length > 0) {
|
||||
var bootLay = $('[lay-id="' + url + '"]');
|
||||
if (bootLay.length === 0) {
|
||||
var title = item.attr("lay-icon") === 'true' ? item.html()
|
||||
: item.children(".layui-nav-title").text();
|
||||
var iframeUrl = (window.location.pathname + url).replace('//','/');
|
||||
element.tabAdd('iframe-tabs', {
|
||||
title: title
|
||||
, content: '<iframe src="' + iframeUrl + '" frameborder="0" class="layui-layout-iframe"></iframe>'
|
||||
, id: url
|
||||
});
|
||||
}
|
||||
element.tabChange('iframe-tabs', url);
|
||||
}
|
||||
};
|
||||
|
||||
/* 监听导航栏事件,实现标签页的切换 */
|
||||
element.on("nav(layui-nav-side)", function ($this) {
|
||||
var url = $this.attr('lay-url');
|
||||
tabs(url);
|
||||
});
|
||||
|
||||
/* 监听标签栏事件,实现导航栏高亮显示 */
|
||||
element.on("tab(iframe-tabs)", function () {
|
||||
var layId = $(this).attr("lay-id");
|
||||
$(".layui-side .layui-this").removeClass("layui-this");
|
||||
$('[lay-url="' + layId + '"]').parent().addClass("layui-this");
|
||||
// 改变地址hash值
|
||||
location.hash = this.getAttribute('lay-id');
|
||||
});
|
||||
|
||||
/* 监听hash来切换选项卡*/
|
||||
window.onhashchange = function (e) {
|
||||
var url = location.hash.replace(/^#/, '');
|
||||
var index = $(".layui-layout-admin .layui-side .layui-nav-item")[0];
|
||||
$(index).children("a").attr("lay-icon", "true");
|
||||
if (url === "" || url === undefined) {
|
||||
url = $(index).children("[lay-url]").attr("lay-url");
|
||||
}
|
||||
tabs(url);
|
||||
};
|
||||
window.onhashchange();
|
||||
|
||||
/* 初始化时展开子菜单 */
|
||||
$("dd.layui-this").parents(".layui-nav-child").parent()
|
||||
.addClass("layui-nav-itemed");
|
||||
|
||||
/* 刷新iframe页面 */
|
||||
$(".refresh-btn").click(function () {
|
||||
location.reload();
|
||||
});
|
||||
|
||||
/* AJAX请求默认选项,处理连接超时问题 */
|
||||
$.ajaxSetup({
|
||||
complete: function (xhr, status) {
|
||||
if (xhr.status == 401) {
|
||||
layer.confirm('session连接超时,是否重新登录?', {
|
||||
btn: ['是', '否']
|
||||
}, function () {
|
||||
if (window.parent.window != window) {
|
||||
window.top.location = window.location.pathname + '/login';
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/* 漂浮消息 */
|
||||
$.fn.Messager = function (result) {
|
||||
if (result.code === 200) {
|
||||
layer.msg(result.msg, {offset: '15px', time: 3000, icon: 1});
|
||||
setTimeout(function () {
|
||||
if (result.data === 'submit[refresh]') {
|
||||
parent.location.reload();
|
||||
return;
|
||||
}
|
||||
if (result.data == null) {
|
||||
window.location.reload();
|
||||
} else {
|
||||
window.location.href = result.data
|
||||
}
|
||||
}, 2000);
|
||||
} else {
|
||||
layer.msg(result.msg, {offset: '15px', time: 3000, icon: 2});
|
||||
}
|
||||
};
|
||||
|
||||
/* 提交表单数据 */
|
||||
$(document).on("click", ".ajax-submit", function (e) {
|
||||
e.preventDefault();
|
||||
var form = $(this).parents("form");
|
||||
var url = form.attr("action");
|
||||
var serializeArray = form.serializeArray();
|
||||
$.post(url, serializeArray, function (result) {
|
||||
if (result.data == null) {
|
||||
result.data = 'submit[refresh]';
|
||||
}
|
||||
$.fn.Messager(result);
|
||||
});
|
||||
});
|
||||
|
||||
/* get方式异步 */
|
||||
$(document).on("click", ".ajax-get", function (e) {
|
||||
e.preventDefault();
|
||||
var msg = $(this).data("msg");
|
||||
if (msg !== undefined) {
|
||||
layer.confirm(msg + '?', {
|
||||
title: '提示',
|
||||
btn: ['确认', '取消']
|
||||
}, function () {
|
||||
$.get(e.target.href, function (result) {
|
||||
$.fn.Messager(result);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$.get(e.target.href, function (result) {
|
||||
$.fn.Messager(result);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// post方式异步-操作状态
|
||||
$(".ajax-status").on("click", function (e) {
|
||||
e.preventDefault();
|
||||
var checked = [];
|
||||
var tdcheckbox = $(".timo-table td .timo-checkbox :checkbox:checked");
|
||||
if (tdcheckbox.length > 0) {
|
||||
tdcheckbox.each(function (key, val) {
|
||||
checked.push("ids=" + $(val).attr("value"));
|
||||
});
|
||||
$.post(e.target.href, checked.join("&"), function (result) {
|
||||
$.fn.Messager(result);
|
||||
});
|
||||
} else {
|
||||
layer.msg('请选择一条记录');
|
||||
}
|
||||
});
|
||||
|
||||
/* 添加/修改弹出层 */
|
||||
$(document).on("click", ".open-popup, .open-popup-param", function () {
|
||||
var title = $(this).data("title");
|
||||
var url = $(this).attr("data-url");
|
||||
if ($(this).hasClass("open-popup-param")) {
|
||||
var tdcheckbox = $(".timo-table td .timo-checkbox :checkbox:checked");
|
||||
var param = '';
|
||||
if (tdcheckbox.length === 0) {
|
||||
layer.msg('请选择一条记录');
|
||||
return;
|
||||
}
|
||||
if (tdcheckbox.length > 1 && $(this).data("type") === 'radio') {
|
||||
layer.msg('只允许选中一个');
|
||||
return;
|
||||
}
|
||||
tdcheckbox.each(function (key, val) {
|
||||
param += "ids=" + $(val).attr("value") + "&";
|
||||
});
|
||||
param = param.substr(0, param.length - 1);
|
||||
url += "?" + param;
|
||||
}
|
||||
var size = $(this).attr("data-size");
|
||||
if (size === undefined || size === "auto") {
|
||||
size = ['50%', '80%'];
|
||||
}else if (size === "max") {
|
||||
size = ['100%', '100%'];
|
||||
}else if (size.indexOf(',') !== -1) {
|
||||
var split = size.split(",");
|
||||
size = [split[0] + 'px', split[1] + 'px'];
|
||||
}
|
||||
window.layerIndex = layer.open({
|
||||
type: 2,
|
||||
title: title,
|
||||
shadeClose: true,
|
||||
maxmin: true,
|
||||
area: size,
|
||||
content: [url, 'on']
|
||||
});
|
||||
});
|
||||
|
||||
/* 关闭弹出层 */
|
||||
$(".close-popup").click(function (e) {
|
||||
e.preventDefault();
|
||||
parent.layer.close(window.parent.layerIndex);
|
||||
});
|
||||
|
||||
/* 下拉按钮组 */
|
||||
$(".btn-group").click(function (e) {
|
||||
e.stopPropagation();
|
||||
$this = $(this);
|
||||
$this.toggleClass("show");
|
||||
$(document).one("click", function () {
|
||||
if ($this.hasClass("show")) {
|
||||
$this.removeClass("show");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 展示数据列表-多选框
|
||||
var thcheckbox = $(".timo-table th .timo-checkbox :checkbox");
|
||||
thcheckbox.on("change", function () {
|
||||
var tdcheckbox = $(".timo-table td .timo-checkbox :checkbox");
|
||||
if (thcheckbox.is(':checked')) {
|
||||
tdcheckbox.prop("checked", true);
|
||||
} else {
|
||||
tdcheckbox.prop("checked", false);
|
||||
}
|
||||
});
|
||||
|
||||
// 检测列表数据是否为空
|
||||
var timoTable = $(".timo-table tbody");
|
||||
if (timoTable.length > 0) {
|
||||
var children = timoTable.children();
|
||||
if (children.length === 0) {
|
||||
var length = $(".timo-table thead th").length;
|
||||
var trNullInfo = "<tr><td class='timo-table-null' colspan='"
|
||||
+ length + "'>没有找到匹配的记录</td></tr>";
|
||||
timoTable.append(trNullInfo);
|
||||
}
|
||||
}
|
||||
|
||||
// 携带参数跳转
|
||||
var paramSkip = function () {
|
||||
var getSearch = "";
|
||||
// 搜索框参数
|
||||
$('.timo-search-box [name]').each(function (key, val) {
|
||||
if ($(val).val() !== "" && $(val).val() !== undefined) {
|
||||
getSearch += $(val).attr("name") + "=" + $(val).val() + "&";
|
||||
}
|
||||
});
|
||||
|
||||
// 页数参数
|
||||
var pageSize = $(".page-number").val();
|
||||
if (pageSize !== undefined && pageSize !== "") {
|
||||
getSearch += "size=" + pageSize + "&";
|
||||
}
|
||||
|
||||
// 排序参数
|
||||
var asc = $(".sortable.asc").data("field");
|
||||
if(asc !== undefined){
|
||||
getSearch += "orderByColumn=" + asc + "&isAsc=asc&";
|
||||
}
|
||||
var desc = $(".sortable.desc").data("field");
|
||||
if(desc !== undefined){
|
||||
getSearch += "orderByColumn=" + desc + "&isAsc=desc&";
|
||||
}
|
||||
|
||||
if (getSearch !== "") {
|
||||
getSearch = "?" + getSearch.substr(0, getSearch.length - 1);
|
||||
}
|
||||
window.location.href = window.location.pathname + getSearch;
|
||||
};
|
||||
|
||||
/* 展示列表数据搜索 */
|
||||
$(document).on("click", ".timo-search-btn", function () {
|
||||
paramSkip();
|
||||
});
|
||||
/* 改变显示页数 */
|
||||
$(document).on("change", ".page-number", function () {
|
||||
paramSkip();
|
||||
});
|
||||
/* 触发字段排序 */
|
||||
$(document).on("click", ".sortable", function () {
|
||||
$(".sortable").not(this).removeClass("asc").removeClass("desc");
|
||||
if($(this).hasClass("asc")){
|
||||
$(this).removeClass("asc").addClass("desc");
|
||||
}else {
|
||||
$(this).removeClass("desc").addClass("asc");
|
||||
}
|
||||
paramSkip();
|
||||
});
|
||||
|
||||
/* 参数化字段排序 */
|
||||
var getSearch = function(name) {
|
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||
var r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return null;
|
||||
};
|
||||
var field = getSearch("orderByColumn");
|
||||
var isAsc = getSearch("isAsc");
|
||||
if(field != null){
|
||||
$("[data-field='"+ field +"']").addClass(isAsc);
|
||||
}
|
||||
|
||||
/** 上传图片操作 */
|
||||
upload.render({
|
||||
elem: '.upload-image' //绑定元素
|
||||
,url: $('.upload-image').attr('up-url') //上传接口
|
||||
,field: 'image' //文件域的字段名
|
||||
,acceptMime: 'image/*' //选择文件类型
|
||||
,exts: 'jpg|jpeg|png|gif' //支持的图片格式
|
||||
,multiple: true //开启多文件选择
|
||||
,choose: function (obj) {
|
||||
obj.preview(function (index, file, result) {
|
||||
var upload = $('.upload-image');
|
||||
var name = upload.attr('name');
|
||||
var show = upload.parents('.layui-form-item').children('.upload-show');
|
||||
show.append("<div class='upload-item'><img src='"+ result +"'/>" +
|
||||
"<input id='"+ index +"' type='hidden' name='"+name+"'/>" +
|
||||
"<i class='upload-item-close layui-icon layui-icon-close'></i></div>");
|
||||
});
|
||||
}
|
||||
,done: function(res, index, upload){
|
||||
var field = $('.upload-image').attr('up-field') || 'id';
|
||||
// 解决节点渲染和异步上传不同步问题
|
||||
var interval = window.setInterval(function(){
|
||||
var hide = $("#"+index);
|
||||
if(hide.length > 0){
|
||||
var item = hide.parent('.upload-item');
|
||||
if (res.code === 200) {
|
||||
hide.val(res.data[field]);
|
||||
item.addClass('succeed');
|
||||
}else {
|
||||
hide.remove();
|
||||
item.addClass('error');
|
||||
}
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
|
||||
// 删除上传图片展示项
|
||||
$(document).on("click", ".upload-item-close", function () {
|
||||
$(this).parent('.upload-item').remove();
|
||||
});
|
||||
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
/*!
|
||||
* jQuery Mousewheel 3.1.13
|
||||
*
|
||||
* Copyright 2015 jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*/
|
||||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});
|
||||
@@ -0,0 +1,358 @@
|
||||
// 树形数据展示
|
||||
;(function($){
|
||||
var self;
|
||||
var TableTree=function(param){
|
||||
self=this;
|
||||
this.defaults={
|
||||
tree: $(".timo-tree"),
|
||||
treeTable: ".timo-tree-table", // 表格类名
|
||||
treeIcon: "<i class='toggle-icon fa fa-chevron-right'></i>",
|
||||
treeFill: "<i class='toggle-fill'></i>",
|
||||
hideRank: 3,
|
||||
oldActive: null,
|
||||
oldButton: null,
|
||||
scrollTop: 90,
|
||||
}
|
||||
this.options=$.extend({},this.defaults,param);
|
||||
}
|
||||
|
||||
TableTree.prototype={
|
||||
// 初始化
|
||||
init: function(){
|
||||
// 获取树形列表数据
|
||||
var tree = self.options.tree;
|
||||
$.get(tree.data('url'),function(result){
|
||||
if(result.data.length > 0){
|
||||
// zTree传递列表数据
|
||||
self.zTreeReady(result.data);
|
||||
// 树形表格传递列表数据
|
||||
self.tableTree(result.data);
|
||||
// 开启树形表格子级开关
|
||||
self.toggleChild();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 操作zTree组件
|
||||
zTreeReady: function(listData){
|
||||
var setting = {
|
||||
view: {
|
||||
addHoverDom: addHoverDom,
|
||||
removeHoverDom: removeHoverDom,
|
||||
},
|
||||
edit: {
|
||||
enable: true,
|
||||
},
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
onClick: onClick,
|
||||
onExpand: onExpand,
|
||||
onCollapse: onCollapse,
|
||||
beforeEditName: beforeEditName,
|
||||
beforeRemove: beforeRemove,
|
||||
}
|
||||
};
|
||||
|
||||
function onClick(event, treeId, treeNode, clickFlag) {
|
||||
var tNode = $("[tree-id='"+treeNode.id+"']");
|
||||
if(self.options.treeActive != null){
|
||||
self.options.treeActive.removeClass("tree-active");
|
||||
}
|
||||
self.options.treeActive = tNode;
|
||||
tNode.addClass("tree-active");
|
||||
$(document).scrollTop(tNode.offset().top-self.options.scrollTop);
|
||||
|
||||
}
|
||||
|
||||
function onExpand(event, treeId, treeNode) {
|
||||
var tNode = $("[tree-id='"+treeNode.id+"']");
|
||||
self.expandChild(tNode, true);
|
||||
}
|
||||
|
||||
function onCollapse(event, treeId, treeNode) {
|
||||
var tNode = $("[tree-id='"+treeNode.id+"']");
|
||||
self.expandChild(tNode, false);
|
||||
}
|
||||
|
||||
function addHoverDom(treeId, treeNode){
|
||||
var node = $("#" + treeNode.tId + "_span");
|
||||
if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
|
||||
var addNode = "<span class='button tree-add' id='addBtn_" + treeNode.tId +"'></span>";
|
||||
node.after(addNode);
|
||||
var btn = $("#addBtn_"+treeNode.tId);
|
||||
if (btn) btn.bind("click", function(){
|
||||
var popup = $(".popup-add");
|
||||
var url = popup.data('url');
|
||||
popup.attr("data-url", url + "/" + treeNode.id);
|
||||
popup.click();
|
||||
popup.attr("data-url", url);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function removeHoverDom(treeId, treeNode) {
|
||||
$("#addBtn_"+treeNode.tId).unbind().remove();
|
||||
}
|
||||
|
||||
function beforeEditName(treeId, treeNode) {
|
||||
var trNode = $("[tree-id='"+ treeNode.id +"']");
|
||||
var edit = trNode.find(".popup-edit");
|
||||
edit.click();
|
||||
return false;
|
||||
}
|
||||
|
||||
function beforeRemove(treeId, treeNode) {
|
||||
var trNode = $("[tree-id='"+ treeNode.id +"']");
|
||||
var del = trNode.find(".popup-delete");
|
||||
del.click();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 封装zTree数据
|
||||
var zNodes = [];
|
||||
listData.forEach(function (val) {
|
||||
var nav = {
|
||||
id: val.id,
|
||||
pId: val.pid,
|
||||
name: val.title
|
||||
};
|
||||
if(nav.pId == 0){
|
||||
nav.isParent = true;
|
||||
nav.open = true;
|
||||
}
|
||||
zNodes.push(nav);
|
||||
});
|
||||
|
||||
// zTree组件初始化
|
||||
$(document).ready(function(){
|
||||
$.fn.zTree.init(self.options.tree.find(".ztree"), setting, zNodes);
|
||||
});
|
||||
},
|
||||
|
||||
// 封装树形表格
|
||||
tableTree: function(listData){
|
||||
// 封装树形结构数据
|
||||
var newList = [];
|
||||
var treeList = [];
|
||||
|
||||
listData.forEach(function (item) {
|
||||
newList[item.id] = item;
|
||||
});
|
||||
|
||||
listData.forEach(function (item) {
|
||||
if(newList[item.pid] != undefined){
|
||||
if(newList[item.pid].children == undefined){
|
||||
newList[item.pid].children = [];
|
||||
}
|
||||
newList[item.pid].children.push(item);
|
||||
}else{
|
||||
treeList.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
// 获取表格展示模型
|
||||
var tbody = $(self.options.treeTable+" tbody");
|
||||
var template = tbody.html();
|
||||
tbody.empty();
|
||||
tbody.css("visibility", "visible");
|
||||
|
||||
// 填充数据
|
||||
var regex=/\{\{([$A-Za-z]+?)\}\}/g;
|
||||
var rank = 1;
|
||||
self.expandTree(treeList, rank, function (item, rank) {
|
||||
var callback = template.replace(regex,function($1){
|
||||
var point = $1.substring(2,$1.length-2);
|
||||
if(point == "title"){
|
||||
var icon = self.options.treeIcon;
|
||||
if(item.children == undefined){
|
||||
icon = self.options.treeFill;
|
||||
}
|
||||
var fill = "";
|
||||
for(var i=0; i<rank-1; i++){
|
||||
fill += self.options.treeFill;
|
||||
}
|
||||
return fill + icon + item[point];
|
||||
}else if(point == '$hide'){
|
||||
var isHide = (rank >= self.options.hideRank);
|
||||
return isHide ? "tree-hidd" : "";
|
||||
}else{
|
||||
return item[point];
|
||||
}
|
||||
});
|
||||
tbody.append(callback);
|
||||
});
|
||||
},
|
||||
|
||||
// 展开树形数据
|
||||
expandTree: function (list, rank, callback) {
|
||||
list.forEach(function(item){
|
||||
callback(item, rank);
|
||||
if(item.children != undefined){
|
||||
self.expandTree(item.children, ++rank, callback);
|
||||
rank -= 1;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 树形表格子级开关
|
||||
toggleChild: function() {
|
||||
$(".toggle-icon").click(function (){
|
||||
var trNode = $(this).parents("tr");
|
||||
var id = trNode.attr("tree-id");
|
||||
var childs = $("[tree-pid='"+id+"']");
|
||||
var isClose = childs.hasClass("tree-hidd");
|
||||
self.expandChild(trNode, isClose);
|
||||
});
|
||||
},
|
||||
|
||||
// 递归所有子级开关
|
||||
expandChild :function (trNode, isClose){
|
||||
var id = trNode.attr("tree-id");
|
||||
var childs = $("[tree-pid='"+id+"']");
|
||||
if(!isClose){
|
||||
childs.addClass("tree-hidd");
|
||||
childs.each(function (key, item) {
|
||||
self.expandChild($(item), isClose);
|
||||
});
|
||||
}else {
|
||||
childs.removeClass("tree-hidd");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.timoTree=function(param){
|
||||
var tableTree=new TableTree(param);
|
||||
return tableTree.init();
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
// 树形选择器
|
||||
(function($){
|
||||
var self;
|
||||
var SelectTree=function(param){
|
||||
self=this;
|
||||
this.defaults={
|
||||
tree: $(".select-tree"),
|
||||
rootTree: null,
|
||||
onSelected: function () {}
|
||||
}
|
||||
this.options=$.extend({},this.defaults,param);
|
||||
}
|
||||
|
||||
SelectTree.prototype={
|
||||
// 初始化
|
||||
init: function(){
|
||||
// 获取树形列表数据
|
||||
var tree = self.options.tree;
|
||||
// 构造悬浮选择器
|
||||
self.selector();
|
||||
// 重构选择框
|
||||
self.resetSelect(tree);
|
||||
// 点击时显示悬浮选择器
|
||||
tree.click(function(){
|
||||
var node = $(this);
|
||||
$.get(node.data('url'),function(result){
|
||||
//if(result.data.length > 0){
|
||||
// 显示定位悬浮选择器
|
||||
self.position(node);
|
||||
// zTree传递列表数据
|
||||
self.zTreeReady(result.data, node);
|
||||
//}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 操作zTree组件
|
||||
zTreeReady: function(listData, node){
|
||||
var setting = {
|
||||
view: {
|
||||
dblClickExpand: false
|
||||
},
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
onClick: function(event, treeId, treeNode){
|
||||
node.val(treeNode.name);
|
||||
node.siblings("[type='hidden']").val(treeNode.id);
|
||||
$(".selectContent").hide();
|
||||
self.options.onSelected(treeNode);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 封装zTree数据
|
||||
var zNodes = [];
|
||||
if(self.options.rootTree != null){
|
||||
zNodes.push({id: 0, name: self.options.rootTree, open: true});
|
||||
}
|
||||
listData.forEach(function (val) {
|
||||
var nav = {
|
||||
id: val.id,
|
||||
pId: val.pid,
|
||||
name: val.title
|
||||
};
|
||||
if(nav.pId == 0){
|
||||
nav.isParent = true;
|
||||
nav.open = true;
|
||||
}
|
||||
zNodes.push(nav);
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
$.fn.zTree.init($(".selectContent>.ztree"), setting, zNodes);
|
||||
});
|
||||
},
|
||||
|
||||
// 构造悬浮选择器
|
||||
selector: function () {
|
||||
$("body").append("\n" +
|
||||
"<div class='selectContent'>" +
|
||||
" <ul class='ztree'></ul>" +
|
||||
"</div>");
|
||||
},
|
||||
|
||||
// 重构选择框
|
||||
resetSelect: function(tree){
|
||||
tree.each(function (key, item) {
|
||||
var name = $(item).attr("name");
|
||||
var value = $(item).data("value");
|
||||
$(item).removeAttr("name");
|
||||
$(item).attr("readonly",true);
|
||||
var input = $("<input name='"+name+"' type='hidden'>");
|
||||
if(value != undefined) input.val(value);
|
||||
$(item).after(input);
|
||||
$(item).after("<i class='layui-edge'></i>");
|
||||
});
|
||||
},
|
||||
|
||||
// 显示定位悬浮选择器
|
||||
position: function (tree) {
|
||||
var source = self.options.tree;
|
||||
var offset = tree.offset();
|
||||
$(".selectContent").css({
|
||||
top: offset.top + tree.outerHeight() + 'px',
|
||||
left: offset.left + 'px',
|
||||
width: source.innerWidth()
|
||||
}).show();
|
||||
|
||||
$("body").bind("click", function (e) {
|
||||
var target = $(e.target).parents(".selectContent");
|
||||
if(!target.length > 0){
|
||||
$(".selectContent").hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
$.fn.selectTree=function(param){
|
||||
var selectTree=new SelectTree(param);
|
||||
return selectTree.init();
|
||||
}
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user