From 0d0abf3ea004efb326fd103563841c0e7d88ca7a Mon Sep 17 00:00:00 2001 From: wuyanwen Date: Sat, 14 Dec 2019 17:08:21 +0800 Subject: [PATCH] tree-table --- public/catch-admin/assets/js/common.js | 5 +- public/catch-admin/assets/module/admin.js | 2 +- .../assets/module/authtree/authtree.js | 2 +- .../tree_themes/auth-skin-default.css | 4 +- .../assets/module/treetable-lay/treeTable.css | 275 ++++ .../assets/module/treetable-lay/treeTable.js | 1388 +++++++++++++++++ 6 files changed, 1670 insertions(+), 6 deletions(-) create mode 100755 public/catch-admin/assets/module/treetable-lay/treeTable.css create mode 100755 public/catch-admin/assets/module/treetable-lay/treeTable.js diff --git a/public/catch-admin/assets/js/common.js b/public/catch-admin/assets/js/common.js index 415e93e..7b8218c 100755 --- a/public/catch-admin/assets/js/common.js +++ b/public/catch-admin/assets/js/common.js @@ -6,7 +6,7 @@ layui.config({ base: getProjectUrl() + 'assets/module/' }).extend({ formSelects: 'formSelects/formSelects-v4', - treetable: 'treetable-lay/treetable', + treeTable: 'treetable-lay/treeTable', dropdown: 'dropdown/dropdown', notice: 'notice/notice', step: 'step-lay/step', @@ -21,7 +21,8 @@ layui.config({ Drag: 'Drag/Drag', CKEDITOR: 'ckeditor/ckeditor', Split: 'Split/Split', - cascader: 'cascader/cascader' + cascader: 'cascader/cascader', + authtree: 'authtree/authtree', }).use(['layer', 'admin'], function () { var $ = layui.jquery; var layer = layui.layer; diff --git a/public/catch-admin/assets/module/admin.js b/public/catch-admin/assets/module/admin.js index 4f72a5b..446e153 100755 --- a/public/catch-admin/assets/module/admin.js +++ b/public/catch-admin/assets/module/admin.js @@ -1,2 +1,2 @@ /** EasyWeb iframe v3.1.5 date:2019-10-05 License By http://easyweb.vip */ -layui.define(["layer"],function(f){var h=layui.jquery;var j=layui.layer;var a=".layui-layout-admin>.layui-body";var k=a+">.layui-tab";var e=".layui-layout-admin>.layui-side>.layui-side-scroll";var i=".layui-layout-admin>.layui-header";var b="admin-pagetabs";var d="admin-side-nav";var c="theme-admin";var m={version:"314",defaultTheme:"theme-admin",tableName:"easyweb",flexible:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.flexible(n);return}}var o=h(".layui-layout-admin").hasClass("admin-nav-mini");(n==undefined)&&(n=o);if(o==n){if(n){m.hideTableScrollBar();h(".layui-layout-admin").removeClass("admin-nav-mini")}else{h(".layui-layout-admin").addClass("admin-nav-mini")}}},activeNav:function(o){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.activeNav(o);return}}if(!o){o=window.location.pathname;o=o.substring(o.indexOf("/"))}if(o&&o!=""){h(e+">.layui-nav .layui-nav-item .layui-nav-child dd.layui-this").removeClass("layui-this");h(e+">.layui-nav .layui-nav-item.layui-this").removeClass("layui-this");var r=h(e+'>.layui-nav a[lay-href="'+o+'"]');if(r&&r.length>0){var q=h(".layui-layout-admin").hasClass("admin-nav-mini");if(h(e+">.layui-nav").attr("lay-accordion")=="true"){var n=r.parent("dd").parents(".layui-nav-child");if(q){h(e+">.layui-nav .layui-nav-itemed>.layui-nav-child").not(n).css("display","none")}else{h(e+">.layui-nav .layui-nav-itemed>.layui-nav-child").not(n).slideUp("fast")}h(e+">.layui-nav .layui-nav-itemed").not(n.parent()).removeClass("layui-nav-itemed")}r.parent().addClass("layui-this");var s=r.parent("dd").parents(".layui-nav-child").parent();if(q){s.not(".layui-nav-itemed").children(".layui-nav-child").css("display","block")}else{s.not(".layui-nav-itemed").children(".layui-nav-child").slideDown("fast",function(){var t=r.offset().top+r.outerHeight()+30-m.getPageHeight();var u=50+65-r.offset().top;if(t>0){h(e).animate({"scrollTop":h(e).scrollTop()+t},100)}else{if(u>0){h(e).animate({"scrollTop":h(e).scrollTop()-u},100)}}})}s.addClass("layui-nav-itemed");h('ul[lay-filter="'+d+'"]').addClass("layui-hide");var p=r.parents(".layui-nav");p.removeClass("layui-hide");h(i+">.layui-nav>.layui-nav-item").removeClass("layui-this");h(i+'>.layui-nav>.layui-nav-item>a[nav-bind="'+p.attr("nav-id")+'"]').parent().addClass("layui-this")}else{}}else{console.warn("active url is null")}},popupRight:function(n){if(n.title==undefined){n.title=false;n.closeBtn=false}if(n.fixed==undefined){n.fixed=true}n.anim=-1;n.offset="r";n.shadeClose=true;n.area||(n.area="336px");n.skin||(n.skin="layui-anim layui-anim-rl layui-layer-adminRight");n.move=false;return m.open(n)},open:function(q){if(!q.area){q.area=(q.type==2)?["360px","300px"]:"360px"}if(!q.skin){q.skin="layui-layer-admin"}if(!q.offset){if(m.getPageWidth()<768){q.offset="15px"}else{if(window==top){q.offset="70px"}else{q.offset="40px"}}}if(q.fixed==undefined){q.fixed=false}q.resize=q.resize!=undefined?q.resize:false;q.shade=q.shade!=undefined?q.shade:0.1;var o=q.end;q.end=function(){j.closeAll("tips");o&&o()};if(q.url){(q.type==undefined)&&(q.type=1);var p=q.success;q.success=function(r,s){m.showLoading(r,2);h(r).children(".layui-layer-content").load(q.url,function(){p?p(r,s):"";m.removeLoading(r,false)})}}var n=j.open(q);(q.data)&&(m.layerData["d"+n]=q.data);return n},layerData:{},getLayerData:function(n,o){if(n==undefined){n=parent.layer.getFrameIndex(window.name);return parent.layui.admin.getLayerData(n,o)}else{if(n.toString().indexOf("#")==0){n=h(n).parents(".layui-layer").attr("id").substring(11)}}var p=m.layerData["d"+n];if(o){return p?p[o]:p}return p},putLayerData:function(o,q,n){if(n==undefined){n=parent.layer.getFrameIndex(window.name);return parent.layui.admin.putLayerData(o,q,n)}else{if(n.toString().indexOf("#")==0){n=h(n).parents(".layui-layer").attr("id").substring(11)}}var p=m.getLayerData(n);p||(p={});p[o]=q;m.layerData["d"+n]=p},req:function(n,o,p,q){m.ajax({url:n,data:o,type:q,dataType:"json",success:p})},ajax:function(p){var o=p.header;p.dataType||(p.dataType="json");var n=p.success;p.success=function(q,r,t){var s;if("json"==p.dataType.toLowerCase()){s=q}else{s=m.parseJSON(q)}s&&(s=q);if(m.ajaxSuccessBefore(s,p.url)==false){return}n(q,r,t)};p.error=function(q){p.success({code:q.status,msg:q.statusText})};p.beforeSend=function(t){var s=m.getAjaxHeaders(p.url);for(var q=0;q','
','
'];h(r).addClass("page-no-scroll");var s=h(r).children(".page-loading");if(s.length<=0){h(r).append('
'+n[q-1]+"
");s=h(r).children(".page-loading")}o&&s.css("background-color","rgba(255,255,255,"+o+")");s.show()},removeLoading:function(o,q,n){if(!o){o="body"}if(q==undefined){q=true}var p=h(o).children(".page-loading");if(n){p.remove()}else{q?p.fadeOut():p.hide()}h(o).removeClass("page-no-scroll")},putTempData:function(o,p){var n=m.tableName+"_tempData";if(p!=undefined&&p!=null){layui.sessionData(n,{key:o,value:p})}else{layui.sessionData(n,{key:o,remove:true})}},getTempData:function(o){var n=m.tableName+"_tempData";var p=layui.sessionData(n);if(p){return p[o]}else{return false}},rollPage:function(q){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.rollPage(q);return}}var o=h(k+">.layui-tab-title");var p=o.scrollLeft();if("left"===q){o.animate({"scrollLeft":p-120},100)}else{if("auto"===q){var n=0;o.children("li").each(function(){if(h(this).hasClass("layui-this")){return false}else{n+=h(this).outerWidth()}});o.animate({"scrollLeft":n-120},100)}else{o.animate({"scrollLeft":p+120},100)}}},refresh:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.refresh(n);return}}var p;if(!n){p=h(k+">.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe");if(!p||p.length<=0){p=h(a+">div>.admin-iframe")}}else{p=h(k+'>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="'+n+'"]');if(!p||p.length<=0){p=h(a+">.admin-iframe")}}if(p&&p[0]){try{p[0].contentWindow.location.reload(true)}catch(o){p.attr("src",p.attr("src"))}}else{console.warn(n+" is not found")}},closeThisTabs:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeThisTabs(n);return}}m.closeTabOperNav();var o=h(k+">.layui-tab-title");if(!n){if(o.find("li").first().hasClass("layui-this")){j.msg("主页不能关闭",{icon:2});return}o.find("li.layui-this").find(".layui-tab-close").trigger("click")}else{if(n==o.find("li").first().attr("lay-id")){j.msg("主页不能关闭",{icon:2});return}o.find('li[lay-id="'+n+'"]').find(".layui-tab-close").trigger("click")}},closeOtherTabs:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeOtherTabs(n);return}}if(!n){h(k+">.layui-tab-title li:gt(0):not(.layui-this)").find(".layui-tab-close").trigger("click")}else{h(k+">.layui-tab-title li:gt(0)").each(function(){if(n!=h(this).attr("lay-id")){h(this).find(".layui-tab-close").trigger("click")}})}m.closeTabOperNav()},closeAllTabs:function(){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeAllTabs();return}}h(k+">.layui-tab-title li:gt(0)").find(".layui-tab-close").trigger("click");h(k+">.layui-tab-title li:eq(0)").trigger("click");m.closeTabOperNav()},closeTabOperNav:function(){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeTabOperNav();return}}h(".layui-icon-down .layui-nav .layui-nav-child").removeClass("layui-show")},changeTheme:function(t){if(t){layui.data(m.tableName,{key:"theme",value:t});if(c==t){t=undefined}}else{layui.data(m.tableName,{key:"theme",remove:true})}try{m.removeTheme(top);(t&&top.layui)&&top.layui.link(m.getThemeDir()+t+m.getCssSuffix(),t);var u=top.window.frames;for(var p=0;p768){if(!p){var o=h(k+">.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe");if(o.length<=0){o=h(a+">div>.admin-iframe")}if(o.length>0){p=o[0].contentWindow}}try{if(p&&p.layui&&p.layui.jquery){if(window.hsbTimer){clearTimeout(hsbTimer)}p.layui.jquery(".layui-table-body.layui-table-main").addClass("no-scrollbar");window.hsbTimer=setTimeout(function(){if(p&&p.layui&&p.layui.jquery){p.layui.jquery(".layui-table-body.layui-table-main").removeClass("no-scrollbar")}},500)}}catch(n){}}},modelForm:function(o,r,n){var q=h(o);q.addClass("layui-form");if(n){q.attr("lay-filter",n)}var p=q.find(".layui-layer-btn .layui-layer-btn0");p.attr("lay-submit","");p.attr("lay-filter",r)},btnLoading:function(o,p,q){if(p!=undefined&&(typeof p=="boolean")){q=p;p=undefined}(q==undefined)&&(q=true);var n=h(o);if(q){p&&n.html(p);n.find(".layui-icon").addClass("layui-hide");n.addClass("icon-btn");n.prepend('');n.prop("disabled","disabled")}else{n.find(".ew-btn-loading").remove();n.removeProp("disabled","disabled");if(n.find(".layui-icon.layui-hide").length<=0){n.removeClass("icon-btn")}n.find(".layui-icon").removeClass("layui-hide");p&&n.html(p)}},openSideAutoExpand:function(){h(".layui-layout-admin>.layui-side").off("mouseenter.openSideAutoExpand").on("mouseenter.openSideAutoExpand",function(){if(h(this).parent().hasClass("admin-nav-mini")){m.flexible(true);h(this).addClass("side-mini-hover")}});h(".layui-layout-admin>.layui-side").off("mouseleave.openSideAutoExpand").on("mouseleave.openSideAutoExpand",function(){if(h(this).hasClass("side-mini-hover")){m.flexible(false);h(this).removeClass("side-mini-hover")}})},openCellAutoExpand:function(){h("body").off("mouseenter.openCellAutoExpand").on("mouseenter.openCellAutoExpand",".layui-table-view td",function(){h(this).find(".layui-table-grid-down").trigger("click")});h("body").off("mouseleave.openCellAutoExpand").on("mouseleave.openCellAutoExpand",".layui-table-tips>.layui-layer-content",function(){h(".layui-table-tips-c").trigger("click")})},isTop:function(){return h(a).length>0},strToWin:function(q){var p=window;if(q){var n=q.split(".");for(var o=0;o';L+='
'+I.name+"
";L+='
'+I.address+"
";L+='
';L+=""}}h("#ew-map-select-pois").html(L)}})})};var n=function(){var C={resizeEnable:true,zoom:A};x&&(C.center=x);var D=new AMap.Map("ew-map-select-map",C);D.on("complete",function(){var E=D.getCenter();u(E.lat,E.lng)});D.on("moveend",function(){if(B){B=false}else{h("#ew-map-select-tips").addClass("layui-hide");h("#ew-map-select-center-img").removeClass("bounceInDown");setTimeout(function(){h("#ew-map-select-center-img").addClass("bounceInDown")});var E=D.getCenter();u(E.lat,E.lng)}});h("#ew-map-select-pois").off("click").on("click",".ew-map-select-search-list-item",function(){h("#ew-map-select-tips").addClass("layui-hide");h("#ew-map-select-pois .ew-map-select-search-list-item-icon-ok").addClass("layui-hide");h(this).find(".ew-map-select-search-list-item-icon-ok").removeClass("layui-hide");h("#ew-map-select-center-img").removeClass("bounceInDown");setTimeout(function(){h("#ew-map-select-center-img").addClass("bounceInDown")});var G=h(this).data("lng");var H=h(this).data("lat");var F=h(this).find(".ew-map-select-search-list-item-title").text();var E=h(this).find(".ew-map-select-search-list-item-address").text();y={name:F,address:E,lat:H,lng:G};B=true;D.setZoomAndCenter(t,[G,H])});h("#ew-map-select-btn-ok").click(function(){if(y==undefined){j.msg("请点击位置列表选择",{icon:2,anim:6})}else{if(w){if(q){var E=j.load(2);D.setCenter([y.lng,y.lat]);D.getCity(function(F){j.close(E);y.city=F;m.closeDialog("#ew-map-select-btn-ok");w(y)})}else{m.closeDialog("#ew-map-select-btn-ok");w(y)}}else{m.closeDialog("#ew-map-select-btn-ok")}}});h("#ew-map-select-input-search").off("input").on("input",function(){var E=h(this).val();if(!E){h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}AMap.plugin("AMap.Autocomplete",function(){var F=new AMap.Autocomplete({city:"全国"});F.search(E,function(I,H){if(H.tips){var G=H.tips;var K="";for(var J=0;J';K+=' ';K+='
'+L.name+"
";K+='
'+L.address+"
";K+=""}}h("#ew-map-select-tips").html(K);if(G.length==0){h("#ew-map-select-tips").addClass("layui-hide")}else{h("#ew-map-select-tips").removeClass("layui-hide")}}else{h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}})})});h("#ew-map-select-input-search").off("blur").on("blur",function(){var E=h(this).val();if(!E){h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}});h("#ew-map-select-input-search").off("focus").on("focus",function(){var E=h(this).val();if(E){h("#ew-map-select-tips").removeClass("layui-hide")}});h("#ew-map-select-tips").off("click").on("click",".ew-map-select-search-list-item",function(){h("#ew-map-select-tips").addClass("layui-hide");var E=h(this).data("lng");var F=h(this).data("lat");y=undefined;D.setZoomAndCenter(t,[E,F])})};var p='
';p+=' 搜索:';p+=' ';p+='
';p+="
";p+="
";p+='
';p+='
';p+='
';p+=' ';p+=' ';p+="
";p+='
';p+="
";p+="
";m.open({id:"ew-map-select",type:1,title:o,area:"750px",content:p,success:function(C,E){var D=h(C).children(".layui-layer-content");D.css("overflow","visible");m.showLoading(D);if(undefined==window.AMap){h.getScript(r,function(){n();m.removeLoading(D)})}else{n();m.removeLoading(D)}}})};m.cropImg=function(q){var o="image/jpeg";var v=q.aspectRatio;var w=q.imgSrc;var t=q.imgType;var r=q.onCrop;var s=q.limitSize;var u=q.acceptMime;var p=q.exts;var n=q.title;(v==undefined)&&(v=1/1);(n==undefined)&&(n="裁剪图片");t&&(o=t);layui.use(["Cropper","upload"],function(){var y=layui.Cropper;var x=layui.upload;function z(){var C,D=h("#ew-crop-img");var E={elem:"#ew-crop-img-upload",auto:false,drag:false,choose:function(F){F.preview(function(H,I,G){o=I.type;D.attr("src",G);if(!w||!C){w=G;z()}else{C.destroy();C=new y(D[0],B)}})}};(s!=undefined)&&(E.size=s);(u!=undefined)&&(E.acceptMime=u);(p!=undefined)&&(E.exts=p);x.render(E);if(!w){h("#ew-crop-img-upload").trigger("click");return}var B={aspectRatio:v,preview:"#ew-crop-img-preview"};C=new y(D[0],B);h(".ew-crop-tool").on("click","[data-method]",function(){var G=h(this).data(),H,F;if(!C||!G.method){return}G=h.extend({},G);H=C.cropped;switch(G.method){case"rotate":if(H&&B.viewMode>0){C.clear()}break;case"getCroppedCanvas":if(o==="image/jpeg"){if(!G.option){G.option={}}G.option.fillColor="#fff"}break}F=C[G.method](G.option,G.secondOption);switch(G.method){case"rotate":if(H&&B.viewMode>0){C.crop()}break;case"scaleX":case"scaleY":h(this).data("option",-G.option);break;case"getCroppedCanvas":if(F){r&&r(F.toDataURL(o));m.closeDialog("#ew-crop-img")}else{j.msg("裁剪失败",{icon:2,anim:6})}break}})}var A='
';A+='
';A+=' ';A+="
";A+='
';A+='
';A+="
";A+="
";A+='
';A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+=' ';A+="
";m.open({title:n,area:"665px",type:1,content:A,success:function(B,C){h(B).children(".layui-layer-content").css("overflow","visible");z()}})})};m.util={Convert_BD09_To_GCJ02:function(o){var q=(3.141592653589793*3000)/180;var n=o.lng-0.0065,s=o.lat-0.006;var r=Math.sqrt(n*n+s*s)-0.00002*Math.sin(s*q);var p=Math.atan2(s,n)-0.000003*Math.cos(n*q);o.lng=r*Math.cos(p);o.lat=r*Math.sin(p);return o},Convert_GCJ02_To_BD09:function(o){var q=(3.141592653589793*3000)/180;var n=o.lng,s=o.lat;var r=Math.sqrt(n*n+s*s)+0.00002*Math.sin(s*q);var p=Math.atan2(s,n)+0.000003*Math.cos(n*q);o.lng=r*Math.cos(p)+0.0065;o.lat=r*Math.sin(p)+0.006;return o},animateNum:function(D,x,F,v){var r=h(D);var s=r.text().replace(/,/g,"");x=x===null||x===undefined||x===true||x==="true";F=isNaN(F)?500:F;v=isNaN(v)?100:v;var z="INPUT,TEXTAREA".indexOf(r.get(0).tagName)>=0;var t=function(J){var H="";for(var I=0;I=0;I--){if(!isNaN(J.charAt(I))){return H}else{H=J.charAt(I)+H}}},C=function(I,H){if(!H){return I}if(!/^[0-9]+.?[0-9]*$/.test(I)){return I}I=I.toString();return I.replace(I.indexOf(".")>0?/(\d)(?=(\d{3})+(?:\.))/g:/(\d)(?=(\d{3})+(?:$))/g,"$1,")};var G=t(s.toString());var p=A(s.toString());var q=s.toString().replace(G,"").replace(p,"");if(isNaN(q)||q===0){z?r.val(s):r.html(s);console.error("非法数值!");return}var u=q.split(".");var o=u[1]?u[1].length:0;var n=0,y=q;if(Math.abs(y)>10){n=parseFloat(u[0].substring(0,u[0].length-1)+(u[1]?".0"+u[1]:""))}var w=(y-n)/v,E=0;var B=setInterval(function(){var H=G+C(n.toFixed(o),x)+p;z?r.val(H):r.html(H);n+=w;E++;if(Math.abs(n)>=Math.abs(y)||E>5000){H=G+C(y,x)+p;z?r.val(H):r.html(H);clearInterval(B)}},F/v)},deepClone:function(q){var n;var o=m.util.isClass(q);if(o==="Object"){n={}}else{if(o==="Array"){n=[]}else{return q}}for(var p in q){var r=q[p];if(m.util.isClass(r)=="Object"){n[p]=arguments.callee(r)}else{if(m.util.isClass(r)=="Array"){n[p]=arguments.callee(r)}else{n[p]=q[p]}}}return n},isClass:function(n){if(n===null){return"Null"}if(n===undefined){return"Undefined"}return Object.prototype.toString.call(n).slice(8,-1)},fullTextIsEmpty:function(q){if(!q){return true}var o=["img","audio","video","iframe","object"];for(var n=0;n-1){return false}}var p=q.replace(/\s*/g,"");if(!p){return true}p=p.replace(/ /ig,"");if(!p){return true}p=p.replace(/<[^>]+>/g,"");if(!p){return true}return false}};var l=".layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item";h(document).on("mouseenter",l+","+l+" .layui-nav-child>dd",function(){if(m.getPageWidth()>768){var o=h(this),q=o.find(">.layui-nav-child");if(q.length>0){o.addClass("admin-nav-hover");q.css("left",o.offset().left+o.outerWidth());var p=o.offset().top;if(p+q.outerHeight()>m.getPageHeight()){p=p-q.outerHeight()+o.outerHeight();(p<60)&&(p=60);q.addClass("show-top")}q.css("top",p);q.addClass("ew-anim-drop-in")}else{if(o.hasClass("layui-nav-item")){var n=o.find("cite").text();j.tips(n,o,{tips:[2,"#303133"],time:-1,success:function(r,s){h(r).css("margin-top","12px")}})}}}}).on("mouseleave",l+","+l+" .layui-nav-child>dd",function(){j.closeAll("tips");var o=h(this);o.removeClass("admin-nav-hover");var n=o.find(">.layui-nav-child");n.removeClass("show-top ew-anim-drop-in");n.css({"left":"unset","top":"unset"})});h(document).on("click","*[ew-event]",function(){var n=h(this).attr("ew-event");var o=m.events[n];o&&o.call(this,h(this))});h(document).on("mouseenter","*[lay-tips]",function(){var n=h(this).attr("lay-tips");var o=h(this).attr("lay-direction");var p=h(this).attr("lay-bg");var q=h(this).attr("lay-offset");j.tips(n,this,{tips:[o||1,p||"#303133"],time:-1,success:function(r,s){if(q){q=q.split(",");var u=q[0],t=q.length>1?q[1]:undefined;u&&(h(r).css("margin-top",u));t&&(h(r).css("margin-left",t))}}})}).on("mouseleave","*[lay-tips]",function(){j.closeAll("tips")});if(m.getPageWidth()<768){if(layui.device().os=="windows"){h("body").append("")}}h(document).on("click","*[ew-href]",function(){var n=h(this).attr("ew-href");var o=h(this).attr("ew-title");o||(o=h(this).text());if(top.layui&&top.layui.index){top.layui.index.openTab({title:o?o:"",url:n})}else{location.href=n}});var g=layui.data(m.tableName);if(g&&g.theme){(g.theme==c)||layui.link(m.getThemeDir()+g.theme+m.getCssSuffix(),g.theme)}else{if(c!=m.defaultTheme){layui.link(m.getThemeDir()+m.defaultTheme+m.getCssSuffix(),m.defaultTheme)}}if(!layui.contextMenu){h(document).off("click.ctxMenu").on("click.ctxMenu",function(){try{var q=top.window.frames;for(var n=0;n.ctxMenu").remove()}catch(p){}}try{(top.layui&&top.layui.jquery)&&top.layui.jquery("body>.ctxMenu").remove()}catch(p){}}catch(p){}})}f("admin",m)}); \ No newline at end of file +layui.define(["layer"],function(f){var h=layui.jquery;var j=layui.layer;var a=".layui-layout-admin>.layui-body";var k=a+">.layui-tab";var e=".layui-layout-admin>.layui-side>.layui-side-scroll";var i=".layui-layout-admin>.layui-header";var b="admin-pagetabs";var d="admin-side-nav";var c="theme-admin";var m={version:"314",defaultTheme:"theme-admin",tableName:"easyweb",flexible:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.flexible(n);return}}var o=h(".layui-layout-admin").hasClass("admin-nav-mini");(n==undefined)&&(n=o);if(o==n){if(n){m.hideTableScrollBar();h(".layui-layout-admin").removeClass("admin-nav-mini")}else{h(".layui-layout-admin").addClass("admin-nav-mini")}}},activeNav:function(o){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.activeNav(o);return}}if(!o){o=window.location.pathname;o=o.substring(o.indexOf("/"))}if(o&&o!=""){h(e+">.layui-nav .layui-nav-item .layui-nav-child dd.layui-this").removeClass("layui-this");h(e+">.layui-nav .layui-nav-item.layui-this").removeClass("layui-this");var r=h(e+'>.layui-nav a[lay-href="'+o+'"]');if(r&&r.length>0){var q=h(".layui-layout-admin").hasClass("admin-nav-mini");if(h(e+">.layui-nav").attr("lay-accordion")=="true"){var n=r.parent("dd").parents(".layui-nav-child");if(q){h(e+">.layui-nav .layui-nav-itemed>.layui-nav-child").not(n).css("display","none")}else{h(e+">.layui-nav .layui-nav-itemed>.layui-nav-child").not(n).slideUp("fast")}h(e+">.layui-nav .layui-nav-itemed").not(n.parent()).removeClass("layui-nav-itemed")}r.parent().addClass("layui-this");var s=r.parent("dd").parents(".layui-nav-child").parent();if(q){s.not(".layui-nav-itemed").children(".layui-nav-child").css("display","block")}else{s.not(".layui-nav-itemed").children(".layui-nav-child").slideDown("fast",function(){var t=r.offset().top+r.outerHeight()+30-m.getPageHeight();var u=50+65-r.offset().top;if(t>0){h(e).animate({"scrollTop":h(e).scrollTop()+t},100)}else{if(u>0){h(e).animate({"scrollTop":h(e).scrollTop()-u},100)}}})}s.addClass("layui-nav-itemed");h('ul[lay-filter="'+d+'"]').addClass("layui-hide");var p=r.parents(".layui-nav");p.removeClass("layui-hide");h(i+">.layui-nav>.layui-nav-item").removeClass("layui-this");h(i+'>.layui-nav>.layui-nav-item>a[nav-bind="'+p.attr("nav-id")+'"]').parent().addClass("layui-this")}else{}}else{console.warn("active url is null")}},popupRight:function(n){if(n.title==undefined){n.title=false;n.closeBtn=false}if(n.fixed==undefined){n.fixed=true}n.anim=-1;n.offset="r";n.shadeClose=true;n.area||(n.area="336px");n.skin||(n.skin="layui-anim layui-anim-rl layui-layer-adminRight");n.move=false;return m.open(n)},open:function(q){if(!q.area){q.area=(q.type==2)?["360px","300px"]:"360px"}if(!q.skin){q.skin="layui-layer-admin"}if(!q.offset){if(m.getPageWidth()<768){q.offset="15px"}else{if(window==top){q.offset="70px"}else{q.offset="40px"}}}if(q.fixed==undefined){q.fixed=false}q.resize=q.resize!=undefined?q.resize:false;q.shade=q.shade!=undefined?q.shade:0.1;var o=q.end;q.end=function(){j.closeAll("tips");o&&o()};if(q.url){(q.type==undefined)&&(q.type=1);var p=q.success;q.success=function(r,s){m.showLoading(r,2);h(r).children(".layui-layer-content").load(q.url,function(){p?p(r,s):"";m.removeLoading(r,false)})}}var n=j.open(q);(q.data)&&(m.layerData["d"+n]=q.data);return n},layerData:{},getLayerData:function(n,o){if(n==undefined){n=parent.layer.getFrameIndex(window.name);return parent.layui.admin.getLayerData(n,o)}else{if(n.toString().indexOf("#")==0){n=h(n).parents(".layui-layer").attr("id").substring(11)}}var p=m.layerData["d"+n];if(o){return p?p[o]:p}return p},putLayerData:function(o,q,n){if(n==undefined){n=parent.layer.getFrameIndex(window.name);return parent.layui.admin.putLayerData(o,q,n)}else{if(n.toString().indexOf("#")==0){n=h(n).parents(".layui-layer").attr("id").substring(11)}}var p=m.getLayerData(n);p||(p={});p[o]=q;m.layerData["d"+n]=p},req:function(n,o,p,q){m.ajax({url:n,data:o,type:q,dataType:"json",success:p})},ajax:function(p){var o=p.header;p.dataType||(p.dataType="json");var n=p.success;p.success=function(q,r,t){var s;if("json"==p.dataType.toLowerCase()){s=q}else{s=m.parseJSON(q)}s&&(s=q);if(m.ajaxSuccessBefore(s,p.url)==false){return}n(q,r,t)};p.error=function(q){p.success({code:q.status,msg:q.statusText})};p.beforeSend=function(t){var s=m.getAjaxHeaders(p.url);for(var q=0;q','
','
'];h(r).addClass("page-no-scroll");var s=h(r).children(".page-loading");if(s.length<=0){h(r).append('
'+n[q-1]+"
");s=h(r).children(".page-loading")}o&&s.css("background-color","rgba(255,255,255,"+o+")");s.show()},removeLoading:function(o,q,n){if(!o){o="body"}if(q==undefined){q=true}var p=h(o).children(".page-loading");if(n){p.remove()}else{q?p.fadeOut():p.hide()}h(o).removeClass("page-no-scroll")},putTempData:function(o,p){var n=m.tableName+"_tempData";if(p!=undefined&&p!=null){layui.sessionData(n,{key:o,value:p})}else{layui.sessionData(n,{key:o,remove:true})}},getTempData:function(o){var n=m.tableName+"_tempData";var p=layui.sessionData(n);if(p){return p[o]}else{return false}},rollPage:function(q){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.rollPage(q);return}}var o=h(k+">.layui-tab-title");var p=o.scrollLeft();if("left"===q){o.animate({"scrollLeft":p-120},100)}else{if("auto"===q){var n=0;o.children("li").each(function(){if(h(this).hasClass("layui-this")){return false}else{n+=h(this).outerWidth()}});o.animate({"scrollLeft":n-120},100)}else{o.animate({"scrollLeft":p+120},100)}}},refresh:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.refresh(n);return}}var p;if(!n){p=h(k+">.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe");if(!p||p.length<=0){p=h(a+">div>.admin-iframe")}}else{p=h(k+'>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="'+n+'"]');if(!p||p.length<=0){p=h(a+">.admin-iframe")}}if(p&&p[0]){try{p[0].contentWindow.location.reload(true)}catch(o){p.attr("src",p.attr("src"))}}else{console.warn(n+" is not found")}},closeThisTabs:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeThisTabs(n);return}}m.closeTabOperNav();var o=h(k+">.layui-tab-title");if(!n){if(o.find("li").first().hasClass("layui-this")){j.msg("主页不能关闭",{icon:2});return}o.find("li.layui-this").find(".layui-tab-close").trigger("click")}else{if(n==o.find("li").first().attr("lay-id")){j.msg("主页不能关闭",{icon:2});return}o.find('li[lay-id="'+n+'"]').find(".layui-tab-close").trigger("click")}},closeOtherTabs:function(n){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeOtherTabs(n);return}}if(!n){h(k+">.layui-tab-title li:gt(0):not(.layui-this)").find(".layui-tab-close").trigger("click")}else{h(k+">.layui-tab-title li:gt(0)").each(function(){if(n!=h(this).attr("lay-id")){h(this).find(".layui-tab-close").trigger("click")}})}m.closeTabOperNav()},closeAllTabs:function(){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeAllTabs();return}}h(k+">.layui-tab-title li:gt(0)").find(".layui-tab-close").trigger("click");h(k+">.layui-tab-title li:eq(0)").trigger("click");m.closeTabOperNav()},closeTabOperNav:function(){if(window!=top&&!m.isTop()){if(top.layui&&top.layui.admin){top.layui.admin.closeTabOperNav();return}}h(".layui-icon-down .layui-nav .layui-nav-child").removeClass("layui-show")},changeTheme:function(t){if(t){layui.data(m.tableName,{key:"theme",value:t});if(c==t){t=undefined}}else{layui.data(m.tableName,{key:"theme",remove:true})}try{m.removeTheme(top);(t&&top.layui)&&top.layui.link(m.getThemeDir()+t+m.getCssSuffix(),t);var u=top.window.frames;for(var p=0;p768){if(!p){var o=h(k+">.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe");if(o.length<=0){o=h(a+">div>.admin-iframe")}if(o.length>0){p=o[0].contentWindow}}try{if(p&&p.layui&&p.layui.jquery){if(window.hsbTimer){clearTimeout(hsbTimer)}p.layui.jquery(".layui-table-body.layui-table-main").addClass("no-scrollbar");window.hsbTimer=setTimeout(function(){if(p&&p.layui&&p.layui.jquery){p.layui.jquery(".layui-table-body.layui-table-main").removeClass("no-scrollbar")}},500)}}catch(n){}}},modelForm:function(o,r,n){var q=h(o);q.addClass("layui-form");if(n){q.attr("lay-filter",n)}var p=q.find(".layui-layer-btn .layui-layer-btn0");p.attr("lay-submit","");p.attr("lay-filter",r)},btnLoading:function(o,p,q){if(p!=undefined&&(typeof p=="boolean")){q=p;p=undefined}(q==undefined)&&(q=true);var n=h(o);if(q){p&&n.html(p);n.find(".layui-icon").addClass("layui-hide");n.addClass("icon-btn");n.prepend('');n.prop("disabled","disabled")}else{n.find(".ew-btn-loading").remove();n.removeProp("disabled","disabled");if(n.find(".layui-icon.layui-hide").length<=0){n.removeClass("icon-btn")}n.find(".layui-icon").removeClass("layui-hide");p&&n.html(p)}},openSideAutoExpand:function(){h(".layui-layout-admin>.layui-side").off("mouseenter.openSideAutoExpand").on("mouseenter.openSideAutoExpand",function(){if(h(this).parent().hasClass("admin-nav-mini")){m.flexible(true);h(this).addClass("side-mini-hover")}});h(".layui-layout-admin>.layui-side").off("mouseleave.openSideAutoExpand").on("mouseleave.openSideAutoExpand",function(){if(h(this).hasClass("side-mini-hover")){m.flexible(false);h(this).removeClass("side-mini-hover")}})},openCellAutoExpand:function(){h("body").off("mouseenter.openCellAutoExpand").on("mouseenter.openCellAutoExpand",".layui-table-view td",function(){h(this).find(".layui-table-grid-down").trigger("click")});h("body").off("mouseleave.openCellAutoExpand").on("mouseleave.openCellAutoExpand",".layui-table-tips>.layui-layer-content",function(){h(".layui-table-tips-c").trigger("click")})},isTop:function(){return h(a).length>0},strToWin:function(q){var p=window;if(q){var n=q.split(".");for(var o=0;o';L+='
'+I.name+"
";L+='
'+I.address+"
";L+='
';L+=""}}h("#ew-map-select-pois").html(L)}})})};var n=function(){var C={resizeEnable:true,zoom:A};x&&(C.center=x);var D=new AMap.Map("ew-map-select-map",C);D.on("complete",function(){var E=D.getCenter();u(E.lat,E.lng)});D.on("moveend",function(){if(B){B=false}else{h("#ew-map-select-tips").addClass("layui-hide");h("#ew-map-select-center-img").removeClass("bounceInDown");setTimeout(function(){h("#ew-map-select-center-img").addClass("bounceInDown")});var E=D.getCenter();u(E.lat,E.lng)}});h("#ew-map-select-pois").off("click").on("click",".ew-map-select-search-list-item",function(){h("#ew-map-select-tips").addClass("layui-hide");h("#ew-map-select-pois .ew-map-select-search-list-item-icon-ok").addClass("layui-hide");h(this).find(".ew-map-select-search-list-item-icon-ok").removeClass("layui-hide");h("#ew-map-select-center-img").removeClass("bounceInDown");setTimeout(function(){h("#ew-map-select-center-img").addClass("bounceInDown")});var G=h(this).data("lng");var H=h(this).data("lat");var F=h(this).find(".ew-map-select-search-list-item-title").text();var E=h(this).find(".ew-map-select-search-list-item-address").text();y={name:F,address:E,lat:H,lng:G};B=true;D.setZoomAndCenter(t,[G,H])});h("#ew-map-select-btn-ok").click(function(){if(y==undefined){j.msg("请点击位置列表选择",{icon:2,anim:6})}else{if(w){if(q){var E=j.load(2);D.setCenter([y.lng,y.lat]);D.getCity(function(F){j.close(E);y.city=F;m.closeDialog("#ew-map-select-btn-ok");w(y)})}else{m.closeDialog("#ew-map-select-btn-ok");w(y)}}else{m.closeDialog("#ew-map-select-btn-ok")}}});h("#ew-map-select-input-search").off("input").on("input",function(){var E=h(this).val();if(!E){h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}AMap.plugin("AMap.Autocomplete",function(){var F=new AMap.Autocomplete({city:"全国"});F.search(E,function(I,H){if(H.tips){var G=H.tips;var K="";for(var J=0;J';K+=' ';K+='
'+L.name+"
";K+='
'+L.address+"
";K+=""}}h("#ew-map-select-tips").html(K);if(G.length==0){h("#ew-map-select-tips").addClass("layui-hide")}else{h("#ew-map-select-tips").removeClass("layui-hide")}}else{h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}})})});h("#ew-map-select-input-search").off("blur").on("blur",function(){var E=h(this).val();if(!E){h("#ew-map-select-tips").html("");h("#ew-map-select-tips").addClass("layui-hide")}});h("#ew-map-select-input-search").off("focus").on("focus",function(){var E=h(this).val();if(E){h("#ew-map-select-tips").removeClass("layui-hide")}});h("#ew-map-select-tips").off("click").on("click",".ew-map-select-search-list-item",function(){h("#ew-map-select-tips").addClass("layui-hide");var E=h(this).data("lng");var F=h(this).data("lat");y=undefined;D.setZoomAndCenter(t,[E,F])})};var p='
';p+=' 搜索:';p+=' ';p+='
';p+="
";p+="
";p+='
';p+='
';p+='
';p+=' ';p+=' ';p+="
";p+='
';p+="
";p+="
";m.open({id:"ew-map-select",type:1,title:o,area:"750px",content:p,success:function(C,E){var D=h(C).children(".layui-layer-content");D.css("overflow","visible");m.showLoading(D);if(undefined==window.AMap){h.getScript(r,function(){n();m.removeLoading(D)})}else{n();m.removeLoading(D)}}})};m.cropImg=function(q){var o="image/jpeg";var v=q.aspectRatio;var w=q.imgSrc;var t=q.imgType;var r=q.onCrop;var s=q.limitSize;var u=q.acceptMime;var p=q.exts;var n=q.title;(v==undefined)&&(v=1/1);(n==undefined)&&(n="裁剪图片");t&&(o=t);layui.use(["Cropper","upload"],function(){var y=layui.Cropper;var x=layui.upload;function z(){var C,D=h("#ew-crop-img");var E={elem:"#ew-crop-img-upload",auto:false,drag:false,choose:function(F){F.preview(function(H,I,G){o=I.type;D.attr("src",G);if(!w||!C){w=G;z()}else{C.destroy();C=new y(D[0],B)}})}};(s!=undefined)&&(E.size=s);(u!=undefined)&&(E.acceptMime=u);(p!=undefined)&&(E.exts=p);x.render(E);if(!w){h("#ew-crop-img-upload").trigger("click");return}var B={aspectRatio:v,preview:"#ew-crop-img-preview"};C=new y(D[0],B);h(".ew-crop-tool").on("click","[data-method]",function(){var G=h(this).data(),H,F;if(!C||!G.method){return}G=h.extend({},G);H=C.cropped;switch(G.method){case"rotate":if(H&&B.viewMode>0){C.clear()}break;case"getCroppedCanvas":if(o==="image/jpeg"){if(!G.option){G.option={}}G.option.fillColor="#fff"}break}F=C[G.method](G.option,G.secondOption);switch(G.method){case"rotate":if(H&&B.viewMode>0){C.crop()}break;case"scaleX":case"scaleY":h(this).data("option",-G.option);break;case"getCroppedCanvas":if(F){r&&r(F.toDataURL(o));m.closeDialog("#ew-crop-img")}else{j.msg("裁剪失败",{icon:2,anim:6})}break}})}var A='
';A+='
';A+=' ';A+="
";A+='
';A+='
';A+="
";A+="
";A+='
';A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+='
';A+=' ';A+=' ';A+="
";A+=' ';A+="
";m.open({title:n,area:"665px",type:1,content:A,success:function(B,C){h(B).children(".layui-layer-content").css("overflow","visible");z()}})})};m.util={Convert_BD09_To_GCJ02:function(o){var q=(3.141592653589793*3000)/180;var n=o.lng-0.0065,s=o.lat-0.006;var r=Math.sqrt(n*n+s*s)-0.00002*Math.sin(s*q);var p=Math.atan2(s,n)-0.000003*Math.cos(n*q);o.lng=r*Math.cos(p);o.lat=r*Math.sin(p);return o},Convert_GCJ02_To_BD09:function(o){var q=(3.141592653589793*3000)/180;var n=o.lng,s=o.lat;var r=Math.sqrt(n*n+s*s)+0.00002*Math.sin(s*q);var p=Math.atan2(s,n)+0.000003*Math.cos(n*q);o.lng=r*Math.cos(p)+0.0065;o.lat=r*Math.sin(p)+0.006;return o},animateNum:function(D,x,F,v){var r=h(D);var s=r.text().replace(/,/g,"");x=x===null||x===undefined||x===true||x==="true";F=isNaN(F)?500:F;v=isNaN(v)?100:v;var z="INPUT,TEXTAREA".indexOf(r.get(0).tagName)>=0;var t=function(J){var H="";for(var I=0;I=0;I--){if(!isNaN(J.charAt(I))){return H}else{H=J.charAt(I)+H}}},C=function(I,H){if(!H){return I}if(!/^[0-9]+.?[0-9]*$/.test(I)){return I}I=I.toString();return I.replace(I.indexOf(".")>0?/(\d)(?=(\d{3})+(?:\.))/g:/(\d)(?=(\d{3})+(?:$))/g,"$1,")};var G=t(s.toString());var p=A(s.toString());var q=s.toString().replace(G,"").replace(p,"");if(isNaN(q)||q===0){z?r.val(s):r.html(s);console.error("非法数值!");return}var u=q.split(".");var o=u[1]?u[1].length:0;var n=0,y=q;if(Math.abs(y)>10){n=parseFloat(u[0].substring(0,u[0].length-1)+(u[1]?".0"+u[1]:""))}var w=(y-n)/v,E=0;var B=setInterval(function(){var H=G+C(n.toFixed(o),x)+p;z?r.val(H):r.html(H);n+=w;E++;if(Math.abs(n)>=Math.abs(y)||E>5000){H=G+C(y,x)+p;z?r.val(H):r.html(H);clearInterval(B)}},F/v)},deepClone:function(q){var n;var o=m.util.isClass(q);if(o==="Object"){n={}}else{if(o==="Array"){n=[]}else{return q}}for(var p in q){var r=q[p];if(m.util.isClass(r)=="Object"){n[p]=arguments.callee(r)}else{if(m.util.isClass(r)=="Array"){n[p]=arguments.callee(r)}else{n[p]=q[p]}}}return n},isClass:function(n){if(n===null){return"Null"}if(n===undefined){return"Undefined"}return Object.prototype.toString.call(n).slice(8,-1)},fullTextIsEmpty:function(q){if(!q){return true}var o=["img","audio","video","iframe","object"];for(var n=0;n-1){return false}}var p=q.replace(/\s*/g,"");if(!p){return true}p=p.replace(/ /ig,"");if(!p){return true}p=p.replace(/<[^>]+>/g,"");if(!p){return true}return false}};var l=".layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item";h(document).on("mouseenter",l+","+l+" .layui-nav-child>dd",function(){if(m.getPageWidth()>768){var o=h(this),q=o.find(">.layui-nav-child");if(q.length>0){o.addClass("admin-nav-hover");q.css("left",o.offset().left+o.outerWidth());var p=o.offset().top;if(p+q.outerHeight()>m.getPageHeight()){p=p-q.outerHeight()+o.outerHeight();(p<60)&&(p=60);q.addClass("show-top")}q.css("top",p);q.addClass("ew-anim-drop-in")}else{if(o.hasClass("layui-nav-item")){var n=o.find("cite").text();j.tips(n,o,{tips:[2,"#303133"],time:-1,success:function(r,s){h(r).css("margin-top","12px")}})}}}}).on("mouseleave",l+","+l+" .layui-nav-child>dd",function(){j.closeAll("tips");var o=h(this);o.removeClass("admin-nav-hover");var n=o.find(">.layui-nav-child");n.removeClass("show-top ew-anim-drop-in");n.css({"left":"unset","top":"unset"})});h(document).on("click","*[ew-event]",function(){var n=h(this).attr("ew-event");var o=m.events[n];o&&o.call(this,h(this))});h(document).on("mouseenter","*[lay-tips]",function(){var n=h(this).attr("lay-tips");var o=h(this).attr("lay-direction");var p=h(this).attr("lay-bg");var q=h(this).attr("lay-offset");j.tips(n,this,{tips:[o||1,p||"#303133"],time:-1,success:function(r,s){if(q){q=q.split(",");var u=q[0],t=q.length>1?q[1]:undefined;u&&(h(r).css("margin-top",u));t&&(h(r).css("margin-left",t))}}})}).on("mouseleave","*[lay-tips]",function(){j.closeAll("tips")});if(m.getPageWidth()<768){if(layui.device().os=="windows"){h("body").append("")}}h(document).on("click","*[ew-href]",function(){var n=h(this).attr("ew-href");var o=h(this).attr("ew-title");o||(o=h(this).text());if(top.layui&&top.layui.index){top.layui.index.openTab({title:o?o:"",url:n})}else{location.href=n}});var g=layui.data(m.tableName);if(g&&g.theme){(g.theme==c)||layui.link(m.getThemeDir()+g.theme+m.getCssSuffix(),g.theme)}else{if(c!=m.defaultTheme){layui.link(m.getThemeDir()+m.defaultTheme+m.getCssSuffix(),m.defaultTheme)}}if(!layui.contextMenu){h(document).off("click.ctxMenu").on("click.ctxMenu",function(){try{var q=top.window.frames;for(var n=0;n.ctxMenu").remove()}catch(p){}}try{(top.layui&&top.layui.jquery)&&top.layui.jquery("body>.ctxMenu").remove()}catch(p){}}catch(p){}})}f("admin",m)}); \ No newline at end of file diff --git a/public/catch-admin/assets/module/authtree/authtree.js b/public/catch-admin/assets/module/authtree/authtree.js index a33181c..b18a46b 100755 --- a/public/catch-admin/assets/module/authtree/authtree.js +++ b/public/catch-admin/assets/module/authtree/authtree.js @@ -85,7 +85,7 @@ layui.define(['jquery', 'form'], function (exports) { opt.checkSkin = opt.checkSkin ? opt.checkSkin : 'primary'; // 主题定制 opt.theme = opt.theme ? opt.theme : ''; - opt.themePath = opt.themePath ? opt.themePath : 'layui_exts/tree_themes/'; + opt.themePath = opt.themePath ? opt.themePath : 'catch-admin/assets/module/authtree/tree_themes/'; // 展开、折叠节点的前显字符配置 opt.openIconContent = opt.openIconContent ? opt.openIconContent : ''; this.openIconContent = opt.openIconContent; diff --git a/public/catch-admin/assets/module/authtree/tree_themes/auth-skin-default.css b/public/catch-admin/assets/module/authtree/tree_themes/auth-skin-default.css index ad2d858..314e374 100755 --- a/public/catch-admin/assets/module/authtree/tree_themes/auth-skin-default.css +++ b/public/catch-admin/assets/module/authtree/tree_themes/auth-skin-default.css @@ -29,9 +29,9 @@ Version: v1.0.0 -webkit-border-radius: 5px; border-radius: 5px; display: inline-block; - padding: 3px 8px; + padding: 3px 3px; text-decoration: none; - + font-size: 12px; position: relative; top: -3px; } diff --git a/public/catch-admin/assets/module/treetable-lay/treeTable.css b/public/catch-admin/assets/module/treetable-lay/treeTable.css new file mode 100755 index 0000000..5743390 --- /dev/null +++ b/public/catch-admin/assets/module/treetable-lay/treeTable.css @@ -0,0 +1,275 @@ +/** + * 树形表格 2.x + * date:2019-11-08 License By https://easyweb.vip + */ +.ew-tree-table { + margin: 10px 0; + position: relative +} + +.ew-tree-table .layui-table { + margin: 0 +} + +.ew-tree-table .ew-tree-table-border { + position: absolute; + background-color: #e6e6e6 +} + +.ew-tree-table .ew-tree-table-border.top { + left: 0; + right: 0; + top: 0; + height: 1px +} + +.ew-tree-table .ew-tree-table-border.left { + top: 0; + left: 0; + bottom: 0; + width: 1px +} + +.ew-tree-table .ew-tree-table-border.right { + top: 0; + right: 0; + bottom: 0; + width: .52px +} + +.ew-tree-table .ew-tree-table-border.bottom { + left: 0; + right: 0; + bottom: 0; + height: .52px +} + +.ew-tree-table-group { + overflow: auto; + position: relative +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box { + overflow: auto; + position: relative; + box-sizing: border-box +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-head { + position: relative; + box-sizing: border-box; + background-color: #f2f2f2 +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box > .layui-table, .ew-tree-table > .ew-tree-table-group > .ew-tree-table-head > .layui-table { + table-layout: fixed +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box > .ew-tree-table-loading { + padding: 10px 0; + text-align: center +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box > .ew-tree-table-loading > i { + color: #999; + font-size: 30px +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box > .ew-tree-table-loading.ew-loading-float { + position: absolute; + left: 0; + right: 0; + top: 0 +} + +.ew-tree-table > .ew-tree-table-group > .ew-tree-table-box > .ew-tree-table-empty { + color: #666; + font-size: 14px; + text-align: center +} + +.ew-tree-table .ew-tree-table-arrow { + margin-right: 5px; + vertical-align: middle +} + +.ew-tree-table .ew-tree-table-arrow:before { + content: "\e623" +} + +.ew-tree-table .ew-tree-table-open .ew-tree-table-arrow:before { + content: "\e625" +} + +.ew-tree-table .ew-tree-table-arrow.arrow2 { + font-size: 13px; + font-weight: 600; + line-height: 16px; + height: 16px; + width: 16px; + display: inline-block; + text-align: center; + color: #888 +} + +.ew-tree-table .ew-tree-table-arrow.arrow2:before { + content: "\e602" +} + +.ew-tree-table .ew-tree-table-open .ew-tree-table-arrow.arrow2:before { + content: "\e61a" +} + +.ew-tree-table-arrow.ew-tree-table-arrow-hide { + visibility: hidden +} + +.ew-tree-table .ew-tree-table-loading > td > .ew-tree-pack > .ew-tree-table-arrow:before { + content: "\e63d" !important +} + +.ew-tree-table .ew-tree-table-loading > td > .ew-tree-pack > .ew-tree-table-arrow { + margin-right: 0 +} + +.ew-tree-table .ew-tree-table-loading > td > .ew-tree-pack > .ew-tree-table-arrow + * { + margin-left: 5px +} + +.ew-tree-table tr.ew-tree-table-loading > * { + pointer-events: none !important +} + +.ew-tree-table .ew-tree-pack { + cursor: pointer; + line-height: 16px; + display: inline-block; + vertical-align: middle +} + +.ew-tree-table .ew-tree-pack > span { + height: 16px; + line-height: 16px; + display: inline-block; + vertical-align: middle +} + +.ew-tree-table .ew-tree-tb-hide { + display: none +} + +.ew-tree-table .ew-tree-table-indent { + margin-right: 5px; + padding-left: 16px +} + +.ew-tree-table .ew-tree-icon { + margin-right: 5px; + display: inline-block; + vertical-align: middle +} + +.ew-tree-table .ew-tree-icon-folder, .ew-tree-table .ew-tree-icon-file { + width: 22px; + height: 16px; + line-height: 16px; + position: relative +} + +.ew-tree-table .ew-tree-icon-folder:after, .ew-tree-table .ew-tree-icon-file:after { + content: ""; + width: 22px; + height: 22px; + position: absolute; + left: 0; + top: -3px; + background-size: cover; + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc0MDYyMzE3MTQ3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjIxNTgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTE4MSA4MjNoLTMxLjFjLTI4LjYgMC01MS45LTIzLjItNTEuOS01MS45VjI1Mi40YzAtMjguNiAyMy4yLTUxLjkgNTEuOS01MS45SDQzMGw4MyA3Ny44aDMzMmM0NS42IDAgODMgMzUgODMgNzcuOHYzODkuMWMwIDQyLjgtMzcuMyA3Ny44LTgzIDc3LjhIMTgxeiIgcC1pZD0iMjE1OSIgZmlsbD0iI0ZGQTUwMCI+PC9wYXRoPjwvc3ZnPg==") +} + +.ew-tree-table tr.ew-tree-table-open > td > .ew-tree-pack .ew-tree-icon-folder:after { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc0MDYyMzA5MDQwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE5NzciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTMyNi40IDQ2MC4xSDkyOGwtODIuMyAzMjRjLTUuOCAyMy0yNi42IDM5LjEtNTAuMyAzOS4xSDE0OS45Yy0yOC42IDAtNTEuOS0yMy4yLTUxLjktNTEuOVYyNTIuNmMwLTI4LjYgMjMuMi01MS45IDUxLjktNTEuOUg0MTNsMTA1IDEwMy43aDI5MS44YzE0LjMgMCAyNS45IDExLjYgMjUuOSAyNS45djc3LjhoLTUyN0wyMDMuNCA1NjMuOWg1Mi43bDcwLjMtMTAzLjh6IiBwLWlkPSIxOTc4IiBmaWxsPSIjRkZBNTAwIj48L3BhdGg+PC9zdmc+") +} + +.ew-tree-table .ew-tree-icon-file:after { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc0MDYyNTE1MDUxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEzNTE4IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0Ij48ZGVmcz48c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwvc3R5bGU+PC9kZWZzPjxwYXRoIGQ9Ik03NDEuMyAxNjEuNmgtNDIuNGMtMTAuNSAwLTE5LjEgOC42LTE5LjEgMTkuMXM4LjYgMTkuMSAxOS4xIDE5LjFoNDIuNGM0MiAwIDc2LjIgMzQuMiA3Ni4yIDc2LjN2NDc3LjRjMCA0Mi4xLTM0LjMgNzYuMy03Ni40IDc2LjNIMjgyLjljLTQyLjEgMC03Ni4zLTM0LjItNzYuMy03Ni4zVjI3Ni4xYzAtNDIuMSAzNC4yLTc2LjMgNzYuMy03Ni4zaDQ0LjljMTAuNSAwIDE5LjEtOC42IDE5LjEtMTkuMXMtOC42LTE5LjEtMTkuMS0xOS4xaC00NC45Yy02My4xIDAtMTE0LjUgNTEuNC0xMTQuNSAxMTQuNXY0NzcuNGMwIDYzLjEgNTEuNCAxMTQuNSAxMTQuNSAxMTQuNWg0NTguM2M2My4xIDAgMTE0LjUtNTEuNCAxMTQuNS0xMTQuNVYyNzYuMWMtMC4xLTYzLjEtNTEuNC0xMTQuNS0xMTQuNC0xMTQuNXoiIHAtaWQ9IjEzNTE5IiBmaWxsPSIjRkZBNTAwIj48L3BhdGg+PHBhdGggZD0iTTY4MC42IDUwNS4zSDM0My40Yy0xMi4zIDAtMjIuMyA4LjYtMjIuMyAxOS4xczEwIDE5LjEgMjIuMyAxOS4xaDMzNy4yYzEyLjMgMCAyMi4zLTguNiAyMi4zLTE5LjEgMC0xMC42LTEwLTE5LjEtMjIuMy0xOS4xek00MzkuMyAyMTMuM2gxNDQuNmMxOSAwIDM0LjQtMTIuOCAzNC40LTI4LjZzLTE1LjQtMjguNi0zNC40LTI4LjZINDM5LjNjLTE5IDAtMzQuNCAxMi44LTM0LjQgMjguNi0wLjEgMTUuNyAxNS4zIDI4LjYgMzQuNCAyOC42ek02ODAuNiA2NThIMzQzLjRjLTEyLjMgMC0yMi4zIDguNS0yMi4zIDE5LjEgMCAxMC41IDEwIDE5LjEgMjIuMyAxOS4xaDMzNy4yYzEyLjMgMCAyMi4zLTguNiAyMi4zLTE5LjEgMC0xMC42LTEwLTE5LjEtMjIuMy0xOS4xek02ODAuNiAzNTIuNUgzNDMuNGMtMTIuMyAwLTIyLjMgOC42LTIyLjMgMTkuMXMxMCAxOS4xIDIyLjMgMTkuMWgzMzcuMmMxMi4zIDAgMjIuMy04LjYgMjIuMy0xOS4xIDAtMTAuNS0xMC0xOS4xLTIyLjMtMTkuMXoiIHAtaWQ9IjEzNTIwIiBmaWxsPSIjRkZBNTAwIj48L3BhdGg+PC9zdmc+") +} + +.ew-tree-table .layui-form-switch { + margin-top: 0 +} + +.ew-tree-table .layui-form-radio { + margin: 0 +} + +.ew-tree-table-checkbox + .layui-form-checkbox { + padding: 0 +} + +.ew-tree-table-checkbox + .layui-form-checkbox > .layui-icon { + color: transparent; + transition: background-color .1s linear +} + +.ew-tree-table-checkbox + .layui-form-checkbox.layui-form-checked > .layui-icon { + color: #fff +} + +.ew-tree-table-radio + .layui-form-radio { + padding: 0; + height: 20px; + line-height: 20px +} + +.ew-tree-table-radio + .layui-form-radio > i { + margin: 0; + height: 20px; + font-size: 20px; + line-height: 20px +} + +.ew-tree-table .layui-form-checked.ew-form-indeterminate > .layui-icon:before { + content: ""; + width: 9px; + height: 2px; + display: inline-block; + background-color: #eee; + vertical-align: middle +} + +.ew-tree-table .layui-form-checked.ew-form-indeterminate > .layui-icon { + line-height: 14px +} + +.ew-tree-table .layui-table td[data-edit] { + cursor: text +} + +.ew-tree-table .ew-tree-table-edit { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + border-radius: 0; + box-shadow: 1px 1px 20px rgba(0, 0, 0, .15) +} + +.ew-tree-table .ew-tree-table-edit:focus { + border-color: #5fb878 !important +} + +.ew-tree-table .ew-tree-table-edit.layui-form-danger { + border-color: #ff5722 !important +} + +.ew-tree-table td[data-type="numbers"] { + padding-left: 0; + padding-right: 0; + text-align: center +} + +.ew-tree-table tr.ew-tree-table-filter-hide { + display: none !important +} \ No newline at end of file diff --git a/public/catch-admin/assets/module/treetable-lay/treeTable.js b/public/catch-admin/assets/module/treetable-lay/treeTable.js new file mode 100755 index 0000000..6a84e98 --- /dev/null +++ b/public/catch-admin/assets/module/treetable-lay/treeTable.js @@ -0,0 +1,1388 @@ +/** + * 树形表格 2.x + * date:2019-11-08 License By http://easyweb.vip + */ +layui.define(['layer', 'laytpl', 'form'], function (exports) { + var $ = layui.jquery; + var layer = layui.layer; + var laytpl = layui.laytpl; + var form = layui.form; + var device = layui.device(); + var MOD_NAME = 'treeTable'; // 绑定事件的模块名 + layui.link(layui.cache.base + 'treetable-lay/treeTable.css'); + + /** TreeTable类构造方法 */ + var TreeTable = function (options) { + // 表格默认参数 + var defaultOption = { + elem: undefined, // table容器 + data: [], // 数据 + cols: [], // 列配置 + reqData: undefined, // 异步加载数据的方法 + width: undefined, // 容器宽度 + height: undefined, // 容器高度 + cellMinWidth: 100, // 单元格最小宽度 + skin: undefined, // 表格风格 + size: undefined, // 表格尺寸 + even: undefined, // 是否开启隔行变色 + style: undefined, // 容器样式 + getThead: function () { // 获取表头 + return getThead(this); + }, + getAllChooseBox: function () { // 获取全选按钮 + return getAllChooseBox(this); + }, + getColgroup: function () { // 获取colgroup + return getColgroup(this); + }, + getTbWidth: function () { // 计算table的宽度 + return getTbWidth(this); + }, + tree: {}, + text: {} + }; + // 默认tree参数 + var treeDefaultOption = { + idName: 'id', // id的字段名 + pidName: 'pid', // pid的字段名 + childName: 'children', // children的字段名 + haveChildName: 'haveChild', // 是否有children标识的字段名 + openName: 'open', // 是否默认展开的字段名 + isPidData: false, // 是否是pid形式的数据 + iconIndex: 0, // 图标列的索引 + arrowType: undefined, // 箭头类型 + onlyIconControl: false, // 仅允许点击图标折叠 + getIcon: function (d) { // 自定义图标 + return getIcon(d, this); + } + }; + // 默认提示文本 + var textDefaultOption = { + none: '
暂无数据
' // 空文本提示文字 + }; + this.options = $.extend(defaultOption, options); + this.options.tree = $.extend(treeDefaultOption, options.tree); + this.options.text = $.extend(textDefaultOption, options.text); + for (var i = 0; i < options.cols.length; i++) { + // 列默认参数 + var colDefaultOption = { + field: undefined, // 字段名 + title: undefined, // 标题 + align: undefined, // 对齐方式 + templet: undefined, // 自定义模板 + toolbar: undefined, // 工具列 + width: undefined, // 宽度 + type: undefined, // 列类型 + style: undefined, // 单元格样式 + fixed: undefined, // 固定列 + unresize: false // 关闭拖拽列宽 + }; + this.options.cols[i] = $.extend(colDefaultOption, options.cols[i]); + } + this.init(); // 初始化表格 + this.bindEvents(); // 绑定事件 + }; + + /** 初始化表格 */ + TreeTable.prototype.init = function () { + var options = this.options; + var tbFilter = options.elem.substring(1); // 树表格的filter + var $elem = $(options.elem); // 原始表格 + + // 生成树表格dom + $elem.removeAttr('lay-filter'); + $elem.next('.ew-tree-table').remove(); + var viewHtml = '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += ' '; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + viewHtml += '
'; + $elem.after(viewHtml); + + // 获取各个组件 + var components = this.getComponents(); + var $view = components.$view; // 容器 + $view.attr('lay-filter', tbFilter); + var $group = components.$group; // 表格容器 + var $tbBox = components.$tbBox; // 表格主体部分容器 + var $table = components.$table; // 主体表格 + var $headTb = components.$headTb; // 表头表格 + var $tbEmpty = components.$tbEmpty; // 空视图 + var $tbLoading = components.$tbLoading; // 空视图 + + // 基础参数设置 + options.width && $view.css('width', options.width); + options.skin && $table.attr('lay-skin', options.skin); + options.size && $table.attr('lay-size', options.size); + options.even && $table.attr('lay-even', options.even); + + // 容器边框调整 + if (device.ie) { + $view.find('.ew-tree-table-border.bottom').css('height', '1px'); + $view.find('.ew-tree-table-border.right').css('width', '1px'); + } + + // 计算表格宽度 + var tbWidth = options.getTbWidth(); + $tbBox.css('min-width', tbWidth.minWidth); + $headTb.parent().css('min-width', tbWidth.minWidth); + if (tbWidth.setWidth) { + $tbBox.css('width', tbWidth.width); + $headTb.parent().css('width', tbWidth.width); + } + + // 渲染表结构及表头 + var colgroupHtmlStr = options.getColgroup(); + var headHtmlStr = colgroupHtmlStr + '' + options.getThead() + ''; + if (options.height) { // 固定表头 + $table.html(colgroupHtmlStr + ''); + $headTb.html(headHtmlStr); + $table.css('margin-top', '-1px'); + if (options.height.indexOf('full-') == 0) { // 差值高度 + var h = parseFloat(options.height.substring(5)); + var cssStr = ''; + $tbBox.after(cssStr); + $tbBox.attr('ew-tree-full', h); + } else { // 固定高度 + $tbBox.css('height', options.height); + } + } else { + $table.html(headHtmlStr + ''); + } + form.render('checkbox', tbFilter); // 渲染表头的表单元素 + + // 渲染数据 + if (options.reqData) { // 异步加载 + this.renderBodyAsync(); + } else { // 一次性渲染 + if (options.data && options.data.length > 0) { + // 处理数据 + if (options.tree.isPidData) { // pid形式数据 + treeTb.pidToChildren(options.data, options.tree.idName, options.tree.pidName, options.tree.childName); + } else { // children形式数据 + addPidField(options.data, options.tree); + } + $table.children('tbody').html(this.renderBody(options.data)); + $tbLoading.hide(); + this.renderNumberCol(); // 渲染序号列 + form.render(null, tbFilter); // 渲染表单元素 + this.checkChooseAllCB(); // 联动全选框 + updateFixedTbHead($view); + } else { + $tbLoading.hide(); + $tbEmpty.show(); + } + } + }; + + /** 绑定各项事件 */ + TreeTable.prototype.bindEvents = function () { + var that = this; + var options = this.options; + var components = this.getComponents(); + var $view = components.$view; + var $table = components.$table; + var $tbEmpty = components.$tbEmpty; + var tbFilter = components.tbFilter; + var checkboxFilter = components.checkboxFilter; + var radioFilter = components.radioFilter; + var cbAllFilter = components.cbAllFilter; + var $tbody = $table.children('tbody'); + + /** 行事件公共返回对象 */ + var commonMember = function (ext) { + var $tr = $(this); + if (!$tr.is('tr')) { + $tr = $tr.parentsUntil('tr[data-id]').parent(); + } + var id = $tr.data('id'); + var data = getDataById(options.data, id, options.tree); + var obj = { + tr: $tr, // 当前行 + data: data, //当前行数据 + del: function () { // 删除行 + var indent = parseInt(this.tr.data('indent')); + this.tr.nextAll('tr').each(function () { + if (parseInt($(this).data('indent')) <= indent) { + return false; + } + $(this).remove(); + }); + var $parentTr = this.tr.prevAll('tr'); + this.tr.remove(); + delDataById(options.data, id, options.tree); + if (!options.data || options.data.length <= 0) { + $tbEmpty.show(); + } + that.renderNumberCol(); // 渲染序号列 + // 联动父级 + $parentTr.each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < indent) { + that.checkParentCB($(this)); + indent = tInd; + } + }); + that.checkChooseAllCB(); // 联动全选框 + }, + update: function (fields) { // 修改行 + data = $.extend(data, fields); + var indent = parseInt(this.tr.data('indent')); + that.renderBodyTr(data, indent, undefined, this.tr); + form.render(null, tbFilter); // 渲染表单元素 + that.checkIndeterminateCB(); // 恢复半选框状态 + that.checkChooseAllCB(); // 联动全选框 + } + }; + return $.extend(obj, ext); + }; + + // 绑定折叠展开事件 + $tbody.off('click.fold').on('click.fold', '.ew-tree-pack', function (e) { + layui.stope(e); + var $tr = $(this).parent().parent(); + if ($tr.hasClass('ew-tree-table-loading')) { // 已是加载中 + return; + } + var haveChild = $tr.data('have-child'); + if (haveChild != true && haveChild != 'true') { // 子节点 + return; + } + var id = $tr.data('id'); + var isOpen = $tr.hasClass('ew-tree-table-open'); + var data = getDataById(options.data, id, options.tree); + if (!isOpen && (!data[options.tree.childName] || data[options.tree.childName].length <= 0)) { + that.renderBodyAsync(data, $tr); + } else { + toggleRow($tr); + } + }); + + // 绑定lay-event事件 + $tbody.off('click.tool').on('click.tool', '*[lay-event]', function (e) { + layui.stope(e); + var $this = $(this); + layui.event.call(this, MOD_NAME, 'tool(' + tbFilter + ')', commonMember.call(this, { + event: $this.attr('lay-event') + })); + }); + + // 绑定单选框事件 + form.on('radio(' + radioFilter + ')', function (data) { + var d = getDataById(options.data, data.value, options.tree); + that.removeAllChecked(); + d.LAY_CHECKED = true; // 同时更新数据 + layui.event.call(this, MOD_NAME, 'checkbox(' + tbFilter + ')', {checked: true, data: d, type: 'one'}); + }); + + // 绑定复选框事件 + form.on('checkbox(' + checkboxFilter + ')', function (data) { + var checked = data.elem.checked; + var $cb = $(data.elem); + var $layCb = $cb.next('.layui-form-checkbox'); + // 如果是半选状态,点击全选 + if (!checked && $layCb.hasClass('ew-form-indeterminate')) { + checked = true; + $cb.prop('checked', checked); + $cb.data('indeterminate', 'false'); + $layCb.addClass('layui-form-checked'); + $layCb.removeClass('ew-form-indeterminate'); + } + var d = getDataById(options.data, data.value, options.tree); + d.LAY_CHECKED = checked; // 同时更新数据 + // 联动操作 + var $tr = $cb.parentsUntil('tr').parent(); + if (d[options.tree.childName] && d[options.tree.childName].length > 0) { + that.checkSubCB($tr, checked); // 联动子级 + } + var indent = parseInt($tr.data('indent')); + $tr.prevAll('tr').each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < indent) { + that.checkParentCB($(this)); // 联动父级 + indent = tInd; + } + }); + that.checkChooseAllCB(); // 联动全选框 + // 回调事件 + layui.event.call(this, MOD_NAME, 'checkbox(' + tbFilter + ')', { + checked: checked, + data: d, + type: 'one' + }); + }); + + // 绑定全选复选框事件 + form.on('checkbox(' + cbAllFilter + ')', function (data) { + var checked = data.elem.checked; + var $cb = $(data.elem); + var $layCb = $cb.next('.layui-form-checkbox'); + if (!options.data || options.data.length <= 0) { // 如果数据为空 + $cb.prop('checked', false); + $cb.data('indeterminate', 'false'); + $layCb.removeClass('layui-form-checked ew-form-indeterminate'); + return; + } + // 如果是半选状态,点击全选 + if (!checked && $layCb.hasClass('ew-form-indeterminate')) { + checked = true; + $cb.prop('checked', checked); + $cb.data('indeterminate', 'false'); + $layCb.addClass('layui-form-checked'); + $layCb.removeClass('ew-form-indeterminate'); + } + layui.event.call(this, MOD_NAME, 'checkbox(' + tbFilter + ')', { + checked: checked, + data: undefined, + type: 'all' + }); + that.checkSubCB($table.children('tbody'), checked); // 联动操作 + }); + + // 绑定行单击事件 + $tbody.off('click.row').on('click.row', 'tr', function () { + layui.event.call(this, MOD_NAME, 'row(' + tbFilter + ')', commonMember.call(this, {})); + }); + + // 绑定行双击事件 + $tbody.off('dblclick.rowDouble').on('dblclick.rowDouble', 'tr', function () { + layui.event.call(this, MOD_NAME, 'rowDouble(' + tbFilter + ')', commonMember.call(this, {})); + }); + + // 绑定单元格点击事件 + $tbody.off('click.cell').on('click.cell', 'td', function (e) { + var $td = $(this); + var type = $td.data('type'); + // 判断是否是复选框、单选框列 + if (type == 'checkbox' || type == 'radio') { + layui.stope(e); + return; + } + var edit = $td.data('edit'); + var field = $td.data('field'); + if (edit) { // 开启了单元格编辑 + layui.stope(e); + if ($tbody.find('.ew-tree-table-edit').length > 0) { + return; + } + var index = $td.data('index'); + var indentSize = $td.children('.ew-tree-table-indent').length; + var id = $td.parent().data('id'); + var d = getDataById(options.data, id, options.tree); + if ('text' == edit || 'number' == edit) { // 文本框 + var $input = $(''); + $input[0].value = d[field]; + $td.append($input); + $input.focus(); + $input.blur(function () { + var value = $(this).val(); + if (value == d[field]) { + $(this).remove(); + return; + } + var rs = layui.event.call(this, MOD_NAME, 'edit(' + tbFilter + ')', commonMember.call(this, { + value: value, + field: field + })); + if (rs == false) { + $(this).addClass('layui-form-danger'); + $(this).focus(); + } else { + d[field] = value; // 同步更新数据 + that.renderBodyTd(d, indentSize, index, $td); // 更新单元格 + } + }); + } else { + console.error('不支持的单元格编辑类型:' + edit); + } + } else { // 回调单元格点击事件 + var rs = layui.event.call(this, MOD_NAME, 'cell(' + tbFilter + ')', commonMember.call(this, { + td: $td, + field: field + })); + if (rs == false) { + layui.stope(e); + } + } + }); + + // 绑定单元格双击事件 + $tbody.off('dblclick.cellDouble').on('dblclick.cellDouble', 'td', function (e) { + var $td = $(this); + var type = $td.data('type'); + // 判断是否是复选框、单选框列 + if (type == 'checkbox' || type == 'radio') { + layui.stope(e); + return; + } + var edit = $td.data('edit'); + var field = $td.data('field'); + if (edit) { // 开启了单元格编辑 + layui.stope(e); + } else { // 回调单元格双击事件 + var rs = layui.event.call(this, MOD_NAME, 'cellDouble(' + tbFilter + ')', commonMember.call(this, { + td: $td, + field: field + })); + if (rs == false) { + layui.stope(e); + } + } + }); + + // 列宽拖拽调整 + /*$view.off('mousedown.resize').on('mousedown.resize', '.ew-tb-resize', function (e) { + layui.stope(e); + var index = $(this).parent().data('index'); + $(this).data('move', 'true'); + $(this).data('x', e.clientX); + var w = $(this).parent().parent().parent().parent().children('colgroup').children('col').eq(index).attr('width'); + $(this).data('width', w); + }); + $view.off('mousemove.resize').on('mousemove.resize', '.ew-tb-resize', function (e) { + layui.stope(e); + var move = $(this).data('move'); + if ('true' == move) { + var x = $(this).data('x'); + var w = $(this).data('width'); + var index = $(this).parent().data('index'); + var nw = parseFloat(w) + e.clientX - parseFloat(x); + $(this).parent().parent().parent().parent().children('colgroup').children('col').eq(index).attr('width', nw); + } + }); + $view.off('mouseup.resize').on('mouseup.resize', '.ew-tb-resize', function (e) { + layui.stope(e); + $(this).data('move', 'false'); + }); + $view.off('mouseleave.resize').on('mouseleave.resize', '.ew-tb-resize', function (e) { + layui.stope(e); + $(this).data('move', 'false'); + });*/ + + }; + + /** 获取各个组件 */ + TreeTable.prototype.getComponents = function () { + var $view = $(this.options.elem).next(); // 容器 + var $group = $view.children('.ew-tree-table-group'); // 表格容器 + var $tbBox = $group.children('.ew-tree-table-box'); // 表格主体部分容器 + var $table = $tbBox.children('.layui-table'); // 主体表格 + var $headTb = $group.children('.ew-tree-table-head').children('.layui-table'); // 表头表格 + var $tbEmpty = $tbBox.children('.ew-tree-table-empty'); // 空视图 + var $tbLoading = $tbBox.children('.ew-tree-table-loading'); // 加载视图 + var tbFilter = $view.attr('lay-filter'); // 容器filter + var checkboxFilter = 'ew_tb_checkbox_' + tbFilter; // 复选框filter + var radioFilter = 'ew_tb_radio_' + tbFilter; // 单选框filter + var cbAllFilter = 'ew_tb_choose_all_' + tbFilter; // 全选按钮filter + return { + $view: $view, + $group: $group, + $tbBox: $tbBox, + $table: $table, + $headTb: $headTb, + $tbEmpty: $tbEmpty, + $tbLoading: $tbLoading, + tbFilter: tbFilter, + checkboxFilter: checkboxFilter, + radioFilter: radioFilter, + cbAllFilter: cbAllFilter + }; + }; + + /** + * 递归渲染表格主体部分 + * @param data 数据列表 + * @param indentSize 缩进大小 + * @param isHide 是否默认隐藏 + * @returns {string} + */ + TreeTable.prototype.renderBody = function (data, indentSize, isHide) { + var options = this.options; + var treeOption = options.tree; + indentSize || (indentSize = 0); + var htmlStr = ''; + for (var i = 0; i < data.length; i++) { + var d = data[i]; + htmlStr += this.renderBodyTr(d, indentSize, isHide); + // 递归渲染子集 + var children = d[treeOption.childName]; + if (children && children.length > 0) { + htmlStr += this.renderBody(children, indentSize + 1, !d[treeOption.openName]); + } + } + return htmlStr; + }; + + /** + * 渲染一行数据 + * @param d 行数据 + * @param option 配置 + * @param indentSize 缩进大小 + * @param isHide 是否隐藏 + * @param $tr + * @returns {string} + */ + TreeTable.prototype.renderBodyTr = function (d, indentSize, isHide, $tr) { + var options = this.options; + var cols = options.cols; + var treeOption = options.tree; + indentSize || (indentSize = 0); + var htmlStr = ''; + var haveChild = getHaveChild(d, treeOption); + if ($tr) { + $tr.data('pid', d[treeOption.pidName] || ''); + $tr.data('have-child', haveChild); + $tr.data('indent', indentSize); + $tr.removeClass('ew-tree-table-loading'); + } else { + var classNames = ''; + if (haveChild && d[treeOption.openName]) { + classNames += 'ew-tree-table-open'; + } + if (isHide) { + classNames += 'ew-tree-tb-hide'; + } + htmlStr += ''; + } + for (var j = 0; j < cols.length; j++) { + var $td; + if ($tr) { + $td = $tr.children('td').eq(j); + } + htmlStr += this.renderBodyTd(d, indentSize, j, $td); + } + htmlStr += ''; + return htmlStr; + }; + + /** + * 渲染每一个单元格数据 + * @param d 行数据 + * @param indentSize 缩进大小 + * @param index 第几列 + * @param $td + * @returns {string} + */ + TreeTable.prototype.renderBodyTd = function (d, indentSize, index, $td) { + var options = this.options; + var col = options.cols[index]; + var treeOption = options.tree; + var components = this.getComponents(); + var checkboxFilter = components.checkboxFilter; + var radioFilter = components.radioFilter; + indentSize || (indentSize = 0); + // 内容填充 + var fieldStr = ''; + if (col.type == 'numbers') { // 序号列 + fieldStr += ''; + } else if (col.type == 'checkbox') { // 复选框列 + var attrStr = 'name="' + checkboxFilter + '" lay-filter="' + checkboxFilter + '" value="' + d[treeOption.idName] + '"'; + attrStr += d.LAY_CHECKED ? ' checked="checked"' : ''; + fieldStr += ''; + } else if (col.type == 'radio') { // 单选框列 + var attrStr = 'name="' + radioFilter + '" lay-filter="' + radioFilter + '" value="' + d[treeOption.idName] + '"'; + attrStr += d.LAY_CHECKED ? ' checked="checked"' : ''; + fieldStr += ''; + } else if (col.templet) { // 自定义模板 + if (typeof col.templet == 'function') { + fieldStr += col.templet(d); + } else if (typeof col.templet == 'string') { + laytpl($(col.templet).html()).render(d, function (html) { + fieldStr += html; + }); + } + } else if (col.toolbar) { // 工具列 + laytpl($(col.toolbar).html()).render(d, function (html) { + fieldStr += html; + }); + } else if (col.field && d[col.field] != undefined && d[col.field] != null) { // 普通字段 + fieldStr += d[col.field]; + } + var tdStr = ''; + // 图标列处理 + if (index == treeOption.iconIndex) { + // 缩进 + for (var k = 0; k < indentSize; k++) { + tdStr += ''; + } + tdStr += ''; + // 加箭头 + var haveChild = getHaveChild(d, treeOption); + tdStr += (''); + // 加图标 + tdStr += treeOption.getIcon(d); + if (options.tree.onlyIconControl) { + tdStr += ''; + tdStr += ('' + fieldStr + ''); + } else { + tdStr += ('' + fieldStr + ''); + tdStr += ''; + } + } else { + tdStr += fieldStr; + } + if ($td && col.type != 'numbers') { + $td.html(tdStr); + } + var htmlStr = ''); + return htmlStr; + }; + + /** + * 异步加载渲染 + * @param data 父级数据 + * @param $tr 父级dom + */ + TreeTable.prototype.renderBodyAsync = function (d, $tr) { + var that = this; + var options = this.options; + var components = this.getComponents(); + var $tbEmpty = components.$tbEmpty; + var $tbLoading = components.$tbLoading; + // 显示loading + if ($tr) { + $tr.addClass('ew-tree-table-loading'); + $tr.children('td').children('.ew-tree-pack').children('.ew-tree-table-arrow').addClass('layui-anim layui-anim-rotate layui-anim-loop'); + } else { + if (options.data && options.data.length > 0) { + $tbLoading.addClass('ew-loading-float'); + } + $tbLoading.show(); + } + // 请求数据 + options.reqData(d, function (res) { + if (options.tree.isPidData) { + res = treeTb.pidToChildren(res, options.tree.idName, options.tree.pidName, options.tree.childName); + } + that.renderBodyData(res, d, $tr); // 渲染内容 + // 移除loading + if ($tr) { + $tr.removeClass('ew-tree-table-loading'); + $tr.children('td').children('.ew-tree-pack').children('.ew-tree-table-arrow').removeClass('layui-anim layui-anim-rotate layui-anim-loop'); + } else { + $tbLoading.hide(); + $tbLoading.removeClass('ew-loading-float'); + } + // 是否为空 + if ((!res || res.length == 0) && !$tr) { + $tbEmpty.show(); + } + }); + }; + + /** + * 根据数据渲染body + * @param data 数据集合 + * @param option 配置项 + * @param d 父级数据 + * @param $tr 父级dom + */ + TreeTable.prototype.renderBodyData = function (data, d, $tr) { + var that = this; + var options = this.options; + var components = this.getComponents(); + var $view = components.$view; + var $table = components.$table; + var tbFilter = components.tbFilter; + addPidField(data, options.tree, d); // 补充pid字段 + // 更新到数据 + if (d == undefined) { + options.data = data; + } else { + d[options.tree.childName] = data; + } + var indent; + if ($tr) { + indent = parseInt($tr.data('indent')) + 1; + } + var htmlStr = this.renderBody(data, indent); + if ($tr) { + // 移除旧dom + $tr.nextAll('tr').each(function () { + if (parseInt($(this).data('indent')) <= (indent - 1)) { + return false; + } + $(this).remove(); + }); + // 渲染新dom + $tr.after(htmlStr); + $tr.addClass('ew-tree-table-open'); + } else { + $table.children('tbody').html(htmlStr); + } + form.render(null, tbFilter); // 渲染表单元素 + this.renderNumberCol(); // 渲染序号列 + this.checkIndeterminateCB(); // 恢复复选框半选状态 + if ($tr) { + // 更新父级复选框状态 + this.checkParentCB($tr); + $tr.prevAll('tr').each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < (indent - 1)) { + that.checkParentCB($(this)); + indent = tInd + 1; + } + }); + } + this.checkChooseAllCB(); // 联动全选框 + updateFixedTbHead($view); + }; + + /** + * 联动子级复选框状态 + * @param $tr 当前tr的dom + * @param checked + */ + TreeTable.prototype.checkSubCB = function ($tr, checked) { + var that = this; + var components = this.getComponents(); + var cbFilter = components.checkboxFilter; + var indent = -1, $trList; + if ($tr.is('tbody')) { + $trList = $tr.children('tr'); + } else { + indent = parseInt($tr.data('indent')); + $trList = $tr.nextAll('tr') + } + $trList.each(function () { + if (parseInt($(this).data('indent')) <= indent) { + return false; + } + var $cb = $(this).children('td').children('input[name="' + cbFilter + '"]'); + $cb.prop('checked', checked); + if (checked) { + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').addClass('layui-form-checked'); + $cb.next('.layui-form-checkbox').removeClass('ew-form-indeterminate'); + } else { + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').removeClass('layui-form-checked ew-form-indeterminate'); + } + that.update($(this).data('id'), {LAY_CHECKED: checked}); // 同步更新数据 + }); + }; + + /** + * 联动父级复选框状态 + * @param $tr 父级的dom + */ + TreeTable.prototype.checkParentCB = function ($tr) { + var that = this; + var components = this.getComponents(); + var cbFilter = components.checkboxFilter; + var indent = parseInt($tr.data('indent')); + var ckNum = 0, unCkNum = 0; + $tr.nextAll('tr').each(function () { + if (parseInt($(this).data('indent')) <= indent) { + return false; + } + var $cb = $(this).children('td').children('input[name="' + cbFilter + '"]'); + if ($cb.prop('checked')) { + ckNum++; + } else { + unCkNum++; + } + }); + var $cb = $tr.children('td').children('input[name="' + cbFilter + '"]'); + if (ckNum > 0 && unCkNum == 0) { // 全选 + $cb.prop('checked', true); + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').addClass('layui-form-checked'); + $cb.next('.layui-form-checkbox').removeClass('ew-form-indeterminate'); + that.update($tr.data('id'), {LAY_CHECKED: true}); // 同步更新数据 + } else if (ckNum == 0 && unCkNum > 0) { // 全不选 + $cb.prop('checked', false); + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').removeClass('layui-form-checked ew-form-indeterminate'); + that.update($tr.data('id'), {LAY_CHECKED: false}); // 同步更新数据 + } else if (ckNum > 0 && unCkNum > 0) { // 半选 + $cb.prop('checked', true); + $cb.data('indeterminate', 'true'); + $cb.next('.layui-form-checkbox').addClass('layui-form-checked ew-form-indeterminate'); + that.update($tr.data('id'), {LAY_CHECKED: true}); // 同步更新数据 + } + }; + + /** 联动全选复选框 */ + TreeTable.prototype.checkChooseAllCB = function () { + var components = this.getComponents(); + var cbAllFilter = components.cbAllFilter; + var cbFilter = components.checkboxFilter; + var $tbody = components.$table.children('tbody'); + var ckNum = 0, unCkNum = 0; + $tbody.children('tr').each(function () { + var $cb = $(this).children('td').children('input[name="' + cbFilter + '"]'); + if ($cb.prop('checked')) { + ckNum++; + } else { + unCkNum++; + } + }); + var $cb = $('input[lay-filter="' + cbAllFilter + '"]'); + if (ckNum > 0 && unCkNum == 0) { // 全选 + $cb.prop('checked', true); + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').addClass('layui-form-checked'); + $cb.next('.layui-form-checkbox').removeClass('ew-form-indeterminate'); + } else if ((ckNum == 0 && unCkNum > 0) || (ckNum == 0 && unCkNum == 0)) { // 全不选 + $cb.prop('checked', false); + $cb.data('indeterminate', 'false'); + $cb.next('.layui-form-checkbox').removeClass('layui-form-checked ew-form-indeterminate'); + } else if (ckNum > 0 && unCkNum > 0) { // 半选 + $cb.prop('checked', true); + $cb.data('indeterminate', 'true'); + $cb.next('.layui-form-checkbox').addClass('layui-form-checked ew-form-indeterminate'); + } + }; + + /** 填充序号列 */ + TreeTable.prototype.renderNumberCol = function () { + var components = this.getComponents(); + var $tbody = components.$table.children('tbody'); + $tbody.children('tr').each(function (index) { + $(this).children('td').children('.ew-tree-table-numbers').text(index + 1); + }); + }; + + /* 解决form.render之后半选框被重置的问题 */ + TreeTable.prototype.checkIndeterminateCB = function () { + var components = this.getComponents(); + var cbFilter = components.checkboxFilter; + $('input[lay-filter="' + cbFilter + '"]').each(function () { + var $cb = $(this); + if ($cb.data('indeterminate') == 'true' && $cb.prop('checked')) { + $cb.next('.layui-form-checkbox').addClass('ew-form-indeterminate'); + } + }); + }; + + /** + * 搜索数据 + * @param ids 关键字或数据id集合 + */ + TreeTable.prototype.filterData = function (ids) { + var components = this.getComponents(); + var $trList = components.$table.children('tbody').children('tr'); + if (typeof ids == 'string') { // 关键字 + var keyword = ids; + ids = []; + $trList.each(function () { + var id = $(this).data('id'); + $(this).children('td').each(function () { + if ($(this).text().indexOf(keyword) != -1) { + ids.push(id); + return false; + } + }); + }); + } + $trList.addClass('ew-tree-table-filter-hide'); + for (var i = 0; i < ids.length; i++) { + var $tr = $trList.filter('[data-id="' + ids[i] + '"]'); + $tr.removeClass('ew-tree-table-filter-hide'); + // 联动父级 + var indent = parseInt($tr.data('indent')); + $tr.prevAll('tr').each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < indent) { + $(this).removeClass('ew-tree-table-filter-hide'); // 联动父级 + if (!$(this).hasClass('ew-tree-table-open')) { + toggleRow($(this)); + } + indent = tInd; + } + }); + } + }; + + /** 重置搜索 */ + TreeTable.prototype.clearFilter = function () { + var components = this.getComponents(); + var $trList = components.$table.children('tbody').children('tr'); + $trList.removeClass('ew-tree-table-filter-hide'); + }; + + /** 展开指定行 */ + TreeTable.prototype.expand = function (id, cascade) { + var components = this.getComponents(); + var $tr = components.$table.children('tbody').children('tr[data-id="' + id + '"]'); + if (!$tr.hasClass('ew-tree-table-open')) { + $tr.children('td').children('.ew-tree-pack').trigger('click'); + } + if (cascade == false) { + return; + } + // 联动父级 + var indent = parseInt($tr.data('indent')); + $tr.prevAll('tr').each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < indent) { + if (!$(this).hasClass('ew-tree-table-open')) { + $(this).children('td').children('.ew-tree-pack').trigger('click'); + } + indent = tInd; + } + }); + }; + + /** 折叠指定行 */ + TreeTable.prototype.fold = function (id, cascade) { + var components = this.getComponents(); + var $tr = components.$table.children('tbody').children('tr[data-id="' + id + '"]'); + if ($tr.hasClass('ew-tree-table-open')) { + $tr.children('td').children('.ew-tree-pack').trigger('click'); + } + if (cascade == false) { + return; + } + // 联动父级 + var indent = parseInt($tr.data('indent')); + $tr.prevAll('tr').each(function () { + var tInd = parseInt($(this).data('indent')); + if (tInd < indent) { + if ($(this).hasClass('ew-tree-table-open')) { + $(this).children('td').children('.ew-tree-pack').trigger('click'); + } + indent = tInd; + } + }); + }; + + /** 全部展开 */ + TreeTable.prototype.expandAll = function () { + var that = this; + var components = this.getComponents(); + var $trList = components.$table.children('tbody').children('tr'); + $trList.each(function () { + that.expand($(this).data('id'), false); + }); + }; + + /** 全部折叠 */ + TreeTable.prototype.foldAll = function () { + var that = this; + var components = this.getComponents(); + var $trList = components.$table.children('tbody').children('tr'); + $trList.each(function () { + that.fold($(this).data('id'), false); + }); + }; + + /** 获取当前数据 */ + TreeTable.prototype.getData = function () { + return this.options.data; + }; + + /** 重载表格 */ + TreeTable.prototype.reload = function (opt) { + treeTb.render($.extend(this.options, opt)); + }; + + /** 根据id更新数据 */ + TreeTable.prototype.update = function (id, fields) { + var data = getDataById(this.getData(), id, this.options.tree); + $.extend(data, fields); + }; + + /** 根据id删除数据 */ + TreeTable.prototype.del = function (id) { + delDataById(this.getData(), id, this.options.tree); + }; + + /** 获取当前选中行 */ + TreeTable.prototype.checkStatus = function () { + var that = this; + var components = this.getComponents(); + var $table = components.$table; + var checkboxFilter = components.checkboxFilter; + var radioFilter = components.radioFilter; + var list = []; + // 获取单选框选中数据 + var $radio = $table.find('input[name="' + radioFilter + '"]'); + if ($radio.length > 0) { + var id = $radio.filter(':checked').val(); + var d = getDataById(this.getData(), id, this.options.tree); + if (d) { + list.push(d); + } + } else { // 获取复选框数据 + $table.find('input[name="' + checkboxFilter + '"]:checked').each(function () { + var id = $(this).val(); + var d = getDataById(that.getData(), id, that.options.tree); + if (d) { + list.push(d); + } + }); + } + return list; + }; + + /** 设置复/单选框选中 */ + TreeTable.prototype.setChecked = function (ids) { + var components = this.getComponents(); + var $table = components.$table; + var checkboxFilter = components.checkboxFilter; + var radioFilter = components.radioFilter; + var $radio = $table.find('input[name="' + radioFilter + '"]'); + if ($radio.length > 0) { // 开启了单选框 + $radio.each(function () { + if (ids[ids.length - 1] == $(this).val()) { + $(this).next('.layui-form-radio').trigger('click'); + return false; + } + }); + } else { // 开启了复选框 + $table.find('input[name="' + checkboxFilter + '"]').each(function () { + var $cb = $(this); + var value = $cb.val(); + var $layCb = $cb.next('.layui-form-checkbox'); + for (var i = 0; i < ids.length; i++) { + if (value == ids[i]) { + var checked = $cb.prop('checked'); + var indeterminate = $layCb.hasClass('ew-form-indeterminate'); + if (!checked || indeterminate) { + $layCb.trigger('click'); + } + } + } + }); + } + }; + + /** 移除全部选中 */ + TreeTable.prototype.removeAllChecked = function () { + var components = this.getComponents(); + var $table = components.$table; + var checkboxFilter = components.checkboxFilter; + this.checkSubCB($table.children('tbody'), false); + }; + + /** + * 刷新指定父级下的节点 + * @param id 父级id,空则全部刷新 + * @param data 非异步模式替换的数据 + */ + TreeTable.prototype.refresh = function (id, data) { + var components = this.getComponents().$table; + var $table = components.$table; + var d, $tr; + if (id != undefined) { + d = getDataById(this.getData(), id, this.options.tree); + $tr = $table.children('tbody').children('tr[data-id="' + id + '"]'); + } + if (data) { // 数据模式 + components.$tbLoading.addClass('ew-loading-float'); + components.$tbLoading.show(); + this.renderBodyData(data, d, $tr); + components.$tbLoading.hide(); + components.$tbLoading.removeClass('ew-loading-float'); + } else { // 异步模式 + this.renderBodyAsync(d, $tr); + } + }; + + /** 生成表头 */ + function getThead(options) { + var htmlStr = ''; + for (var i = 0; i < options.cols.length; i++) { + var col = options.cols[i]; + htmlStr += ''; + } + + /** 获取列图标 */ + function getIcon(d, treeOption) { + if (getHaveChild(d, treeOption)) { + return ''; + } else { + return ''; + } + } + + /** 折叠/展开行 */ + function toggleRow($tr) { + var indent = parseInt($tr.data('indent')); + var isOpen = $tr.hasClass('ew-tree-table-open'); + if (isOpen) { // 折叠 + $tr.removeClass('ew-tree-table-open'); + $tr.nextAll('tr').each(function () { + if (parseInt($(this).data('indent')) <= indent) { + return false; + } + $(this).addClass('ew-tree-tb-hide'); + }); + } else { // 展开 + $tr.addClass('ew-tree-table-open'); + var hideInd; + $tr.nextAll('tr').each(function () { + var ind = parseInt($(this).data('indent')); + if (ind <= indent) { + return false; + } + if (hideInd != undefined && ind > hideInd) { + return true; + } + $(this).removeClass('ew-tree-tb-hide'); + if (!$(this).hasClass('ew-tree-table-open')) { + hideInd = parseInt($(this).data('indent')); + } else { + hideInd = undefined; + } + }); + } + updateFixedTbHead($tr.parent().parent().parent().parent().parent()); + } + + /** 固定表头减去滚动条 */ + function updateFixedTbHead($view) { + var $group = $view.children('.ew-tree-table-group'); + var $tbBox = $group.children('.ew-tree-table-box'); + var sWidth = $tbBox.width() - $tbBox.prop('clientWidth'); + if (sWidth > 0) { + if (!(device.ie && device.ie < 9)) { + sWidth = sWidth - 0.48; + } + $group.children('.ew-tree-table-head').css('padding-right', sWidth); + } else { + $group.children('.ew-tree-table-head').css('padding-right', 0); + } + } + + // 监听窗口大小改变 + $(window).resize(function () { + $('.ew-tree-table').each(function () { + updateFixedTbHead($(this)); + var $tbBox = $(this).children('.ew-tree-table-group').children('.ew-tree-table-box'); + var full = $tbBox.attr('ew-tree-full'); + if (full && device.ie && device.ie < 10) { + $tbBox.css('height', getPageHeight() - full); + } + }); + }); + + /** 判断是否还有子节点 */ + function getHaveChild(d, treeOption) { + var haveChild = false; + if (d[treeOption.haveChildName] != undefined) { + haveChild = d[treeOption.haveChildName]; + haveChild = haveChild == true || haveChild == 'true'; + } else if (d[treeOption.childName]) { + haveChild = d[treeOption.childName].length > 0; + } + return haveChild; + } + + /** 补充pid字段 */ + function addPidField(data, treeOption, parent) { + for (var i = 0; i < data.length; i++) { + if (parent) { + data[i][treeOption.pidName] = parent[treeOption.idName]; + } + if (data[i][treeOption.childName] && data[i][treeOption.childName].length > 0) { + addPidField(data[i][treeOption.childName], treeOption, data[i]); + } + } + } + + /** 根据id获取数据 */ + function getDataById(data, id, treeOption) { + for (var i = 0; i < data.length; i++) { + if (data[i][treeOption.idName] == id) { + return data[i]; + } + if (data[i][treeOption.childName] && data[i][treeOption.childName].length > 0) { + var d = getDataById(data[i][treeOption.childName], id, treeOption); + if (d != undefined) { + return d; + } + } + } + } + + /** 根据id删除数据 */ + function delDataById(data, id, treeOption) { + for (var i = 0; i < data.length; i++) { + if (data[i][treeOption.idName] == id) { + data.splice(i, 1); + return true; + } + if (data[i][treeOption.childName] && data[i][treeOption.childName].length > 0) { + var rs = delDataById(data[i][treeOption.childName], id, treeOption); + if (rs) { + return true; + } + } + } + } + + /** 获取顶级的pId */ + function getPids(list, idName, pidName) { + var pids = []; + for (var i = 0; i < list.length; i++) { + var hasPid = false; + for (var j = 0; j < list.length; j++) { + if (i != j && list[j][idName] == list[i][pidName]) { + hasPid = true; + } + } + if (!hasPid) { + pids.push(list[i][pidName]); + } + } + return pids; + } + + /** 判断pId是否相等 */ + function pidEquals(pId, pIds) { + if (isClass(pIds) == 'Array') { + for (var i = 0; i < pIds.length; i++) { + if (pId == pIds[i]) { + return true; + } + } + } else { + return pId == pIds; + } + return false; + } + + /** 获取变量类型 */ + function isClass(o) { + if (o === null) + return 'Null'; + if (o === undefined) + return 'Undefined'; + return Object.prototype.toString.call(o).slice(8, -1); + } + + /* 获取浏览器高度 */ + function getPageHeight() { + return document.documentElement.clientHeight || document.body.clientHeight; + } + + /** 对外提供的方法 */ + var treeTb = { + /* 渲染 */ + render: function (options) { + return new TreeTable(options); + }, + /* 事件监听 */ + on: function (events, callback) { + return layui.onevent.call(this, MOD_NAME, events, callback); + }, + /* pid转children形式 */ + pidToChildren: function (data, idName, pidName, childName, pId) { + childName || (childName = 'children'); + var newList = []; + for (var i = 0; i < data.length; i++) { + (pId == undefined) && (pId = getPids(data, idName, pidName)); + if (pidEquals(data[i][pidName], pId)) { + var children = this.pidToChildren(data, idName, pidName, childName, data[i][idName]); + (children.length > 0) && (data[i][childName] = children); + newList.push(data[i]); + } + } + return newList; + } + }; + + exports('treeTable', treeTb); +});