From 13cbb9788823b6f2b53895bfdb771ac5d3c6cd8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9A=E4=B8=B9ab?= <1421553879@qq.com> Date: Mon, 21 Nov 2022 03:13:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=8E=92=E8=AF=BE?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/layui/lay/modules/treetable.js | 732 ++++++++++++++++++ .../index.js | 338 ++++---- 2 files changed, 904 insertions(+), 166 deletions(-) create mode 100644 admin-core/src/main/resources/static/plugins/layui/lay/modules/treetable.js diff --git a/admin-core/src/main/resources/static/plugins/layui/lay/modules/treetable.js b/admin-core/src/main/resources/static/plugins/layui/lay/modules/treetable.js new file mode 100644 index 00000000..f0d08aef --- /dev/null +++ b/admin-core/src/main/resources/static/plugins/layui/lay/modules/treetable.js @@ -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 = ''; + tableHeaderStr += (i.checkbox == false ? '' : ''); + for (var ind = 0; ind < i.layout.length; ind++) { + var headerClass = i.layout[ind].headerClass ? ' class="' + i.layout[ind].headerClass + '"' : ''; + tableHeaderStr += '' + i.layout[ind].name + ''; + } + tableHeaderStr += ''; + 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(''), + e.wrapInner('
'), + 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 += ''; + } + } + 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(['', + function() { + if (i.checkbox){ + return ''; + } + }(), + function() { + var ret = "" + for (var ind = 0; ind < i.layout.length; ind++) { + if (i.layout[ind].treeNodes) { + ret += '
  • ' + (indent + (l ? '' + (n.spread ? t.arrow[1] : t.arrow[0]) + "" : "")) + '" + ('' + "") + ("" + (n.name || "未命名") + "
  • "); + } else if (i.layout[ind].render) { + ret += '' + i.layout[ind].render(JSON.stringify(n)) + '' + } else { + ret += '' + n[i.layout[ind].field] + ''; + } + } + return ret; + }(), ""].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('
    ')); + 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 += ''; + } + } + 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(['', + function () { + if (i.checkbox) { + return ''; + } + }(), + function () { + var ret = "" + for (var ind = 0; ind < i.layout.length; ind++) { + if (i.layout[ind].treeNodes) { + ret += '' + + '
  • ' + + (indent + (l ? '' + (n.spread ? t.arrow[1] : t.arrow[0]) + "" : "")) + + '" + + ('' + + "") + ("" + (n.name || "未命名") + "
  • "); + } else if (i.layout[ind].render) { + ret += '' + i.layout[ind].render(JSON.stringify(n)) + '' + } else { + ret += '' + n[i.layout[ind].field] + ''; + } + } + return ret; + }(), ""].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 + "元素"); + }) +}); \ No newline at end of file diff --git a/web/src/main/resources/static/js/jlw/teacherOpenCourseScheduleSessionTag/index.js b/web/src/main/resources/static/js/jlw/teacherOpenCourseScheduleSessionTag/index.js index facdcfc3..de930d62 100644 --- a/web/src/main/resources/static/js/jlw/teacherOpenCourseScheduleSessionTag/index.js +++ b/web/src/main/resources/static/js/jlw/teacherOpenCourseScheduleSessionTag/index.js @@ -8,7 +8,7 @@ layui.config({ }).extend({ //设定组件别名 treetable: 'treetable' }); -layui.define([ 'form', 'laydate', 'table','treetable','element'], function(exports) { +layui.define(['laydate', 'form', 'table', 'treetable', 'element'], function (exports) { var form = layui.form; var laydate = layui.laydate; var table = layui.table; @@ -16,7 +16,6 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor var treetable = layui.treetable; var teacherOpenCourseScheduleSessionTagTable = null; var teacherOpenCourseScheduleSessionClassTable = null; - var tagTableData = Common.postAjax('/jlw/teacherOpenCourseScheduleSessionTag/list.json' ).data;// 课次数据接口 var classRoomTableData = Common.postAjax('/jlw/teacherOpenCourseScheduleSessionClass/list.json' ).data;// 排课教室数据接口; //一些事件触发 element.on('tab(docDemoTabBrief)', function(data){ @@ -43,143 +42,147 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor var sx_ = localStorage.getItem("teacherOpenCourseScheduleSessionTagTable_field_"+Common.userInfoId); //筛选值显示、隐藏缓存 if($.isEmpty(sx_)){sx_ = {};}else {sx_ = JSON.parse(sx_);} /*课次设置table*/ - teacherOpenCourseScheduleSessionTagTable = table.render({ - elem : '#teacherOpenCourseScheduleSessionTagTable', - height : Lib.getTableHeight(1), - cellMinWidth: 100, - method : 'post', - data:tagTableData - /*,page : Lib.tablePage // 开启分页 - ,toolbar: '#toolbar_teacherOpenCourseScheduleSessionTag' //自定义头部左侧工具栏 - ,defaultToolbar: ['filter', 'print', 'exports'] //头部右侧工具栏*/ - ,limit : 100 - , cols: [[ // 表头 - /* { - field : 'teacherOpenCourseScheduleSessionTagId', - title : '课程开课-课次标签ID', - align:"center", - hideField :false, - hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagId'])?false:sx_['teacherOpenCourseScheduleSessionTagId'], + teacherOpenCourseScheduleSessionTagTable = function(){ + table.render({ + elem : '#teacherOpenCourseScheduleSessionTagTable', + height : Lib.getTableHeight(1), + cellMinWidth: 100, + method : 'post', + url:Common.ctxPath + "/jlw/teacherOpenCourseScheduleSessionTag/list.json" + /*,page : Lib.tablePage // 开启分页 + ,toolbar: '#toolbar_teacherOpenCourseScheduleSessionTag' //自定义头部左侧工具栏 + ,defaultToolbar: ['filter', 'print', 'exports'] //头部右侧工具栏*/ + ,limit : 100 + , cols: [[ // 表头 + /* { + field : 'teacherOpenCourseScheduleSessionTagId', + title : '课程开课-课次标签ID', + align:"center", + hideField :false, + hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagId'])?false:sx_['teacherOpenCourseScheduleSessionTagId'], + + width : 60, + }, + { + field : 'teacherOpenCourseScheduleSessionTagDuration', + title : '课程时长(分钟)', + align:"center", + hideField :false, + hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagDuration'])?false:sx_['teacherOpenCourseScheduleSessionTagDuration'], + }, + { + field : 'teacherOpenCourseScheduleSessionTagAddTime', + title : '创建时间', + align:"center", + hideField :false, + hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagAddTime'])?false:sx_['teacherOpenCourseScheduleSessionTagAddTime'], + }, - width : 60, - }, - { - field : 'teacherOpenCourseScheduleSessionTagDuration', - title : '课程时长(分钟)', + { + field : 'orgId', + title : '组织ID', align:"center", hideField :false, - hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagDuration'])?false:sx_['teacherOpenCourseScheduleSessionTagDuration'], + hide:$.isEmpty(sx_['orgId'])?false:sx_['orgId'], }, { - field : 'teacherOpenCourseScheduleSessionTagAddTime', - title : '创建时间', + field : 'userId', + title : '用户ID', align:"center", hideField :false, - hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionTagAddTime'])?false:sx_['teacherOpenCourseScheduleSessionTagAddTime'], - }, - - { - field : 'orgId', - title : '组织ID', - align:"center", - hideField :false, - hide:$.isEmpty(sx_['orgId'])?false:sx_['orgId'], - }, - { - field : 'userId', - title : '用户ID', - align:"center", - hideField :false, - hide:$.isEmpty(sx_['userId'])?false:sx_['userId'], - },*/ - { - field: 'teacherOpenCourseScheduleSessionTagName', - title: '课次名称', - align: "center", - hideField: false, - hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagName']) ? false : sx_['teacherOpenCourseScheduleSessionTagName'], - }, - { - field: 'teacherOpenCourseScheduleSessionTagStartTime', - title: '开始时间', - align: "center", - hideField: false, - hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagStartTime']) ? false : sx_['teacherOpenCourseScheduleSessionTagStartTime'], - templet:StartTime, - event:"startTime" - }, - { - field: 'teacherOpenCourseScheduleSessionTagEndTime', - title: '结束时间', - align: "center", - hideField: false, - edit:"text", - hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagEndTime']) ? false : sx_['teacherOpenCourseScheduleSessionTagEndTime'], - templet:EndTime, - event:"endTime" - }, - { - field: 'operation_', title: '操作', align: "center", templet: function (d) { - var htm = '删除'; - return htm; + hide:$.isEmpty(sx_['userId'])?false:sx_['userId'], + },*/ + { + field: 'teacherOpenCourseScheduleSessionTagName', + title: '课次名称', + align: "center", + edit: "text", + hideField: false, + /* style:"border: 2px solid #F6F6F6;",*/ + hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagName']) ? false : sx_['teacherOpenCourseScheduleSessionTagName'], + }, + { + field: 'teacherOpenCourseScheduleSessionTagStartTime', + title: '开始时间', + align: "center", + hideField: false, + hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagStartTime']) ? false : sx_['teacherOpenCourseScheduleSessionTagStartTime'], + templet:StartTime, + event:"startTime" + }, + { + field: 'teacherOpenCourseScheduleSessionTagEndTime', + title: '结束时间', + align: "center", + hideField: false, + hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionTagEndTime']) ? false : sx_['teacherOpenCourseScheduleSessionTagEndTime'], + templet:EndTime, + event:"endTime" + }, + { + field: 'operation_', title: '操作', align: "center", templet: function (d) { + var htm = '删除'; + return htm; + } } - } - - ]] - }); + ]] + }); + } + teacherOpenCourseScheduleSessionTagTable(); /*排课教室table*/ + teacherOpenCourseScheduleSessionClassTable = function () { + treetable.render({ + elem: '#teacherOpenCourseScheduleSessionClassTable', + height: Lib.getTableHeight(1), + cellMinWidth: 100, + method: 'post', + treeColIndex: 0, //树形图标显示在第几列 + treeSpid: '0', //最上级的父级id + treeIdName: 'teacherOpenCourseScheduleSessionClassId', //id字段的名称 + treePidName: 'teacherOpenCourseScheduleSessionClassParentId', //父级节点字段 + treeDefaultClose: false, //是否默认折叠 + treeLinkage: true, //父级展开时是否自动展开所有子级 + data: classRoomTableData + /*,page : Lib.tablePage // 开启分页*/ + /* ,toolbar: '#toolbar_teacherOpenCourseScheduleSessionClass' //自定义头部左侧工具栏 + ,defaultToolbar: ['filter', 'print', 'exports'] //头部右侧工具栏*/ + , limit: 100 + , cols: [[ // 表头 + /*{ + field : 'teacherOpenCourseScheduleSessionClassId', + title : '课程开课-排课位置ID', + align:"center", + hideField :false, + hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionClassId'])?false:sx_['teacherOpenCourseScheduleSessionClassId'], - teacherOpenCourseScheduleSessionClassTable = treetable.render({ - elem: '#teacherOpenCourseScheduleSessionClassTable', - height: Lib.getTableHeight(1), - cellMinWidth: 100, - method:'post', - treeColIndex: 0, //树形图标显示在第几列 - treeSpid: '0', //最上级的父级id - treeIdName: 'teacherOpenCourseScheduleSessionClassId', //id字段的名称 - treePidName: 'teacherOpenCourseScheduleSessionClassParentId', //父级节点字段 - treeDefaultClose: false, //是否默认折叠 - treeLinkage: true, //父级展开时是否自动展开所有子级 - data:classRoomTableData - /*,page : Lib.tablePage // 开启分页*/ - /* ,toolbar: '#toolbar_teacherOpenCourseScheduleSessionClass' //自定义头部左侧工具栏 - ,defaultToolbar: ['filter', 'print', 'exports'] //头部右侧工具栏*/ - , limit: 100 - , cols: [[ // 表头 - /*{ - field : 'teacherOpenCourseScheduleSessionClassId', - title : '课程开课-排课位置ID', - align:"center", - hideField :false, - hide:$.isEmpty(sx_['teacherOpenCourseScheduleSessionClassId'])?false:sx_['teacherOpenCourseScheduleSessionClassId'], - - width : 60, - },*/ - { - field: 'teacherOpenCourseScheduleSessionClassName', - title: '教学楼 / 教室号', - align: "center", - hideField: false, - hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionClassName']) ? false : sx_['teacherOpenCourseScheduleSessionClassName'], - } - ,{ - field : 'operation_',title : '操作',align:"center", templet: function (d) { - console.log(d) - var htm; - if(d.teacherOpenCourseScheduleSessionClassParentId === '0'){ - htm = '添加教室' - }else { - htm = ''; + width : 60, + },*/ + { + field: 'teacherOpenCourseScheduleSessionClassName', + title: '教学楼 / 教室号', + align: "center", + hideField: false, + hide: $.isEmpty(sx_['teacherOpenCourseScheduleSessionClassName']) ? false : sx_['teacherOpenCourseScheduleSessionClassName'], + } + , { + field: 'operation_', title: '操作', align: "center", templet: function (d) { + var htm; + if (d.teacherOpenCourseScheduleSessionClassParentId === '0') { + htm = '添加教室' + } else { + htm = ''; + } + htm += '编辑'; + htm += '删除'; + return htm; } - htm += '编辑'; - htm += '删除'; - return htm; } - } - ]] + ]] - }); + }); + }; + teacherOpenCourseScheduleSessionClassTable(); table.on('checkbox(teacherOpenCourseScheduleSessionTagTable)', function(obj){ var teacherOpenCourseScheduleSessionTag = obj.data; if(obj.checked){ @@ -189,9 +192,8 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor } }); table.on('edit(teacherOpenCourseScheduleSessionTagTable)', function(obj){ //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值" - console.log(obj.value); //得到修改后的值 - console.log(obj.field); //当前编辑的字段名 - console.log(obj.data); //所在行的所有相关数据 + var id = obj.data.teacherOpenCourseScheduleSessionTagId; + submitTag(id,obj.data); }); }, @@ -213,38 +215,18 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor "deep": null }; classRoomTableData.push(newRow); - console.log(classRoomTableData) - treetable.reload('teacherOpenCourseScheduleSessionClassTable',{data: classRoomTableData}); + teacherOpenCourseScheduleSessionClassTable(); }, add: function () { /*var url = "/jlw/teacherOpenCourseScheduleSessionTag/add.do"; Common.openDlg(url,"课次管理>新增");*/ + var data =table.cache["teacherOpenCourseScheduleSessionTagTable"]; let newRow= { - "teacherOpenCourseScheduleSessionTagName": "第"+$.toChinesNum(tagTableData.length+1)+"节", + "teacherOpenCourseScheduleSessionTagName": "", "teacherOpenCourseScheduleSessionTagStartTime": "00:00", "teacherOpenCourseScheduleSessionTagEndTime": "00:00", }; - tagTableData.push(newRow); - table.reload('teacherOpenCourseScheduleSessionTagTable',{ - data: tagTableData, - done: function(res, curr, count){//curr当前页码 - laydate.render({ - elem: '#startTime'+newRow.teacherOpenCourseScheduleSessionTagName - , type: 'time' - , trigger: 'click' - , format: 'HH:mm' - , show:true - }); - laydate.render({ - elem: '#endTime'+newRow.teacherOpenCourseScheduleSessionTagName - , type: 'time' - , trigger: 'click' - , format: 'HH:mm' - , show:true - }); - } - }); - console.log(tagTableData) + submitTag('',newRow);//添加课次 } }; //触发事件 @@ -255,7 +237,7 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor }, initTableTool: table.on('tool(teacherOpenCourseScheduleSessionTagTable)', function (obj) { var data = obj.data; - var teacherOpenCourseScheduleSessionTagName = data.teacherOpenCourseScheduleSessionTagName; + var teacherOpenCourseScheduleSessionTagId = data.teacherOpenCourseScheduleSessionTagId; if (obj.event === 'edit') { var url = "/jlw/teacherOpenCourseScheduleSessionTag/add.do?teacherOpenCourseScheduleSessionTagId="+data.teacherOpenCourseScheduleSessionTagId; Common.openDlg(url,"课次管理>"+data.teacherOpenCourseScheduleSessionTagId+">编辑"); @@ -267,44 +249,68 @@ layui.define([ 'form', 'laydate', 'table','treetable','element'], function(expor icon: ret.code == 0?1:2, time: 1500 //2秒关闭(如果不配置,默认是3秒) },function (){ - if($.isEmpty(data.teacherOpenCourseScheduleSessionTagId)){ - tagTableData.splice($(obj.tr[0]).attr('data-index'),1); - layui.table.reload('teacherOpenCourseScheduleSessionTagTable',{data: tagTableData}); - } if(ret.code == 0){ - Lib.tableRefresh(); + parent.Lib.tableRefresh(); + teacherOpenCourseScheduleSessionTagTable(); } }); }); }else if(obj.event === 'startTime'){ + var id = '#startTime' + (Number($(obj.tr[0]).attr('data-index')) + 1); laydate.render({ - elem: '#startTime'+teacherOpenCourseScheduleSessionTagName + elem: id , type: 'time' , trigger: 'click' , format: 'HH:mm' - , show:true + , done: function (value, date, endDate) { + data.teacherOpenCourseScheduleSessionTagStartTime = value; + submitTag(teacherOpenCourseScheduleSessionTagId,data);//修改课次 + } }); - }if(obj.event === 'endTime'){ + }if(obj.event == 'endTime'){ + var id = '#endTime' + (Number($(obj.tr[0]).attr('data-index')) + 1); laydate.render({ - elem: '#endTime'+teacherOpenCourseScheduleSessionTagName + elem: id , type: 'time' , trigger: 'click' , format: 'HH:mm' + , min:data.teacherOpenCourseScheduleSessionTagStartTime , show:true + , done: function (value, date, endDate) { + data.teacherOpenCourseScheduleSessionTagEndTime = value; + submitTag(teacherOpenCourseScheduleSessionTagId,data);//修改课次 + } }); } }) }; function StartTime(obj){ var teacherOpenCourseScheduleSessionTagStartTime = obj.teacherOpenCourseScheduleSessionTagStartTime; - var id = "startTime"+obj.teacherOpenCourseScheduleSessionTagName; - return '
    '+teacherOpenCourseScheduleSessionTagStartTime+'
    ' + var id = "startTime" + obj.LAY_INDEX; + return ''; } function EndTime(obj){ var teacherOpenCourseScheduleSessionTagEndTime = obj.teacherOpenCourseScheduleSessionTagEndTime; - var id = "endTime"+obj.teacherOpenCourseScheduleSessionTagName; - return '
    '+teacherOpenCourseScheduleSessionTagEndTime+'
    ' + var id = "endTime" + obj.LAY_INDEX; + return ''; } + function submitTag(id,param){ + var url = "/jlw/teacherOpenCourseScheduleSessionTag/add.json"; + if(!$.isEmpty(id)){ + url = "/jlw/teacherOpenCourseScheduleSessionTag/edit.json" + } + var ret = Common.postAjax(url,param); + layer.msg(ret.code == 0 ? "成功!" : ret.msg, { + offset: ['50%'], + icon: ret.code == 0 ? 1 : 2, + time: 1500 //2秒关闭(如果不配置,默认是3秒) + }, function () { + if (ret.code == 0) { + parent.Lib.tableRefresh(); + teacherOpenCourseScheduleSessionTagTable(); + } + }); + }; exports('index',view);