DetailTable_wev8.js 14.7 KB
define("DetailTable_html",function(){return'<div id="NMEC_${id}" class="wev-comp-${compType}" data-form="${form}">\t<div class="wev-detailtable-btn-container wev-clearfix">\t\t{@each btns as btn}\t\t\t<button type="button" class="wev-btn ${btn.className}">$${btn.text}</button>\t\t{@/each}\t</div>\t<div class="wev-detailtable-container">\t\t<div class="wev-detailtable-view-wrapper">\t\t\t<table>\t\t\t\t<thead>\t\t\t\t\t<tr>\t\t\t\t\t\t{@each columns as column}\t\t\t\t\t\t{@if column.show}\t\t\t\t\t\t<th style="${column.width}">$${column.text}</th>\t\t\t\t\t\t{@/if}\t\t\t\t\t\t{@/each} \t\t\t\t\t</tr>\t\t\t\t</thead>\t\t\t</table>\t\t\t$${loading.content}\t\t\t<div class="wev-detailtable-content-wrapper" style="${height}">\t\t\t\t<table>\t\t\t\t\t<tbody>\t\t\t\t\t\t\t\t\t\t\t</tbody>\t\t\t\t</table>\t\t\t</div>\t\t</div>\t</div></div>'}),define(["mUtil","Component","mService","wev-loading","i18n"],function(v,a,u,b,x){return Mobile_NS.calculateColSum=function(e){if(e&&e.match(/(\w+)\.(\w+)/)){var t=e.match(/(\w+)\.(\w+)/),a=t[1].toLowerCase();return require("mUtil").getDetailTableInstance(a).calculateColSum(t[2])}},Mobile_NS.addDetailTableRow=function(e,t){require("mUtil").getDetailTableInstance(e).addRowData(t)},a.init(function(e){var d,i,n,t,r,m,l,h={},s=[],o=1;a.super(this,e),this.type="DetailTable",this.tpl=this.type+"_html",this.css=this.type+"_css",this.dataload=!0,this.components={loading:new b({delay:300,animation:1})},this.dataloaded=!1;var p=this.uploadDatas={},w=this.viewModel={form:"",table:{name:"",key:"",relatekey:"",formid:-1},props:[],datas:[],dataShare:{},prefilter:function(){},standalone:!0,internalParam:{},triggers:{}};function c(a){t.removeClass("out").addClass("in"),n.removeClass("out").addClass("animation in"),u.load("detailtable",function(e,t){n.html(v.replaceI18n(e)),(r=$(".wev-detailtable-innermask",i)).on("click",function(){f()}),n.on("webkitAnimationEnd animationend",function(){n.removeClass("animation")}),v.unload(l),t.mounted(n,a)})}function f(){t.removeClass("in").addClass("out"),r.removeClass("in").addClass("out"),n.removeClass("in").addClass("out")}this.beforeMount=function(){w.btns=[],w.dataShare.del&&w.btns.push({id:"delete",className:"wev-red-btn delete",text:w.dataShare.del_btn_text||x.DELETE}),w.dataShare.add&&w.btns.push({id:"add",className:"wev-blue-btn add",text:w.dataShare.add_btn_text||x.ADD}),w.columns=[{text:"",index:!0,show:!0}],w.table.name=w.table.name.toLowerCase(),w.table.relatekey=w.table.relatekey.toLowerCase(),w.table.key=w.table.key.toLowerCase(),w.height?w.height=v.toPixel(w.height,"max-height"):w.height="height:auto",w.props.forEach(function(e){var t={};w.standalone&&(e.detailtable.mecid=v.UUID()),t.width=v.toPixel(e.detailtable.width||100,"width"),t.text=e.field.label,t.fieldname=e.field.name.toLowerCase(),t.fieldid=e.field.id,t.show="FHidden"!==e.detailtable.mectype,w.columns.push(t)})},this.mounted=function(){d=this.$comp,i=this.$container,m=d.find(".wev-detailtable-content-wrapper > table > tbody"),l=this.pageid,n=$(".wev-detailtable-page",i),t=$(".wev-detailtable-mask",i),0==n.length&&(n=$('<div class="wev-detailtable-page out"></div>'),t=$('<div class="wev-detailtable-mask out"></div>'),i.append(t).append(n)),w.dataShare.del&&d.on("click","td.rowindex",function(e){$(this).parent().toggleClass("checked")}).on("click",".wev-btn.delete",function(e){var t=$("tr.checked",d);t.length&&Mobile_NS.confirm(x.CONFIRM_DEL_DATA,function(){t.each(function(){var e=$(this),t=e.data("id"),a=e.data("rowindex");t&&s.push(t),e.remove(),delete p[a],m.trigger("calculateColSumEvent")}),$("td.rowindex",d).each(function(e){$("div",$(this)).text(e+1)})})});var o={formid:"detailtable"+w.form,container:i,detailtable:w.table.name,props:w.props,instance:this,prefilter:w.prefilter,standalone:w.standalone};w.dataShare.add&&d.on("click",".wev-btn.add",function(){c($.extend({formmec:h.createFormMecParam({detailtable:{add:!0}}),optype:"add",success:function(e,t){h.addRow(e,t),f()}},o))}),w.dataShare.edit&&d.on("click",".wev-detailtable-content-wrapper tr > td",function(e){var t=$(this),a=t.parent();if(!w.dataShare.del||!t.hasClass("rowindex")){var i={},n=a.data("id"),d=a.data("rowindex");for(var r in w.datas){var l=w.datas[r];if(l.indexid==d){i=l;break}}c($.extend({formmec:h.createFormMecParam({detailtable:{add:!1}}),optype:"edit",datamap:i,success:function(e,t){t[w.table.key]=n,$.extend(i,t),h.addOrUpdateRecord(e,d,n),h.updateOrAddRowDataView(t,d),f(),m.trigger("calculateColSumEvent")}},o)),e.stopPropagation(),e.preventDefault()}}),(w.dataShare.edit||w.dataShare.add)&&u.preload("detailtable"),"PC"==v.getOSType()&&$(window).off("resize.detailTable").on("resize.detailTable",function(){h.onResetView()}),this.refresh()},this.refresh=function(){if(!$p("billid",this.pageid)||w.standalone&&v.isArray(w.datas))h.buildDataTable(w.datas);else{var e=this.components.loading;e.setRefs(this.$comp,"wev-refreshing"),e.show();var t=e.hide.bind(e);h.loadData(t)}},this.checkRequired=function(){var o={},s=[];return w.props.forEach(function(e){if(e.required){var t=(w.table.name+"_"+e.field.name).toLowerCase();o[t]=e}}),Object.keys(p).forEach(function(d){var r=p[d],l=!1;Object.keys(r).forEach(function(n){var e=!1,t=n.split("_rowindex_")[0].toLowerCase(),a=t.replace(w.table.name.toLowerCase()+"_",""),i=o[t];i&&!function(e,t){var a=!1;if("FFile"==t.detailtable.mectype){var i=t.detailtable.mecid;Object.keys(e).every(function(e){return-1==e.indexOf(i)||!(a=!0)})}return a||""!=e[n]}(r,i)&&(-1==s.indexOf(i.field.label)&&s.push(i.field.label),e=l=!0),m.find("tr[data-rowindex='"+d+"']>td>div[data-fieldname='"+a+"']").parent()[e?"addClass":"removeClass"]("required")}),m.children("tr[data-rowindex='"+d+"']")[l?"addClass":"removeClass"]("wev-required-remind")}),s.join(",")},this.reset=function(){},this.getData=function(){var e={};for(var t in p)$.extend(e,p[t]);return e["detailtablename_"+this.id]=w.table.name,e[w.table.name+"_keyname"]=w.table.key,e[w.table.name+"_relatekey"]=w.table.relatekey,e[w.table.name+"_delids"]=s.join(","),e},this.calculateColSum=function(e){var t=0;for(var a in p){var i=w.table.name+"_"+e+"_rowindex_"+a;for(var n in p[a])n.toLowerCase()==i.toLowerCase()&&(t+=Number(p[a][n]))}return t},this.bindColSumEvent=function(e){m.on("calculateColSumEvent",e)},this.getIndexArray=function(){var e=[];for(var t in p)e.push(t);return e},this.getRowFieldValueByKey=function(e,t){if(p[e])for(var a in p[e])if(a.toLowerCase()==t.toLowerCase())return p[e][a]},this.addRowData=function(d){var r=this,e=function(){var t=function(e,t,a,i){a["fieldname_"+e]="",i&&(a[e+"_showvalue"]="")},a={},i={};w.props.forEach(function(e){t(e.field.name,e.detailtable.mectype,a,!1),t(e.field.name,e.detailtable.mectype,i,!0)});var e=h.addRow(a,i),n=m.find("tr[data-rowindex='"+e+"']").index()+1;v.isFunction(d)&&d.call(r,n)};this.dataloaded?e():v.pluginLoad(this.pageid,this.id,function(){e()})},h.getFieldProp=function(e,t){if(p[t]){var a;for(var i in w.props)if(e&&((w.props[i].fieldname||w.props[i].field.name).toLowerCase()==e.toLowerCase()||w.props[i].field.id==e)){a=w.props[i];break}if(a)return a;v.getLabel(5312,"找不到字段",function(e){v.console.error(e)})}else v.getLabel(5305,"索引(#ROWINDEX#)数据不存在",function(e){v.console.error(e.replace("#ROWINDEX#",t))})},h.getFileClassName=function(e,t){return~["jpg","jpeg","png","gif","bmp"].indexOf(t)?e+=" wev-pic-file":"doc"==t||"docx"==t?e+=" wev-word-file":"xls"==t||"xlsx"==t?e+=" wev-excel-file":"pdf"==t?e+=" wev-pdf-file":"htm"==t||"html"==t?e+=" wev-html-file":"ppt"!=t&&"pptx"!=t||(e+=" wev-ppt-file"),e},this.setValue=function(e,t,a){var i=this;if(void 0!==t){a=h.transferToRealRowindex(a);var n=h.getFieldProp(e,a);if(n)for(var d in e=n.field.name.toLowerCase(),p[a][w.table.name+"_"+e+"_rowindex_"+a]=t,w.datas){var r=w.datas[d];if(r.indexid==a){r[e]=t;var l=$("tr[data-rowindex='"+a+"'] > td > div[data-fieldname='"+e+"']",m);if(0==l.length)v.getLabel(5331,"找不到字段对应的dom节点:",function(e){v.console.error(e+w.form)});else{var o,s=n.detailtable.mectype;if("FBrowser"==s)o={action:"parseValues",typeid:n.browser.typeid,identifie:n.browser.identifie};else if("FFile"==s)o={action:"parseFiles"};else if("FPhoto"==s)o={action:"parsePhotos"};else if("FSelect"==s||"FCheckbox"==s){var c,f="";(function(){var t=$.Deferred();if(!0===n.items){var e=v.getActionUrl(s,{action:"getOptionDatas",mec_id:n.detailtable.mecid,detailtable:n.detailtable.id},i.pageid);v.getJSON(e,function(e){c=e.datas,t.resolve()})}else c=n.items||[],t.resolve();return t})().then(function(){for(var e in c)if(c[e].value==t){f=c[e].name;break}l.html(f)})}else"FCheck"==s?l.html(Number(t)?"是":"否"):(t&&"int"==n.field.type?(t=Number(t).toFixed(0),isNaN(t)&&(t="")):t&&"text"==n.field.type&&(t=t.replaceAll(" ","&nbsp;")),l.html(t));if(o){o.values=t;var u=v.getActionUrl(s,o,this.pageid);v.getJSON(u,function(e){if("FPhoto"==s){var a="";(e.data||[]).forEach(function(e){var t=v.getAttachUrl(e);a+='<img class="wev-img" src="'+t+'"/>'}),l.html('<div class="wev-img-wrapper">'+a+"</div>")}else"FFile"==s?(a="",(e.data||[]).forEach(function(e){a+='<li class="'+h.getFileClassName("wev-file",e.suffix)+'"><span>'+e.name+"("+e.size+")</span></li>"}),l.html('<ul class="wev-file-wrapper">'+a+"</ul>")):l.html(e.data)})}}break}}}},h.getValue=function(e,t,a){var i="";if(h.getFieldProp(e,t))for(var n in e=e.toLowerCase(),w.datas){var d=w.datas[n];d.indexid==t&&(i=d[a?e+"_showvalue":e]||"")}return i},this.getLastRowIndex=function(){return $("#NMEC_"+w.id+" .wev-detailtable-content-wrapper table tbody tr").last().attr("data-rowindex")},this.setTriggers=function(e){w.triggers=v.isObject(e)?e:{}},h.transferToRealRowindex=function(e){return m.children().eq(e-1).data("rowindex")},this.getValue=function(e,t){return t=h.transferToRealRowindex(t),h.getValue(e,t,!1)},this.text=function(e,t){return t=h.transferToRealRowindex(t),h.getValue(e,t,!0)},this.afterSubmit=function(e){v.isArray(e)&&e.forEach(function(e){w.table.name.toLowerCase()==e.tablename.toLowerCase()&&(e.detailids||[]).forEach(function(e){var t=e.split("_SPLIT_");if(1<t.length){var a=t[0],i=t[1];i&&(p[a][w.table.name+"_"+w.table.key+"_rowindex_"+a]=i,$("tr[data-rowindex='"+a+"']",m).data("id",i))}})})},h.loadData=function(t){var e=w.datas,a=this,i=(new Date).valueOf();if(a.timestamp=i,!w.standalone){var n={action:"getDatas",mec_id:w.id,tablename:w.table.encrypt,relatekey:w.table.relatekey,key:w.table.key,datasource:w.table.datasource,sqlwhere:w.table.sqlwhere,formid:w.table.formid,modelid:w.table.modeid,canedit:w.dataShare.edit};e=v.getActionUrl(this.type,n,this.pageid)}e&&v.getJSON(e,w.internalParam,function(e){i==a.timestamp&&h.buildDataTable(e.data,t)})},h.buildDataTable=function(e,t){var r,a={rows:h.convertDatas(e),dataShare:{del:w.dataShare.del}},i=["{@each rows as row}",'<tr data-id="${row.id}" data-rowindex="${row.rowindex}">',"{@each row.columns as column}","{@if column.show}",'<td style="${column.width}" {@if column.index}class="rowindex"{@/if}>','<div data-fieldname="${column.fieldname}" data-fieldid="${column.fieldid}">$${column.text}</div>',"{@if column.index && dataShare.del}<i></i>{@/if}","</td>","{@/if}","{@/each}","</tr>","{@/each}"].join(""),n=v.parseTemplate(i,a);m.html(n),r=[],$(".wev-detailtable-content-wrapper>table>tbody>tr",d).first().children("td").each(function(){var e=$(this).width();r.push(e)}),$(".wev-detailtable-view-wrapper>table>thead>tr",d).first().children("th").each(function(e){var t=$(this),a=r[e];if(a){var i=t.width();if(a!=i){var n=function(e){var t=e.css("padding-left")||"";t=t.replace("px",""),t=parseInt(t)||0;var a=e.css("padding-right")||"";return a=a.replace("px",""),a=parseInt(a)||0,t+a}(t),d=a-n;t.css("width",d+"px")}}}),h.onResetView(),require(["lazyImgHelper"]),w.datas=e,w.dataShare.edit&&m.find(".text-haslink").removeClass("text-haslink"),v.isFunction(t)&&t.call(this),this.dataloaded=!0,v.trigger("dataload",this.pageid,this.id)},h.addRow=function(e,t){return!e&&(e={}),!t&&(t={}),++o,t.indexid=o,w.datas.push(t),h.addOrUpdateRecord(e,o),h.updateOrAddRowDataView(t,o),m.trigger("calculateColSumEvent"),o},h.createFormMecParam=function(e){var t=$.extend(!0,e||{},{table:{name:w.table.name},relate:{},detailtable:{isA:!0,mecid:"detailtable"+w.form,mectype:"Form"}}),a=v.getInstance(w.form),i=-1,n="";return a?(i=a.viewModel.relate.modeid,n=a.viewModel.empowStr||""):v.getLabel(5313,"未找到指定id的表单插件:",function(e){v.console.error(e+w.form)}),w.standalone||(t.relate.modeid=i,t.empowStr=n),t},h.convertDatas=function(e){var a=[];return e.forEach(function(e,t){o=++t,e.indexid=t,h.convertUploadrow(e,t),a.push(h.convertDatarow(e,t))}),a},h.convertUploadrow=function(t,a){var i={};i[w.table.name+"_"+w.table.key+"_rowindex_"+a]=t[w.table.key],w.columns.forEach(function(e){e.index||(i[w.table.name+"_"+e.fieldname+"_rowindex_"+a]=t[e.fieldname])}),p[a]=i},h.convertDatarow=function(n,e,t){var a={id:n[w.table.key],rowindex:e},d=[{text:t||e,index:!0,show:!0}];return w.columns.forEach(function(e){if(!e.index){var t={},a=e.fieldname,i=n[a+"_showvalue"]||"";t.text=v.replaceAttachUrl(i),t.width=e.width,t.fieldname=e.fieldname.toLowerCase(),t.fieldid=e.fieldid,t.show=e.show,d.push(t)}}),a.columns=d,a},h.addOrUpdateRecord=function(e,t,a){e=h.getIgnoreCaseObj(e);var i={},n={};for(var d in a&&(i[w.table.name+"_"+w.table.key+"_rowindex_"+t]=a),e)if(0==d.indexOf("fieldmecid_")){var r=e[d],l=r+"_"+t,o=new RegExp(r,"i"),s=new RegExp(l,"i");for(var c in e)o.test(c)&&!s.test(c)&&(n[c.replace(o,l)]=e[c])}for(var f in e){var u=e[f],m="";0!=f.indexOf("file")&&(0==f.indexOf("fieldname_")?m=f.replace("fieldname_",w.table.name+"_")+"_rowindex_"+t:0==f.indexOf("fieldmecid_")?(m=f.replace("fieldmecid_","fieldmecid_"+w.table.name+"_")+"_"+t,u+="_"+t):m=0==f.indexOf("type_")?f.replace("type_","type_"+w.table.name+"_")+"_"+t:0==f.indexOf("namerule_")?f.replace("namerule_","namerule_"+w.table.name+"_")+"_"+t:f,m&&(i[m]=u))}$.extend(i,n),p[t]=i},h.updateOrAddRowDataView=function(e,t){e=h.getIgnoreCaseObj(e);var a=$("tr[data-rowindex='"+t+"']",m),i="";i=a.length?$(".rowindex > div",a).text():m.children("tr").length+1;var n=h.convertDatarow(e,t,i),d=['<tr data-id="${id}" data-rowindex="${rowindex}">',"{@each columns as column}","{@if column.show}",'<td style="${column.width}" {@if column.index}class="rowindex"{@/if}>','<div data-fieldname="${column.fieldname}" data-fieldid="${column.fieldid}">$${column.text}</div>',"{@if column.index && dataShare.del}<i></i>{@/if}","</td>","{@/if}","{@/each}","</tr>"].join("");n.dataShare={del:w.dataShare.del};var r=v.parseTemplate(d,n),l=$(r);a.length?(l.insertAfter(a),a.remove()):m.append(l)},h.getIgnoreCaseObj=function(t){var a={};return v.isObject(t)&&Object.keys(t).forEach(function(e){a[e.toLowerCase()]=t[e]}),a},h.onResetView=function(){var e=$(".wev-detailtable-view-wrapper>table",d).width();e&&$(".wev-detailtable-content-wrapper",d).width(e)},this.onResetView=function(){h.onResetView()},h.buildDataTable=h.buildDataTable.bind(this),h.loadData=h.loadData.bind(this)})});