初始化排课条件设置
parent
66680715c2
commit
13cbb97888
@ -0,0 +1,732 @@
|
|||||||
|
;
|
||||||
|
layui.define("jquery", function(e) {
|
||||||
|
"use strict";
|
||||||
|
var o = layui.jquery,
|
||||||
|
a = layui.hint(),
|
||||||
|
f = layui.form,
|
||||||
|
r = "layui-tree-enter",
|
||||||
|
i = function(e) {
|
||||||
|
this.options = e
|
||||||
|
},
|
||||||
|
t = {
|
||||||
|
arrow: ["", ""],
|
||||||
|
checkbox: ["", ""],
|
||||||
|
radio: ["", ""],
|
||||||
|
branch: ["folder-close", "folder"],
|
||||||
|
leaf: "leaf"
|
||||||
|
},
|
||||||
|
tt = {},
|
||||||
|
TreeTable = function() {
|
||||||
|
this.mapping = {};
|
||||||
|
},
|
||||||
|
TreeNode = function(item) {
|
||||||
|
this.item = item;
|
||||||
|
this.nodes = [];
|
||||||
|
};
|
||||||
|
i.prototype.expand = function(treeNode, isOpened, e) {
|
||||||
|
var o = this;
|
||||||
|
var subTreeNodes = treeNode.nodes;
|
||||||
|
if (subTreeNodes && subTreeNodes.length > 0) {
|
||||||
|
for (var ind = 0; ind < subTreeNodes.length; ind++) {
|
||||||
|
var subTreeNode = subTreeNodes[ind];
|
||||||
|
var subTrNode = document.getElementById(subTreeNode.id);
|
||||||
|
if (subTrNode) {
|
||||||
|
!isOpened ? (e.data("spread", null), subTrNode.setAttribute('class', 'layui-hide layui-anim layui-anim-fadein')) : (e.data("spread", !0), subTrNode.setAttribute('class', 'layui-anim layui-anim-fadein'))
|
||||||
|
}
|
||||||
|
if (isOpened && !subTreeNode.isOpened) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
o.expand(subTreeNode, isOpened, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i.prototype.traverseModel = function(treeTable, parentNode, item, childrenAttrs) {
|
||||||
|
var o = this;
|
||||||
|
if (item) {
|
||||||
|
var treeNode = new TreeNode(item);
|
||||||
|
if (parentNode) {
|
||||||
|
treeNode.parentId = parentNode.id;
|
||||||
|
treeNode.id = item.id;
|
||||||
|
treeNode.level = parentNode.level + 1;
|
||||||
|
parentNode.nodes[parentNode.nodes.length] = treeNode;
|
||||||
|
treeNode.parent = parentNode;
|
||||||
|
} else {
|
||||||
|
treeNode.id = item.id;
|
||||||
|
treeNode.level = 0;
|
||||||
|
}
|
||||||
|
treeNode.isOpened = false;
|
||||||
|
treeTable.mapping[treeNode.id] = treeNode;
|
||||||
|
var children = item[childrenAttrs];
|
||||||
|
if (children && children.constructor == Array) {
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
o.traverseModel(treeTable, treeNode, children[i], childrenAttrs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, i.prototype.initGird = function(e) {
|
||||||
|
var ob = this, i = ob.options;
|
||||||
|
i = o.extend({}, i, {checkbox: i.checkbox?i.checkbox:false , spreadable :i.spreadable?i.spreadable:false});
|
||||||
|
var tableHeaderStr = '<thead><tr>';
|
||||||
|
tableHeaderStr += (i.checkbox == false ? '' : '<th style="width:10px"><input type="checkbox" name="treeGirdCheckbox" lay-skin="primary" lay-filter="allChoose"></th>');
|
||||||
|
for (var ind = 0; ind < i.layout.length; ind++) {
|
||||||
|
var headerClass = i.layout[ind].headerClass ? ' class="' + i.layout[ind].headerClass + '"' : '';
|
||||||
|
tableHeaderStr += '<th' + headerClass + '>' + i.layout[ind].name + '</th>';
|
||||||
|
}
|
||||||
|
tableHeaderStr += '</tr></thead>';
|
||||||
|
tableHeaderStr = o(tableHeaderStr);
|
||||||
|
|
||||||
|
var treeTable = new TreeTable();
|
||||||
|
var root = {
|
||||||
|
id: 'root',
|
||||||
|
children: i.nodes
|
||||||
|
}
|
||||||
|
ob.traverseModel(treeTable, null, root, ['children']);
|
||||||
|
tt[e.selector] = treeTable;
|
||||||
|
e.addClass("layui-tree layui-treetable"),
|
||||||
|
i.skin && e.addClass("layui-tree-skin-" + i.skin),
|
||||||
|
ob.treeGird(e), ob.checkboxEvent(e, i),
|
||||||
|
e.wrapInner('<tbody></tbody'),
|
||||||
|
e.prepend(tableHeaderStr),
|
||||||
|
e.wrapInner('<table class="layui-table"></table>'),
|
||||||
|
e.wrapInner('<div class="layui-form"></div>'),
|
||||||
|
ob.on(e);
|
||||||
|
return e;
|
||||||
|
}, i.prototype.treeGird = function(e, a) {
|
||||||
|
var r = this,
|
||||||
|
i = r.options,
|
||||||
|
n = a || i.nodes,
|
||||||
|
nt = tt[e.selector];
|
||||||
|
layui.each(n, function(a, n) {
|
||||||
|
if (n.children) {
|
||||||
|
layui.each(n.children, function(index, item) {
|
||||||
|
item.pid = n.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var treeNode = nt.mapping[n.id];
|
||||||
|
var indent = "";
|
||||||
|
if (treeNode.level > 1) {
|
||||||
|
for (var ind = 1; ind < treeNode.level; ind++) {
|
||||||
|
indent += '<span style="display: inline-block;width: 20px;"></span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var p;
|
||||||
|
if (i.spreadable) {
|
||||||
|
n.spread = true, p = false, treeNode.isOpened = true;
|
||||||
|
} else {
|
||||||
|
p = treeNode.parentId == 'root' ? null : treeNode.parentId;
|
||||||
|
}
|
||||||
|
var l = n.children && n.children.length > 0,
|
||||||
|
str = o(['<tr class="' + (p ? "layui-hide layui-anim layui-anim-fadein" : "layui-anim layui-anim-fadein") + '" id="' + n.id + '">',
|
||||||
|
function() {
|
||||||
|
if (i.checkbox){
|
||||||
|
return '<td><input type="checkbox" name="treeGirdCheckbox" lay-skin="primary" lay-filter="*" value="' + n.id + '" ' + ((n.checked && n.checked == true) ? 'checked="checked"' : "") +'></td>';
|
||||||
|
}
|
||||||
|
}(),
|
||||||
|
function() {
|
||||||
|
var ret = ""
|
||||||
|
for (var ind = 0; ind < i.layout.length; ind++) {
|
||||||
|
if (i.layout[ind].treeNodes) {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '"><li ' + (n.spread ? 'data-spread="' + n.spread + '"' : "") + '>' + (indent + (l ? '<i class="layui-icon layui-tree-spread">' + (n.spread ? t.arrow[1] : t.arrow[0]) + "</i>" : "")) + '<a href="' + (n.href || "javascript:;") + '" ' + (i.target && n.href ? 'target="' + i.target + '"' : "") + ">" + ('<i class="layui-icon layui-tree-' + (l ? "branch" : "leaf") + ' '+(l ? n.spread ? t.branch[1] : t.branch[0] : t.leaf)+'">' + "</i>") + ("<cite>" + (n.name || "未命名") + "</cite></a></li></td>");
|
||||||
|
} else if (i.layout[ind].render) {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '">' + i.layout[ind].render(JSON.stringify(n)) + '</td>'
|
||||||
|
} else {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '">' + n[i.layout[ind].field] + '</td>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}(), "</tr>"].join(""));
|
||||||
|
e.append(str), l && (r.treeGird(e, n.children)), r.spreadGird(str, n, e.selector), i.drag && r.drag(str, n);
|
||||||
|
r.changed(str, n)
|
||||||
|
})
|
||||||
|
},i.prototype.checkboxEvent = function (e, options){
|
||||||
|
var nt = tt[e.selector];
|
||||||
|
|
||||||
|
f.on('checkbox(allChoose)', function(data){
|
||||||
|
var child = o(data.elem).parents('table').find('tbody input[type="checkbox"]');
|
||||||
|
child.each(function(index, item){
|
||||||
|
item.checked = data.elem.checked;
|
||||||
|
});
|
||||||
|
f.render('checkbox');
|
||||||
|
});
|
||||||
|
f.on('checkbox(*)',function(data){
|
||||||
|
var node = nt.mapping[data.value].item;
|
||||||
|
if (options.callback && options.callback.beforeCheck) {
|
||||||
|
if (options.callback.beforeCheck(node)){
|
||||||
|
// 允许勾选或取消勾选
|
||||||
|
data.elem.checked ? data.othis.addClass('layui-form-checked') : data.othis.removeClass('layui-form-checked');
|
||||||
|
}else{
|
||||||
|
// 不允许勾选或取消勾选
|
||||||
|
data.elem.checked = !data.elem.checked;
|
||||||
|
!data.elem.checked ? data.othis.removeClass('layui-form-checked') :data.othis.addClass('layui-form-checked');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node.checked = data.elem.checked;
|
||||||
|
|
||||||
|
var sib = o(data.elem).parents('table').find('tbody input[type="checkbox"]:checked').length;
|
||||||
|
var total = o(data.elem).parents('table').find('tbody input[type="checkbox"]').length;
|
||||||
|
if(sib == total){
|
||||||
|
o(data.elem).parents('table').find('thead input[type="checkbox"]').prop("checked",true);
|
||||||
|
f.render();
|
||||||
|
}else{
|
||||||
|
o(data.elem).parents('table').find('thead input[type="checkbox"]').prop("checked",false);
|
||||||
|
f.render();
|
||||||
|
}
|
||||||
|
if (options.callback && options.callback.onCheck) {
|
||||||
|
return options.callback.onCheck(node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},i.prototype.changed = function(e, o) {
|
||||||
|
var r = this;
|
||||||
|
if (o.pid == undefined || o.pid == null) {
|
||||||
|
e.children("input").on("change", function() {
|
||||||
|
var childUl = e.children("ul"),
|
||||||
|
checked = this.checked;
|
||||||
|
childUl.find("input").prop("checked", checked);
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
e.children("input").on("change", function() {
|
||||||
|
var that = this;
|
||||||
|
if (!this.checked) {
|
||||||
|
if (o.children && o.children.length > 0) {
|
||||||
|
var childUl = e.children("ul"),
|
||||||
|
checked = this.checked;
|
||||||
|
childUl.find("input").prop("checked", checked);
|
||||||
|
}
|
||||||
|
r.cancelParentsCheckboxCheck(that);
|
||||||
|
} else {
|
||||||
|
r.parentsChecked(this, this.checked);
|
||||||
|
if (o.children && o.children.length > 0) {
|
||||||
|
var childUl = e.children("ul"),
|
||||||
|
checked = this.checked;
|
||||||
|
childUl.find("input").prop("checked", checked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, i.prototype.cancelParentsCheckboxCheck = function(ele) {
|
||||||
|
if (!ele) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var r = this,
|
||||||
|
siblingInputs = r.siblingInputs(ele),
|
||||||
|
parentId = ele.getAttribute("data-parent-id"),
|
||||||
|
parentInput = null,
|
||||||
|
bool = true,
|
||||||
|
childrendInputs = null,
|
||||||
|
hasOneChildrenInputCheck = false;
|
||||||
|
if (parentId != 'undefined') {
|
||||||
|
parentInput = document.getElementById(parentId);
|
||||||
|
childrendInputs = r.currentChildrenInputs(parentInput);
|
||||||
|
}
|
||||||
|
for (var i = 0, len = siblingInputs.length; i < len; i++) {
|
||||||
|
if (siblingInputs[i].checked) {
|
||||||
|
bool = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!childrendInputs || childrendInputs.length == 0) {
|
||||||
|
hasOneChildrenInputCheck = false;
|
||||||
|
} else {
|
||||||
|
for (var j = 0, len2 = childrendInputs.length; j < len2; j++) {
|
||||||
|
if (childrendInputs[j].getAttribute("data-parent-id") != "undefined") {
|
||||||
|
if (childrendInputs[j].checked) {
|
||||||
|
hasOneChildrenInputCheck = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bool && !hasOneChildrenInputCheck) {
|
||||||
|
r.inputChecked(parentInput, false);
|
||||||
|
}
|
||||||
|
this.cancelParentsCheckboxCheck(parentInput);
|
||||||
|
}, i.prototype.siblingInputs = function(ele) {
|
||||||
|
var that = this;
|
||||||
|
if (ele) {
|
||||||
|
var parent = ele.parentElement,
|
||||||
|
parents = parent.parentElement,
|
||||||
|
childrens = parents.children,
|
||||||
|
siblingInputs = [];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (var i = 0, len = childrens.length; i < len; i++) {
|
||||||
|
if (childrens[i] != parent) {
|
||||||
|
if (childrens[i].children[0].nodeName == "INPUT") {
|
||||||
|
siblingInputs.push(childrens[i].children[0]);
|
||||||
|
}
|
||||||
|
if (childrens[i].children[1].nodeName == "INPUT") {
|
||||||
|
siblingInputs.push(childrens[i].children[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parent = null;
|
||||||
|
parents = null;
|
||||||
|
childrens = null;
|
||||||
|
return siblingInputs;
|
||||||
|
}, i.prototype.currentChildrenInputs = function(ele) {
|
||||||
|
var parent = ele.parentElement,
|
||||||
|
childrenInputs = [];
|
||||||
|
if (parent.getElementsByTagName("ul").length > 0) {
|
||||||
|
var uls = parent.getElementsByTagName("ul");
|
||||||
|
for (var i = 0, len = uls.length; i < len; i++) {
|
||||||
|
var inputs = uls[i].getElementsByTagName("input");
|
||||||
|
for (var j = 0, len2 = inputs.length; j < len2; j++) {
|
||||||
|
childrenInputs.push(inputs[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return childrenInputs;
|
||||||
|
}, i.prototype.inputChecked = function(ele, checked) {
|
||||||
|
ele.checked = checked;
|
||||||
|
}, i.prototype.parentsChecked = function(e, checked) {
|
||||||
|
var r = this,
|
||||||
|
i = r.options,
|
||||||
|
selector = i.elem,
|
||||||
|
currentInput = e;
|
||||||
|
if (currentInput && (currentInput.nodeName == "INPUT")) {
|
||||||
|
var parentId = currentInput.getAttribute("data-parent-id"),
|
||||||
|
parentInput = null;
|
||||||
|
setTimeout(function() {
|
||||||
|
r.check(currentInput, checked);
|
||||||
|
if (parentId) {
|
||||||
|
r.parentsChecked(document.getElementById(parentId), checked);
|
||||||
|
}
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
}, i.prototype.findParents = function(ele, selector) {
|
||||||
|
var parent = ele.parentElement,
|
||||||
|
that = this;
|
||||||
|
if (selector.substr(0, 1) == "#") {
|
||||||
|
if (parent) {
|
||||||
|
if (parent.id != selector.substr(1)) {
|
||||||
|
that.findParents(parent, selector);
|
||||||
|
} else {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (selector.substr(0, 1) == ".") {
|
||||||
|
if (parent) {
|
||||||
|
var classnameArr = parent.className.split(" "),
|
||||||
|
len = classnameArr.length,
|
||||||
|
selectt = selector.substr(1),
|
||||||
|
hasSelector = false;
|
||||||
|
if (len > 0) {
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
if (classnameArr[i] == selectt) {
|
||||||
|
hasSelector = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasSelector) {
|
||||||
|
that.findParents(parent, selector);
|
||||||
|
} else if (hasSelector) {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, i.prototype.num = 1, i.prototype.uuid = function() {
|
||||||
|
var that = this,
|
||||||
|
randomStr = ['l', 'a', 'y', 'e', 'r', 'n', 'i'],
|
||||||
|
randomNum = Math.floor(Math.random() * 6);
|
||||||
|
return function() {
|
||||||
|
var str = "";
|
||||||
|
for (var i = 0; i <= randomNum; i++) {
|
||||||
|
str += randomStr[Math.floor(Math.random() * 6)];
|
||||||
|
}
|
||||||
|
return "layer_" + new Date().getTime() + "_" + (that.num++) + "_" + (++that.num) + "_" + str;
|
||||||
|
}();
|
||||||
|
}, i.prototype.check = function(input, bool) {
|
||||||
|
if (bool) {
|
||||||
|
input.checked = true;
|
||||||
|
} else {
|
||||||
|
input.checked = false;
|
||||||
|
}
|
||||||
|
}, i.prototype.click = function(e, o) {
|
||||||
|
var a = this,
|
||||||
|
r = a.options;
|
||||||
|
e.children("a").on("click", function(e) {
|
||||||
|
layui.stope(e), r.click(o)
|
||||||
|
})
|
||||||
|
}, i.prototype.spreadGird = function(e, o, el) {
|
||||||
|
var a = this,
|
||||||
|
r = (a.options, e.find(".layui-tree-spread")),
|
||||||
|
nodeId = e[0].id,
|
||||||
|
ri = e.find(".layui-tree-branch"),
|
||||||
|
nt = tt[el],
|
||||||
|
l = function() {
|
||||||
|
var treeNode = nt.mapping[nodeId];
|
||||||
|
var isOpened = treeNode.isOpened;
|
||||||
|
if (isOpened){
|
||||||
|
if (a.options.callback && a.options.callback.beforeCollapse && !a.options.callback.beforeCollapse(treeNode)) return true;
|
||||||
|
}else{
|
||||||
|
if (a.options.callback && a.options.callback.beforeExpand && !a.options.callback.beforeExpand(treeNode)) return true;
|
||||||
|
}
|
||||||
|
a.expand(treeNode, !isOpened, e);
|
||||||
|
isOpened ? (e.data("spread", null), r.html(t.arrow[0]), ri.removeClass(t.branch[1]), ri.addClass(t.branch[0])) : (e.data("spread", !0), r.html(t.arrow[1]), ri.removeClass(t.branch[0]), ri.addClass(t.branch[1]))
|
||||||
|
treeNode.isOpened = !isOpened;
|
||||||
|
if (isOpened){
|
||||||
|
if (a.options.callback && a.options.callback.onCollapse && !a.options.callback.onCollapse(treeNode)) return true;
|
||||||
|
}else{
|
||||||
|
if (a.options.callback && a.options.callback.onExpand && !a.options.callback.onExpand(treeNode)) return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
(r.on("click", l), ri.parent().on("dblclick", l))
|
||||||
|
}, i.prototype.on = function(e) {
|
||||||
|
var a = this,
|
||||||
|
i = a.options,
|
||||||
|
t = "layui-tree-drag";
|
||||||
|
e.find("i").on("selectstart", function(e) {
|
||||||
|
return !1
|
||||||
|
}), i.drag && o(document).on("mousemove", function(e) {
|
||||||
|
var r = a.move;
|
||||||
|
if (r.from) {
|
||||||
|
var i = (r.to, o('<div class="layui-box ' + t + '"></div>'));
|
||||||
|
e.preventDefault(), o("." + t)[0] || o("body").append(i);
|
||||||
|
var n = o("." + t)[0] ? o("." + t) : i;
|
||||||
|
n.addClass("layui-show").html(r.from.elem.children("a").html()), n.css({
|
||||||
|
left: e.pageX + 10,
|
||||||
|
top: e.pageY + 10
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).on("mouseup", function() {
|
||||||
|
var e = a.move;
|
||||||
|
e.from && (e.from.elem.children("a").removeClass(r), e.to && e.to.elem.children("a").removeClass(r), a.move = {}, o("." + t).remove())
|
||||||
|
})
|
||||||
|
}, i.prototype.move = {}, i.prototype.drag = function(e, a) {
|
||||||
|
var i = this,
|
||||||
|
t = (i.options, e.children("a")),
|
||||||
|
n = function() {
|
||||||
|
var t = o(this),
|
||||||
|
n = i.move;
|
||||||
|
n.from && (n.to = {
|
||||||
|
item: a,
|
||||||
|
elem: e
|
||||||
|
}, t.addClass(r))
|
||||||
|
};
|
||||||
|
t.on("mousedown", function() {
|
||||||
|
var o = i.move;
|
||||||
|
o.from = {
|
||||||
|
item: a,
|
||||||
|
elem: e
|
||||||
|
}
|
||||||
|
}), t.on("mouseenter", n).on("mousemove", n).on("mouseleave", function() {
|
||||||
|
var e = o(this),
|
||||||
|
a = i.move;
|
||||||
|
a.from && (delete a.to, e.removeClass(r))
|
||||||
|
})
|
||||||
|
}, i.prototype.getLastChildNode = function(node){
|
||||||
|
var a = this, lastChildNode
|
||||||
|
if (node.children){
|
||||||
|
lastChildNode = this.getLastChildNode(node.children[node.children.length-1]);
|
||||||
|
}else{
|
||||||
|
lastChildNode = node;
|
||||||
|
}
|
||||||
|
return lastChildNode;
|
||||||
|
}, i.prototype.addNodes = function(v, parentNode, newNodes, isLastChild){
|
||||||
|
var a = this,
|
||||||
|
i = a.options,
|
||||||
|
nt = tt[i.elem];
|
||||||
|
layui.each(newNodes, function(an, n) {
|
||||||
|
if (n.children) {
|
||||||
|
layui.each(n.children, function (index, item) {
|
||||||
|
item.pid = n.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var treeNode = nt.mapping[n.id];
|
||||||
|
var indent = "";
|
||||||
|
if (treeNode.level > 1) {
|
||||||
|
for (var ind = 1; ind < treeNode.level; ind++) {
|
||||||
|
indent += '<span style="display: inline-block;width: 20px;"></span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var p;
|
||||||
|
if (i.spreadable) {
|
||||||
|
n.spread = true, p = false, treeNode.isOpened = true;
|
||||||
|
} else {
|
||||||
|
p = treeNode.parentId == 'root' ? null : treeNode.parentId;
|
||||||
|
}
|
||||||
|
if (isLastChild) {
|
||||||
|
if (parentNode) p = nt.mapping[parentNode.id].isOpened ? false : true;
|
||||||
|
else p = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var l = n.children && n.children.length > 0,
|
||||||
|
str = o(['<tr class="' + (p ? "layui-hide layui-anim layui-anim-fadein" : "layui-anim layui-anim-fadein") + '" id="' + n.id + '">',
|
||||||
|
function () {
|
||||||
|
if (i.checkbox) {
|
||||||
|
return '<td><input type="checkbox" name="treeGirdCheckbox" lay-skin="primary" lay-filter="*" value="' + n.id + '" ' + ((n.checked && n.checked == true) ? 'checked="checked"' : "") + '></td>';
|
||||||
|
}
|
||||||
|
}(),
|
||||||
|
function () {
|
||||||
|
var ret = ""
|
||||||
|
for (var ind = 0; ind < i.layout.length; ind++) {
|
||||||
|
if (i.layout[ind].treeNodes) {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '">'
|
||||||
|
+ '<li ' + (n.spread ? 'data-spread="' + n.spread + '"' : "") + '>'
|
||||||
|
+ (indent + (l ? '<i class="layui-icon layui-tree-spread">' + (n.spread ? t.arrow[1] : t.arrow[0]) + "</i>" : ""))
|
||||||
|
+ '<a href="' + (n.href || "javascript:;") + '" ' + (i.target && n.href ? 'target="' + i.target + '"' : "") + ">"
|
||||||
|
+ ('<i class="layui-icon layui-tree-' + (l ? "branch" : "leaf") + ' '+(l ? n.spread ? t.branch[1] : t.branch[0] : t.leaf)+' ">'
|
||||||
|
+ "</i>") + ("<cite>" + (n.name || "未命名") + "</cite></a></li></td>");
|
||||||
|
} else if (i.layout[ind].render) {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '">' + i.layout[ind].render(JSON.stringify(n)) + '</td>'
|
||||||
|
} else {
|
||||||
|
ret += '<td class="' + i.layout[ind].colClass + '" style="' + i.layout[ind].style + '">' + n[i.layout[ind].field] + '</td>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}(), "</tr>"].join(""));
|
||||||
|
if (parentNode) {
|
||||||
|
var lastChildNode;
|
||||||
|
if (isLastChild) {
|
||||||
|
lastChildNode = a.getLastChildNode(parentNode);
|
||||||
|
}else {
|
||||||
|
lastChildNode = parentNode;
|
||||||
|
}
|
||||||
|
v.find("tbody tr[id="+lastChildNode.id+"]").after(str);
|
||||||
|
}else{
|
||||||
|
v.find("tbody").append(str);
|
||||||
|
}
|
||||||
|
l && (a.addNodes(v, n, n.children, false)), a.spreadGird(str, n, v.selector), i.drag && a.drag(str, n);
|
||||||
|
a.changed(str, n)
|
||||||
|
})
|
||||||
|
}, i.prototype.removeNodes = function(v, treeNode){
|
||||||
|
var a = this, i = a.options, nt = tt[i.elem];
|
||||||
|
delete nt.mapping[treeNode.id];
|
||||||
|
|
||||||
|
var trNode = v.find("tbody tr[id="+treeNode.id+"]");
|
||||||
|
trNode.remove();
|
||||||
|
|
||||||
|
for (var i = 0; i < treeNode.nodes.length; i++){
|
||||||
|
a.removeNodes(v, nt.mapping[treeNode.nodes[i].id])
|
||||||
|
}
|
||||||
|
}, i.prototype.expandNode = function (nt, node, v, a, isOpened, sonSign){
|
||||||
|
var treeNode = nt.mapping[node.id];
|
||||||
|
var e = v.find("tbody tr[id=" + treeNode.id + "]");
|
||||||
|
var r = (a.options, e.find(".layui-tree-spread"));
|
||||||
|
|
||||||
|
if (isOpened){
|
||||||
|
if (!treeNode.isOpened) o(r).trigger("click");
|
||||||
|
}else{
|
||||||
|
if (treeNode.isOpened) o(r).trigger("click");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sonSign) {
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var childNode = nt.mapping[key];
|
||||||
|
if (childNode.parentId == node.id) {
|
||||||
|
if (isOpened){
|
||||||
|
if (!childNode.isOpened) o(v.find("tbody tr[id=" + childNode.id + "]").find(".layui-tree-spread")).trigger("click");
|
||||||
|
}else{
|
||||||
|
if (treeNode.isOpened) o(v.find("tbody tr[id=" + childNode.id + "]").find(".layui-tree-spread")).trigger("click");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, e("treetable", function(e) {
|
||||||
|
var r = new i(e = e || {}),
|
||||||
|
telem = o(e.elem);
|
||||||
|
var v = r.initGird(telem);
|
||||||
|
layui.addcss("modules/treetable/treetable.css");
|
||||||
|
|
||||||
|
var funs = {
|
||||||
|
getNode : function(idValue){
|
||||||
|
if (!idValue) return;
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[key];
|
||||||
|
if (treeNode.id == idValue) {
|
||||||
|
return treeNode.item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, getNodeByParam : function(key, value, parentNode){
|
||||||
|
if (key == null || value == null) return;
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
var arr = new Array();
|
||||||
|
for (var k in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[k];
|
||||||
|
if (treeNode.item[key] == value) {
|
||||||
|
var node = parentNode == null ? arr.push(treeNode.item):(parentNode.id == treeNode.parent.id ? arr.push(treeNode.item) : null);
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}, getNodesByParam : function(key, value, parentNode){
|
||||||
|
if (key == null || value == null) return;
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
var arr = new Array();
|
||||||
|
for (var k in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[k];
|
||||||
|
if (treeNode.item[key] == value) {
|
||||||
|
parentNode == null ? arr.push(treeNode.item):(parentNode.id == treeNode.parent.id ? arr.push(treeNode.item) : null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}, getNodes : function(){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[key];
|
||||||
|
if (treeNode && treeNode.item && treeNode.id != 'root'){
|
||||||
|
arr.push(treeNode.item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
},addNode : function(parentNode, newNodes){
|
||||||
|
var i = r.options,
|
||||||
|
n = a || i.nodes,
|
||||||
|
nt = tt[v.selector];
|
||||||
|
|
||||||
|
var arr = [];
|
||||||
|
if (!Array.isArray(newNodes)){
|
||||||
|
arr.push(newNodes)
|
||||||
|
}else{
|
||||||
|
arr = newNodes;
|
||||||
|
}
|
||||||
|
var treeTable = new TreeTable();
|
||||||
|
|
||||||
|
r.traverseModel(treeTable, parentNode? nt.mapping[parentNode.id]:nt.mapping['root'], newNodes, ['children']);
|
||||||
|
for (var tttt in treeTable.mapping){
|
||||||
|
if ('root' == tttt) continue;
|
||||||
|
nt.mapping[tttt] = treeTable.mapping[tttt];
|
||||||
|
}
|
||||||
|
r.addNodes(v, parentNode, arr, true);
|
||||||
|
f.render();
|
||||||
|
},editNodeName : function(node){
|
||||||
|
var i = r.options, n = a || i.nodes, nt = tt[v.selector];
|
||||||
|
var treeNode = nt.mapping[node.id];
|
||||||
|
treeNode.item = node;
|
||||||
|
|
||||||
|
var trNode = v.find("tbody tr[id="+node.id+"] td li a cite");
|
||||||
|
trNode.text(node.name);
|
||||||
|
f.render();
|
||||||
|
},removeNode : function(node){
|
||||||
|
var i = r.options, n = a || i.nodes, nt = tt[v.selector];
|
||||||
|
var treeNode = nt.mapping[node.id];
|
||||||
|
r.removeNodes(v, treeNode);
|
||||||
|
f.render();
|
||||||
|
},getSelected : function() {
|
||||||
|
var arr = new Array();
|
||||||
|
var nt = tt[v.selector]
|
||||||
|
o(e.elem).find("input[type=checkbox]:checked").each(function(index, v) {
|
||||||
|
var treeNode = nt.mapping[v.value];
|
||||||
|
if (treeNode && treeNode.item && treeNode.id != 'root'){
|
||||||
|
arr.push(treeNode.item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return arr;
|
||||||
|
},getUnSelected : function() {
|
||||||
|
var arr = new Array();
|
||||||
|
var nt = tt[v.selector]
|
||||||
|
o(e.elem).find("input[type=checkbox]:not(:checked)").each(function(index, v) {
|
||||||
|
var treeNode = nt.mapping[v.value];
|
||||||
|
if (treeNode && treeNode.item && treeNode.id != 'root'){
|
||||||
|
arr.push(treeNode.item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return arr;
|
||||||
|
},expand : function() {
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[key];
|
||||||
|
if (treeNode.id == 'root') continue;
|
||||||
|
var isOpened = treeNode.isOpened;
|
||||||
|
if (isOpened) continue;
|
||||||
|
var e = o('#' + treeNode.id),
|
||||||
|
r = (a.options, e.find(".layui-tree-spread")),
|
||||||
|
ri = e.find(".layui-tree-branch");
|
||||||
|
oi.expand(treeNode, !isOpened, e);
|
||||||
|
isOpened ? (e.data("spread", null), r.html(t.arrow[0]), ri.removeClass(t.branch[1]), ri.addClass(t.branch[0])) : (e.data("spread", !0), r.html(t.arrow[1]), ri.removeClass(t.branch[0]), ri.addClass(t.branch[1]))
|
||||||
|
treeNode.isOpened = !isOpened;
|
||||||
|
}
|
||||||
|
},collapse : function() {
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[key];
|
||||||
|
if (treeNode.id == 'root') continue;
|
||||||
|
var isOpened = treeNode.isOpened;
|
||||||
|
if (!isOpened) continue;
|
||||||
|
var e = o('#' + treeNode.id),
|
||||||
|
r = (a.options, e.find(".layui-tree-spread")),
|
||||||
|
ri = e.find(".layui-tree-branch");
|
||||||
|
oi.expand(treeNode, !isOpened, e);
|
||||||
|
isOpened ? (e.data("spread", null), r.html(t.arrow[0]), ri.removeClass(t.branch[1]), ri.addClass(t.branch[0])) : (e.data("spread", !0), r.html(t.arrow[1]), ri.removeClass(t.branch[0]), ri.addClass(t.branch[1]))
|
||||||
|
treeNode.isOpened = !isOpened;
|
||||||
|
}
|
||||||
|
}, destory : function (){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
var treeO = o(v.selector);
|
||||||
|
if (treeO) treeO.empty(), delete tt[v.selector];
|
||||||
|
}, expandNode : function(node, sonSign){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
r.expandNode(nt, node, v, a, true, sonSign);
|
||||||
|
}, collapseNode : function(node, sonSign){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
r.expandNode(nt, node, v, a, false, sonSign);
|
||||||
|
}, checkNode : function (node, check){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
var ck = v.find("tbody tr[id=" + node.id + "] ");
|
||||||
|
ck.find('input[type=checkbox]').attr("checked", check);
|
||||||
|
ck.find('input[type=checkbox]')[0].checked = check;
|
||||||
|
check ? ck.find('.layui-form-checkbox').addClass('layui-form-checked') : ck.find('.layui-form-checkbox').removeClass('layui-form-checked')
|
||||||
|
}, setChkDisabled : function(node, disabled){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
var ck = v.find("tbody tr[id=" + node.id + "] ");
|
||||||
|
ck.find('input[type=checkbox]').attr("disabled",disabled);
|
||||||
|
disabled ? ck.find('.layui-form-checkbox').addClass('layui-checkbox-disbaled layui-disabled') : ck.find('.layui-form-checkbox').removeClass('layui-checkbox-disbaled layui-disabled');
|
||||||
|
}, checkAllNodes : function(check){
|
||||||
|
var a = this,
|
||||||
|
oi = new i(v = v || {}),
|
||||||
|
nt = tt[v.selector];
|
||||||
|
|
||||||
|
for (var key in nt.mapping) {
|
||||||
|
var treeNode = nt.mapping[key];
|
||||||
|
if (treeNode && treeNode.item && treeNode.id != 'root'){
|
||||||
|
var ck = v.find("tbody tr[id=" + treeNode.id + "] ");
|
||||||
|
ck.find('input[type=checkbox]').attr("checked", check);
|
||||||
|
ck.find('input[type=checkbox]')[0].checked = check;
|
||||||
|
check ? ck.find('.layui-form-checkbox').addClass('layui-form-checked') : ck.find('.layui-form-checkbox').removeClass('layui-form-checked')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var all = v.find('thead input[type="checkbox"]');
|
||||||
|
all.attr("checked", check);
|
||||||
|
all[0].checked = check;
|
||||||
|
check ? all.parents('tr').find('.layui-form-checkbox').addClass('layui-form-checked') : all.parents('tr').find('.layui-form-checkbox').removeClass('layui-form-checked')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var key in funs){
|
||||||
|
v[key] = funs[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.callback) {
|
||||||
|
v.onCheck = e.callback.onCheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
return telem[0] ? v : a.error("layui.tree 没有找到" + e.elem + "元素");
|
||||||
|
})
|
||||||
|
});
|
Loading…
Reference in New Issue