Files
jiapu/dist/public/js/lay-module/tableTree/tableEdit.js
T

3 lines
12 KiB
JavaScript

layui.define(["laydate","laytpl","table","layer"],function(V){"use strict";var A="tableEdit",f=layui,w=f.laytpl,l=f.$,B=f.laydate,$=f.table,v=f.layer,z=['<div class="layui-tableEdit-div" style="{{d.style}}">','<ul class="layui-tableEdit-ul">',"{{# if(d.data){ }}","{{# d.data.forEach(function(item){ }}","{{# var selectedClass = d.callbackFn(item) }}",'<li class="{{ selectedClass }}" data-name="{{ item.name }}" data-value="{{ item.value }}">','<div class="layui-unselect layui-form-checkbox" lay-skin="primary"><span>{{ item.value }}</span></div>',"</li>","{{# }); }}","{{# } else { }}","<li>无数据</li>","{{# } }}","</ul>","</div>"].join(""),M=['<div class="layui-tableEdit-div" style="{{d.style}}">','<div class="layui-tableEdit-tpl">',"<ul>","{{# if(d.data){ }}","{{# d.data.forEach(function(item){ }}","{{# var selectedClass = d.callbackFn(item) }}",'<li class="{{ selectedClass }}" data-name="{{ item.name }}" data-value="{{ item.value }}">','<div class="layui-unselect layui-form-checkbox" lay-skin="primary"><span>{{ item.value }}</span><i class="layui-icon layui-icon-ok"></i></div>',"</li>","{{# }); }}","{{# } else { }}","<li>无数据</li>","{{# } }}","</ul>","</div>",'<div style="line-height: 36px;">','<div style="float: left">','<button type="button" event-type="close" class="layui-btn layui-btn-sm layui-btn-primary">关闭</button>',"</div>",'<div style="text-align: right">','<button event-type="confirm" type="button" class="layui-btn layui-btn-sm layui-btn-primary">确定</button>',"</div>","</div>","</div>"].join(""),y=[];y.push(".layui-tableEdit-div{position:absolute;background-color:#fff;font-size:14px;border:1px solid #d2d2d2;z-index:19910908445;max-height: 252px;}"),y.push(".layui-tableEdit-tpl{max-height:216px;overflow-y:auto;}"),y.push(".layui-tableEdit-div li{line-height:36px;padding-left:5px;}"),y.push(".layui-tableEdit-div li:hover{background-color:#f2f2f2;}"),y.push(".layui-tableEdit-selected{background-color:#5FB878;}"),y.push(".layui-tableEdit-checked i{background-color:#60b979!important;}"),y.push(".layui-tableEdit-ul div{padding-left:0px!important;}"),y.push(".layui-tableEdit-input{text-align:center;position:absolute;left:0;bottom:0;width:100%;height:38px;z-index: 19910908;}"),y.push(".layui-tableEdit-add{position: absolute;right: 3px;top: 21px;margin-top: -15px;z-index: 199109084;}"),y.push(".layui-tableEdit-sub{position: absolute;left: 3px;top: 21px;margin-top: -15px;z-index: 199109084;}");var F=document.createElement("style");F.innerHTML=y.join(`
`),document.getElementsByTagName("head")[0].appendChild(F);var T={callbacks:{},verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1[34578]\d{9}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:[/(^[-+]?\d+$)|(^[-+]?\d+\.\d+$)/,"只能填写数字"],date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}},p=function(){var t;return p=function(){return t},p.prototype=this,t=new p,t.constructor=p,t},u=new p,m=function(){u.leaveStat=!1},g=function(){u.leaveStat=!0};document.onclick=function(){u.leaveStat&&u.deleteAll()},p.prototype.date=function(t){var e=this;e.callback=t.callback,e.element=t.element,e.dateType=t.dateType,e.dateType=e.isEmpty(e.dateType)?"datetime":e.dateType;var a=t.element;if(!(l(a).find("input").length>0)){e.deleteAll(),e.leaveStat=!1;var n=l('<input class="layui-input layui-tableEdit-input" type="text">');39-a.offsetHeight>3&&n.css("height","30px"),a.offsetHeight-39>3&&n.css("height","50px"),l(a).append(n),n.focus(),B.render({elem:n[0],type:e.dateType,show:!0,done:function(i,d){e.deleteAll(),e.callback&&e.callback.call(a,i)}}),l("div.layui-laydate").hover(m,g),l(a).hover(m,g),f.stope()}},p.prototype.input=function(t){var e=this;e.callback=t.callback,e.element=t.element,e.oldValue=t.oldValue,e.oldValue=e.oldValue?e.oldValue:"";var a=t.element;if(!(l(a).find("input").length>0)){e.deleteAll(),e.leaveStat=!1;var n=l('<input class="layui-input layui-tableEdit-input" style="z-index: 99999999999" type="text">');39-a.offsetHeight>3&&n.css("height","30px"),a.offsetHeight-39>3&&n.css("height","50px"),n.val(e.oldValue),l(a).append(n),n.focus(),n.click(function(i){f.stope(i)}),n.bind("change",function(i){e.callback.call(e.element,this.value)}),l(a).hover(m,g),f.stope()}},p.prototype.signedInput=function(t){var e=this;e.callback=t.callback,e.element=t.element,e.oldValue=t.oldValue,e.oldValue=e.oldValue?e.oldValue:"";var a=t.element;if(!(l(a).find("input").length>0)){e.deleteAll(),e.leaveStat=!1;var n=a.offsetWidth-49,i=l('<input class="layui-input layui-tableEdit-input" style="left: 24px;width: '+n+'px" type="text">'),d=l('<button type="button" class="layui-btn layui-btn-sm layui-tableEdit-sub"><i class="layui-icon layui-icon-subtraction" style="margin-top:-14px!important;position: absolute;left:2px!important"></i></button>'),s=l('<button type="button" class="layui-btn layui-btn-sm layui-tableEdit-add"><i class="layui-icon layui-icon-addition" style="margin-top:-14px!important;position: absolute;right:-1px!important"></i></button>');39-a.offsetHeight>3&&(i.css("height","30px"),d.css("top","16px"),s.css("top","16px")),a.offsetHeight-39>3&&(i.css("height","50px"),d.css("top","25px"),s.css("top","25px")),i.val(e.oldValue),l(a).append(d),d.find("i").html(""),l(a).append(i),i.focus(),l(a).append(s),s.find("i").html(""),i.click(function(r){f.stope(r)}),i.bind("change",function(r){e.callback.call(e.element,this.value)}),l(a).hover(m,g),f.stope(),l(a).find("button.layui-tableEdit-sub,button.layui-tableEdit-add").bind("click",function(){var r=l(a).find("input.layui-tableEdit-input"),c=r.val();(!c||c.length<=0)&&(c=0),c=parseInt(c),l(this).hasClass("layui-tableEdit-add")?(++c,r.val(c),e.callback.call(e.element,c)):(--c,r.val(c),e.callback.call(e.element,c))})}},p.prototype.isEmpty=function(t){return typeof t=="undefined"||t===null||t.length<=0},p.prototype.register=function(t){var e=this;e.enabled=t.enabled,e.callback=t.callback,e.data=t.data,e.element=t.element,e.selectedData=t.selectedData;var a=e.element;if(!l(a).find("input.layui-tableEdit-input")[0]){e.deleteAll(),e.leaveStat=!1;var n=l('<input class="layui-input layui-tableEdit-input" placeholder="请选择">'),i=l('<div class="layui-tableEdit"></div>'),d=l(a).parents("div.layui-table-body"),s=l(a).parents("div.layui-table-box").eq(0).next();39-a.offsetHeight>3&&n.css("height","30px"),a.offsetHeight-39>3&&n.css("height","50px"),i.append(n),l(a).append(i),n.focus();var r=n[0].getBoundingClientRect().top,c=39-a.offsetHeight>3?30:n[0].offsetHeight,c=a.offsetHeight-39>3?50:c,b=n[0].offsetWidth,h=a.getBoundingClientRect().top,o=d[0].getBoundingClientRect().top,H=s[0].getBoundingClientRect().top,N=d.height(),S=r-o>.8*N,O=S?"top: auto;bottom: "+(c+2)+"px;":"bottom: auto;top: "+(c+2)+"px;";h<o&&(d[0].scrollTop=a.offsetTop);var _=O+"width: "+b+"px;left: 0px;"+(e.enabled?"":"overflow-y: auto;"),I=function(x){if(e.isEmpty(e.selectedData)||e.isEmpty(x.name))return"";var k;if((typeof e.selectedData=="string"||Object.prototype.toString.call(e.selectedData)==="[object Number]")&&(k=x.name+""==e.selectedData+""||x.value+""==e.selectedData+""?"layui-tableEdit-selected"+(e.enabled?" layui-tableEdit-checked":""):""),typeof e.selectedData=="object"&&(k=x.name+""==e.selectedData.name+""?"layui-tableEdit-selected"+(e.enabled?" layui-tableEdit-checked":""):""),Array.isArray(e.selectedData))for(var D=0;D<e.selectedData.length&&(k=x.name+""==e.selectedData[D].name+""?"layui-tableEdit-selected layui-tableEdit-checked":"",!!e.isEmpty(k));D++);return k};i.append(w(e.enabled?M:z).render({data:e.data,style:_,callbackFn:I}));var R=l("div.layui-tableEdit-div")[0];r+R.offsetHeight+c>H&&!S&&(d[0].scrollTop=a.offsetTop),e.events()}},p.prototype.deleteAll=function(){l("div.layui-tableEdit-div,div.layui-tableEdit,div.layui-laydate,input.layui-tableEdit-input,button.layui-tableEdit-sub,button.layui-tableEdit-add").remove(),delete this.leaveStat},p.prototype.events=function(){var t=this,e=function(i){l("div.layui-tableEdit-div li").each(function(){t.isEmpty(i)||l(this).data("value").indexOf(i)>-1?l(this).show():l(this).hide()})},a=function(){var i=l("div.layui-tableEdit-div li");i.unbind("click"),i.bind("click",function(d){f.stope(d),t.enabled?l(this).hasClass("layui-tableEdit-checked")?(l(this).removeClass("layui-tableEdit-checked"),l(this).removeClass("layui-tableEdit-selected")):l(this).addClass("layui-tableEdit-checked"):(t.deleteAll(),t.callback&&t.callback.call(t.element,{name:l(this).data("name"),value:l(this).data("value")}))})},n=function(){l("div.layui-tableEdit-div button").bind("click",function(){var i=l(this).attr("event-type"),d=this,s=new Array;i==="close"&&u.deleteAll(),i==="confirm"&&(l("div.layui-tableEdit-div li").each(function(r){l(this).hasClass("layui-tableEdit-checked")&&s.push({name:l(this).data("name"),value:l(this).data("value")})}),t.deleteAll(),t.callback&&t.callback.call(t.element,s))})};l(t.element).find("input.layui-tableEdit-input").bind("input propertychange",function(){e(this.value)}),t.enabled?(a(),n()):a(),l(t.element).hover(m,g)};var E=function(t){this.config={colsConfig:{}},this.parseCols(t)};E.prototype.parseCols=function(t){var e=this;t.forEach(function(a){a.forEach(function(n){n.config&&(e.config.colsConfig[n.field]=n.config)})})},E.prototype.on=function(t,e){var a=this;a.config.event=t,a.config.callback=e,$.on(a.config.event,function(n){var i=this,d=l(i).data("field"),s=a.config.colsConfig[d];if(!s){a.config.callback.call(i,n);return}n.field=d;var r=function(o){if(!(s.verify&&!a.verify(o,s.verify,this))&&(n.value=Array.isArray(o)?o.length>0?o:[{name:"",value:""}]:o,a.config.callback.call(i,n),!u.isEmpty(s.cascadeSelectField))){var H=l(this.parentNode).find("td[data-field='"+s.cascadeSelectField+"']");l(H).attr("cascadeSelect-data",JSON.stringify({data:o,field:d}))}},c=l(this).attr("cascadeSelect-data");if(u.isEmpty(c))s.type==="select"?u.register({data:s.data,element:i,enabled:s.enabled,selectedData:n.data[d],callback:r}):s.type==="date"?u.date({dateType:s.dateType,element:i,callback:r}):s.type==="input"?u.input({element:i,oldValue:n.data[d],callback:r}):s.type==="signedInput"?u.signedInput({element:i,oldValue:n.data[d],callback:r}):a.config.callback.call(i,n);else{if(s.type==="date")return;var b=l(i).parents("div.layui-table-view").eq(0).prev().attr("lay-filter"),h=C.callbackFn.call(i,"clickBefore("+b+")",JSON.parse(c));u.isEmpty(h)?C.on("async("+b+")",function(o){u.register({data:o.data,element:i,enabled:o.enabled,selectedData:n.data[d],callback:r})}):u.register({data:h.data,element:i,enabled:h.enabled,selectedData:n.data[d],callback:r})}})},E.prototype.verify=function(t,e,a){var n=T.verify[e.type],i=e.msg;if(i=i||(n?n[1]:"必填项不能为空"),u.isEmpty(t))return v.tips(i,a,{tipsMore:!0}),!1;if(Array.isArray(t)&&t.length<=0)return v.tips(i,a,{tipsMore:!0}),!1;if(typeof t=="object"&&u.isEmpty(t.name)||t.name==="undefined")return v.tips(i,a,{tipsMore:!0}),!1;if(!n&&!e.regx)return!0;if(e.regx){if(typeof e.regx=="function")return e.regx(t)?!0:(v.tips(i,a,{tipsMore:!0}),!1);if(typeof e.regx=="string"){var d=new RegExp(e.regx);return d.test(t)?!0:(v.tips(i,a,{tipsMore:!0}),!1)}return e.regx.test(t)?!0:(v.tips(i,a,{tipsMore:!0}),!1)}return n[0].test(t)?!0:(v.tips(i,a,{tipsMore:!0}),!1)},E.prototype.submitValidate=function(t){var e=this,a=[];if(!t||u.isEmpty(t.verifyKey)||u.isEmpty(t.data)||u.isEmpty(t.elem))return a;var n=l(t.elem).next().find("div.layui-table-box div.layui-table-body tr");return t.data.forEach(function(i){for(var d in i){var s=e.config.colsConfig[d];if(!(!s||!s.verify)){var r=s.verify,c=n.find('td[data-field="'+t.verifyKey+'"]'),b;if(c.each(function(){var o=l(this).find("div.layui-table-cell").text();o+""==i[t.verifyKey]+""&&(b=l(this))}),!!b){var h=b.parent().children('td[data-field="'+d+'"]');e.verify(i[d],r,h)||a.push(h[0])}}}}),a};var C={aopObj:function(t){return new E(t)},on:function(t,e){var a=t.match(/\((.*)\)$/),n=a?t.replace(a[0],"")+"_"+a[1]:t;T.callbacks[A+"_"+n]=e},callbackFn:function(t,e){var a=t.match(/\((.*)\)$/),n=a?t.replace(a[0],"")+"_"+a[1]:t,i=A+"_"+n,d=T.callbacks[i];if(d)return d.call(this,e)}};C.on("tableEdit(getEntity)",function(){return u}),V(A,C)});