DetailTable_wev8.js
14.2 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(p,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 w=this.uploadDatas={},v=this.viewModel={form:"",table:{name:"",key:"",relatekey:"",formid:-1},props:[],dataShare:{},prefilter:function(){},standalone:!0};function c(a){t.removeClass("out").addClass("in"),n.removeClass("out").addClass("animation in"),u.load("detailtable",function(e,t){n.html(p.replaceI18n(e)),(r=$(".wev-detailtable-innermask",i)).on("click",function(){f()}),n.on("webkitAnimationEnd animationend",function(){n.removeClass("animation")}),p.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(){v.btns=[],v.dataShare.del&&v.btns.push({id:"delete",className:"wev-red-btn delete",text:v.dataShare.del_btn_text||x.DELETE}),v.dataShare.add&&v.btns.push({id:"add",className:"wev-blue-btn add",text:v.dataShare.add_btn_text||x.ADD}),v.columns=[{text:"",index:!0,show:!0}],v.table.name=v.table.name.toLowerCase(),v.table.relatekey=v.table.relatekey.toLowerCase(),v.table.key=v.table.key.toLowerCase(),v.height?v.height=p.toPixel(v.height,"max-height"):v.height="height:auto",v.props.forEach(function(e){var t={};v.standalone&&(e.detailtable.mecid=p.UUID()),t.width=p.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,v.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)),v.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 w[a],m.trigger("calculateColSumEvent")}),$("td.rowindex",d).each(function(e){$("div",$(this)).text(e+1)})})});var o={formid:"detailtable"+v.form,container:i,detailtable:v.table.name,props:v.props,instance:this,prefilter:v.prefilter,standalone:v.standalone};v.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))}),v.dataShare.edit&&d.on("click",".wev-detailtable-content-wrapper tr > td",function(e){var t=$(this),a=t.parent();if(!v.dataShare.del||!t.hasClass("rowindex")){var i={},n=a.data("id"),d=a.data("rowindex");for(var r in v.datas){var l=v.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[v.table.key]=n,$.extend(i,t),h.addOrUpdateRecord(e,d,n),h.updateOrAddRowDataView(t,d),f(),m.trigger("calculateColSumEvent")}},o)),e.stopPropagation(),e.preventDefault()}}),(v.dataShare.edit||v.dataShare.add)&&u.preload("detailtable"),$(window).resize(function(){h.onResetView()}),this.refresh()},this.refresh=function(){var e=this.components.loading;e.setRefs(this.$comp,"wev-refreshing"),e.show();var t=e.hide.bind(e);v.standalone&&p.isArray(v.datas)?h.buildDataTable(v.datas,t):h.loadData(t)},this.checkRequired=function(){var o={},s=[];return v.props.forEach(function(e){if(e.required){var t=(v.table.name+"_"+e.field.name).toLowerCase();o[t]=e}}),Object.keys(w).forEach(function(d){var r=w[d],l=!1;Object.keys(r).forEach(function(n){var e=!1,t=n.split("_rowindex_")[0].toLowerCase(),a=t.replace(v.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 w)$.extend(e,w[t]);return e["detailtablename_"+this.id]=v.table.name,e[v.table.name+"_keyname"]=v.table.key,e[v.table.name+"_relatekey"]=v.table.relatekey,e[v.table.name+"_delids"]=s.join(","),e},this.calculateColSum=function(e){var t=0;for(var a in w){var i=v.table.name+"_"+e+"_rowindex_"+a;for(var n in w[a])n.toLowerCase()==i.toLowerCase()&&(t+=Number(w[a][n]))}return t},this.bindColSumEvent=function(e){m.on("calculateColSumEvent",e)},this.getIndexArray=function(){var e=[];for(var t in w)e.push(t);return e},this.getRowFieldValueByKey=function(e,t){if(w[e])for(var a in w[e])if(a.toLowerCase()==t.toLowerCase())return w[e][a]},this.addRowData=function(e){var t=function(e,t,a,i){a["fieldname_"+e]="",i&&(a[e+"_showvalue"]="")},a={},i={};v.props.forEach(function(e){t(e.field.name,e.detailtable.mectype,a,!1),t(e.field.name,e.detailtable.mectype,i,!0)});var n=h.addRow(a,i),d=m.find("tr[data-rowindex='"+n+"']").index()+1;p.isFunction(e)&&e.call(this,d)},h.getFieldProp=function(e,t){if(w[t]){var a;for(var i in v.props)if(e&&((v.props[i].fieldname||v.props[i].field.name).toLowerCase()==e.toLowerCase()||v.props[i].field.id==e)){a=v.props[i];break}if(a)return a;p.getLabel(5312,"找不到字段",function(e){p.console.error(e)})}else p.getLabel(5305,"索引(#ROWINDEX#)数据不存在",function(e){p.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(),w[a][v.table.name+"_"+e+"_rowindex_"+a]=t,v.datas){var r=v.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)p.getLabel(5331,"找不到字段对应的dom节点:",function(e){p.console.error(e+v.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){var c,f="";(function(){var t=$.Deferred();if(!0===n.items){var e=p.getActionUrl(s,{action:"getOptionDatas",mec_id:n.detailtable.mecid,detailtable:n.detailtable.id},i.pageid);p.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)?"是":"否"):l.html(t);if(o){o.values=t;var u=p.getActionUrl(s,o,this.pageid);p.getJSON(u,function(e){if("FPhoto"==s){var a="";(e.data||[]).forEach(function(e){var t=p.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(),v.datas){var d=v.datas[n];d.indexid==t&&(i=d[a?e+"_showvalue":e]||"")}return i},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){p.isArray(e)&&e.forEach(function(e){v.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&&(w[a][v.table.name+"_"+v.table.key+"_rowindex_"+a]=i,$("tr[data-rowindex='"+a+"']",m).data("id",i))}})})},h.loadData=function(t){var e=v.datas,a=this,i=(new Date).valueOf();if(a.timestamp=i,!v.standalone){var n={action:"getDatas",mec_id:v.id,tablename:v.table.encrypt,relatekey:v.table.relatekey,datasource:v.table.datasource,sqlwhere:v.table.sqlwhere,formid:v.table.formid,canedit:v.dataShare.edit};e=p.getActionUrl(this.type,n,this.pageid)}e&&p.getJSON(e,{},function(e){i==a.timestamp&&h.buildDataTable(e.data,t)})},h.buildDataTable=function(e,t){var r,a={rows:h.convertDatas(e),dataShare:{del:v.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=p.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"]),v.datas=e,v.dataShare.edit||require(["browserHelper"],function(t){$(".wev-browser",m).each(function(){var e=$(this);e.addClass("wev-haslink"),e.on("click",function(){t.openBrowserLink(e.attr("data-value"),e.text(),e.attr("data-type"))})})}),p.isFunction(t)&&t.call(this),this.dataloaded=!0,p.trigger("dataload",this.pageid,this.id)},h.addRow=function(e,t){return!e&&(e={}),!t&&(t={}),++o,t.indexid=o,v.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:v.table.name},relate:{},detailtable:{isA:!0,mecid:"detailtable"+v.form,mectype:"Form"}}),a=p.getInstance(v.form),i=-1;return a?i=a.viewModel.relate.modeid:p.getLabel(5313,"未找到指定id的表单插件:",function(e){p.console.error(e+v.form)}),v.standalone||(t.relate.modeid=i),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[v.table.name+"_"+v.table.key+"_rowindex_"+a]=t[v.table.key],v.columns.forEach(function(e){e.index||(i[v.table.name+"_"+e.fieldname+"_rowindex_"+a]=t[e.fieldname])}),w[a]=i},h.convertDatarow=function(n,e,t){var a={id:n[v.table.key],rowindex:e},d=[{text:t||e,index:!0,show:!0}];return v.columns.forEach(function(e){if(!e.index){var t={},a=e.fieldname,i=n[a+"_showvalue"]||"";t.text=p.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[v.table.name+"_"+v.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_",v.table.name+"_")+"_rowindex_"+t:0==f.indexOf("fieldmecid_")?(m=f.replace("fieldmecid_","fieldmecid_"+v.table.name+"_")+"_"+t,u+="_"+t):m=0==f.indexOf("type_")?f.replace("type_","type_"+v.table.name+"_")+"_"+t:0==f.indexOf("namerule_")?f.replace("namerule_","namerule_"+v.table.name+"_")+"_"+t:f,m&&(i[m]=u))}$.extend(i,n),w[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:v.dataShare.del};var r=p.parseTemplate(d,n),l=$(r);a.length?(l.insertAfter(a),a.remove()):m.append(l)},h.getIgnoreCaseObj=function(t){var a={};return p.isObject(t)&&Object.keys(t).forEach(function(e){a[e.toLowerCase()]=t[e]}),a},h.onResetView=function(){$(".wev-detailtable-content-wrapper",d).width($(".wev-detailtable-view-wrapper>table",d).width())},this.onResetView=function(){h.onResetView()},h.buildDataTable=h.buildDataTable.bind(this),h.loadData=h.loadData.bind(this)})});