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 = '<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 + "元素");
+        })
+});
\ 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 = '<a class="layui-table-link" lay-event="del" style="color: #FF5722;">删除</a>';
-                            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 = '<a class="layui-table-link" lay-event="del" style="color: #FF5722;">删除</a>';
+                                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 = '<a class="layui-table-link" lay-event="add">添加教室</a>'
-                            }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 = '<a class="layui-table-link" lay-event="add">添加教室</a>'
+                                } else {
+                                    htm = '';
+                                }
+                                htm += '<a class="layui-table-link" lay-event="edit">编辑</a>';
+                                htm += '<a class="layui-table-link" lay-event="del" style="color: #FF5722">删除</a>';
+                                return htm;
                             }
-                            htm += '<a class="layui-table-link" lay-event="edit">编辑</a>';
-                            htm += '<a class="layui-table-link" lay-event="del" style="color: #FF5722">删除</a>';
-                            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 '<div id='+id+'>'+teacherOpenCourseScheduleSessionTagStartTime+'</div>'
+        var id = "startTime" + obj.LAY_INDEX;
+        return '<input type="text" class="layui-input" id=' + id + ' value=' + teacherOpenCourseScheduleSessionTagStartTime + '>';
     }
     function EndTime(obj){
         var teacherOpenCourseScheduleSessionTagEndTime = obj.teacherOpenCourseScheduleSessionTagEndTime;
-        var id = "endTime"+obj.teacherOpenCourseScheduleSessionTagName;
-        return '<div id='+id+'>'+teacherOpenCourseScheduleSessionTagEndTime+'</div>'
+        var id = "endTime" + obj.LAY_INDEX;
+        return '<input type="text" class="layui-input" id=' + id + ' value=' + teacherOpenCourseScheduleSessionTagEndTime + '>';
     }
+    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);