| 1 |
- MWF.xDesktop.requireApp("Template","MDomItem",null,false);var MGrid=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default",isNew:false,isEdited:false,showNotEmptyFlag:true,verifyType:"batch",itemTemplate:null,objectId:"",hasSequence:true,hasOperation:false,isCreateTh:true,containerIsTable:false,isCreateTrOnNull:true,minTrCount:0,maxTrCount:0,tableAttributes:null,thAttributes:null,tdAttributes:null,tableClass:"formTable",thClass:"formTableTitle",tdClass:"formTableValue",thAlign:"center",tdAlign:"left",sequenceClass:"formTableSequence",addActionTdClass:"formTableAddTd",removeActionTdClass:"formTableRemoveTd",lp:{remove:"",add:""}},initialize:function(t,e,i,s,n){this.setOptions(i);this.path="/x_component_Template/$MGrid/";this.cssPath="/x_component_Template/$MGrid/"+this.options.style+"/css.wcss";this._loadCss();if(n){this.css=Object.merge(this.css,n)}this.app=s;this.container=$(t);this.data=e;this.isSourceDataEmpty=false;if(!this.data||this.data==""){this.isSourceDataEmpty=true;this.data=[{}]}this.itemTemplate=this.options.itemTemplate;this.items=null;this.th=null;this.trIndex=0;this.trList=[];this.trObjs=null;this.trObjs_removed=null;this.trObjs_new=null;this.thTemplate=null;this.trTemplate=null;this.valSeparator=/,|;|\^\^|\|/g},load:function(){this.fireEvent("queryLoad");for(var t in this.itemTemplate){if(!this.itemTemplate[t]["name"]){this.itemTemplate[t]["name"]=t}this.itemTemplate[t]["key"]=t}var e={};for(var t in this.itemTemplate){if(t!=this.itemTemplate[t]["name"]){e[this.itemTemplate[t]["name"]]=this.itemTemplate[t]}}for(var t in e){this.itemTemplate[t]=e[t]}this.createTable(this.itemTemplate);this.createHead(this.itemTemplate);this.trObjs={};this.trObjs_removed={};this.trObjs_new={};this.trList=[];this.options.isEdited||this.options.isNew?this.loadEdit():this.loadRead();this.fireEvent("postLoad",[this])},setTrTemplate:function(t){if(typeOf(t)=="string"){this.trTemplate=this.string2DOM(t)[0]}else{this.trTemplate=t}},setThTemplate:function(t){if(typeOf(t)=="string"){this.thTemplate=this.string2DOM(t)[0]}else{this.thTemplate=t}},loadEdit:function(){if(!this.isSourceDataEmpty){if(typeOf(this.data)!="array"){this.data=[this.data]}for(var t=0;t<this.data.length;t++){var e=this.data[t];var i=this.itemTemplate;for(var s in e){if(i[s]){i[s].value=e[s]}}this.createTr(i,false,null,e)}for(var s in this.itemTemplate){this.itemTemplate[s].value=""}}else if(this.options.isCreateTrOnNull){this.createTr(this.itemTemplate,true)}},loadRead:function(){if(!this.isSourceDataEmpty){if(typeOf(this.data)!="array"){this.data=[this.data]}for(var t=0;t<this.data.length;t++){var e=this.data[t];var i=this.itemTemplate;for(var s in e){if(i[s]){i[s].value=e[s]}}this.createTr_read(i)}}else if(this.options.isCreateTrOnNull){this.createTr_read(this.itemTemplate)}},createTable:function(i){if(this.options.containerIsTable){this.table=this.container;var t=this.table.getElements("[lable]");t.each(function(t){var e=i[t.get("lable")];if(!e)return;if(e.text)t.set("text",e.text)});this.fireEvent("postCreateTable",[this])}else{var e={};if(this.options.tableClass&&this.css[this.options.tableClass])e=this.css[this.options.tableClass];var s=this.options.tableAttributes||{};this.table=new Element("table",{styles:e}).inject(this.container);this.table.set(s);this.fireEvent("postCreateTable",[this])}},createTr_read:function(t){var e=this;this.trIndex++;if(this.trTemplate){this.createTr_read_byTemplate(t)}else{this.createTr_read_noTemplate(t)}},createTr_read_byTemplate:function(n){var t=Object.clone(this.trTemplate);t.set("data-id","_"+this.trIndex);var e=t.getElements("[lable]");var i=t.getElements("[item]");var s=t.getElements("[sequence]");e.each(function(t){var e=n[t.get("lable")];if(!e)return;if(e.text)t.set("text",e.text)});i.each(function(t){var e=n[t.get("item")];if(!e)return;var i=e.value?e.value:"";if(e.selectValue&&e.selectText){var s=this.replaceText(i.replace(/\n/g,"<br/>"),e.selectValue,e.selectText);i=s.join(",")}else{i=i.replace(/\n/g,"<br/>").replace(this.valSeparator,",")}t.set("html",i)}.bind(this));s.set("text",this.trIndex)},createTr_read_noTemplate:function(t){var e=new Element("tr",{"data-id":"_"+this.trIndex});if(this.options.hasSequence){var i=new Element("td",{align:"center",text:this.trIndex}).inject(e);if(this.options.sequenceClass&&this.css[this.options.sequenceClass])i.setStyles(this.css[this.options.sequenceClass])}var s={};if(this.options.tdAlign)s.align=this.options.tdAlign;var n=1;for(var a in t){var r={};if(this.options.tdAttributes&&this.options.tdAttributes["_"+n]){r=this.options.tdAttributes["_"+n]}var o=t[a];var h=o.value||"";if(o.selectValue&&o.selectText){var l=this.replaceText(h.replace(/\n/g,"<br/>"),o.selectValue,o.selectText);h=l.join(",")}else{h=h.replace(/\n/g,"<br/>").replace(this.valSeparator,",")}var i=new Element("td",r).inject(e);i.set("text",h);if(this.options.tdAlign)i.set("align",this.options.tdAlign);if(this.options.tdClass&&this.css[this.options.tdClass])i.setStyles(this.css[this.options.tdClass]);n++}e.inject(this.table)},createHead:function(t){if(!this.options.isCreateTh)return;if(this.thTemplate){this.createHead_byTemplate(t)}else{this.createHead_noTemplate(t)}},createHead_byTemplate:function(i){var t=this.tableHead=this.thTemplate;var e=t.getElements("[lable]");e.each(function(t){var e=i[t.get("lable")];if(!e)return;if(e.text)t.set("text",e.text)});if(this.options.hasOperation&&this.options.isEdited){var s=t.getElement("[button_add]");this.createAddButton(s)}t.inject(this.table)},createHead_noTemplate:function(t){var e=this.tableHead=new Element("tr");var i=this.options.thAlign==""?{}:{align:this.options.thAlign};var s=this.options.thClass&&this.css[this.options.thClass]?this.css[this.options.thClass]:{};if(this.options.hasSequence){var n=new Element("th",{text:"序号"}).inject(e);n.set(i);n.setStyles(s)}var a=1;for(var r in this.itemTemplate){var o={};if(this.options.thAttributes&&this.options.thAttributes["_"+a]){o=this.options.thAttributes["_"+a]}var n=new Element("th").inject(e);if(this.options.showNotEmptyFlag&&this.itemTemplate[r].notEmpty){new Element("span",{styles:{color:"red",text:"*"}}).inject(n)}n.set(i);n.setStyles(s);if(this.itemTemplate[r].text)n.set("text",this.itemTemplate[r].text);a++}if(this.options.hasOperation&&this.options.isEdited){var n=new Element("th",{align:"center",styles:{width:"24px",styles:{"text-align":"center"}}}).inject(e);if(this.options.addActionTdClass&&this.css[this.options.addActionTdClass])n.setStyles(this.css[this.options.addActionTdClass]);this.createAddButton(n)}e.inject(this.table);this.fireEvent("postCreateHead",[e])},createAddButton:function(t){var e=new Element("div",{title:"添加"}).inject(t);if(this.options.lp.add)e.set("text",this.options.lp.add);if(this.css.actionAdd)e.setStyles(this.css.actionAdd);e.addEvent("click",function(t){this.fireEvent("queryAddTr");this.createTr(this.itemTemplate,true);this.fireEvent("postAddTr")}.bind(this));if(this.css.actionAdd&&this.css.actionAdd_over){e.addEvents({mouseover:function(t){this.node.setStyles(this.obj.css.actionAdd_over)}.bind({node:e,obj:this}),mouseout:function(t){this.node.setStyles(this.obj.css.actionAdd)}.bind({node:e,obj:this})})}return e},addTrs:function(t){if(100<t)t=100;for(var e=0;e<t;e++){this.createTr(this.itemTemplate,true)}},appendTr:function(t,e,i,s){var n=this.itemTemplate;for(var a in t){if(n[a]){n[a].value=t[a]}}this.createTr(n,e,i,s);for(var a in this.itemTemplate){this.itemTemplate[a].value=""}},getTrCounts:function(){return this.trList.length},createTr:function(t,e,i,s){if(this.options.maxTrCount){if(this.getTrCounts()<this.options.maxTrCount){this._createTr(t,e,i,s)}else{this.app.notice("最多只能添加"+this.options.maxTrCount+"项目","error")}}else{this._createTr(t,e,i,s)}},_createTr:function(t,e,i,s){this.fireEvent("queryCreateTr",[this]);var n;if(e){this.fireEvent("newData",[this,function(t){n=t}.bind(this)]);if(n){t=Object.clone(this.itemTemplate);for(var a in n){if(t[a]){t[a].value=n[a]}}e=false;s=n}}this.trIndex++;var r={objectId:i?i:"_"+this.trIndex,isEdited:this.options.isEdited,id:"_"+this.trIndex,index:this.trIndex,indexText:this.maxIndexText?this.maxIndexText++:this.trIndex,hasSequence:this.options.hasSequence,hasOperation:this.options.hasOperation,align:this.options.tdAlign,isNew:e,className:this.options.tdClass,tdAttributes:this.options.tdAttributes};var o=null;if(this.trTemplate){o=this.trTemplate.clone()}var h=new MGridTr(this.table,r,t,this,o,s);h.load();this.trObjs[r.objectId]=h;this.trList.push(h);if(e){this.trObjs_new[r.objectId]=h}this.fireEvent("postCreateTr",[this,h])},replaceTr:function(t,e,i,s,n){if(typeof t=="string"){var a=this.trObjs[t]}else{var r=t}var o=this.itemTemplate;for(var h in e){if(o[h]){o[h].value=e[h]}}var l=a.options.index;var p={objectId:s?s:"_"+l,isEdited:this.options.isEdited,id:"_"+l,index:l,indexText:l,hasSequence:this.options.hasSequence,hasOperation:this.options.hasOperation,align:this.options.tdAlign,isNew:i,className:this.options.tdClass,tdAttributes:this.options.tdAttributes};var d=null;if(this.trTemplate){d=this.trTemplate.clone()}var c=new MGridTr(this.table,p,o,this,d,n);c.load();c.mElement.inject(a.mElement,"before");var m=this.trList.indexOf(a);this.trList[m]=c;this.trObjs[p.objectId]=c;if(a.options.isNew){this.trObjs_new[a.options.objectId]=null}else{this.trObjs_removed[a.options.objectId]=a}if(i){this.trObjs_new[p.objectId]=c}a.mElement.destroy();for(var h in this.itemTemplate){this.itemTemplate[h].value=""}},createRemoveButton:function(e,t){var i=new Element("div",{title:"删除"}).inject(t);if(this.options.lp.remove)i.set("text",this.options.lp.remove);if(this.css.actionRemove)i.setStyles(this.css.actionRemove);i.addEvents({click:function(t){this.removeTr(t,t.target,e)}.bind(this)});if(this.css.actionRemove&&this.css.actionRemove_over){i.addEvents({mouseover:function(t){this.node.setStyles(this.obj.css.actionRemove_over)}.bind({node:i,obj:this}),mouseout:function(t){this.node.setStyles(this.obj.css.actionRemove)}.bind({node:i,obj:this})})}return i},removeTr:function(t,e,i){this.fireEvent("queryRemoveTr",[t,e,i]);var s=i.options;var n=s.objectId;if(!s.isNew){this.trObjs_removed[n]=this.trObjs[n]}this.trList.erase(i);this.trObjs[n]=null;if(this.trObjs_new[n]){this.trObjs_new[n]=null}i.destroy();this.adjustSequenceText();this.fireEvent("postRemoveTr",[t,e,i])},replaceText:function(t,e,i){var s=typeOf(t)=="array"?t:t.split(this.valSeparator);var n=typeOf(e)=="array"?e:e.split(this.valSeparator);var a=typeOf(i)=="array"?i:i.split(this.valSeparator);for(var r=0;r<s.length;r++){for(var o=0;o<n.length;o++){if(s[r]==n[o]){s[r]=a[o]}}}return s},getResult:function(t,e,i,s,n){var a=[];var r=this.trObjs;var o=true;for(var h in r){if(h&&r[h]){var l=r[h].getResult(t,e,i,s,n);if(!l){if(this.options.verifyType=="batch"){o=false}else{return false}}else{a.push(l)}}}if(o){return a}else{return false}},enableItem:function(t){for(var e in this.trObjs){if(e&&this.trObjs[e]){this.trObjs[e].enableItem(t)}}},disableItem:function(t){for(var e in this.trObjs){if(e&&this.trObjs[e]){this.trObjs[e].disableItem(t)}}},adjustSequenceText:function(){var t=[];for(var e in this.trObjs){if(e&&this.trObjs[e]){t.push(this.trObjs[e])}}t.sort(function(t,e){return t.options.index-e.options.index});t.each(function(t,e){t.setSequenceText(e+1);this.maxIndexText=e+2}.bind(this))},string2DOM:function(t,e,i){var s=t.test("^<the|^<tf|^<tb|^<colg|^<ca")&&["<table>","</table>",1]||t.test("^<col")&&["<table><colgroup>","</colgroup><tbody></tbody></table>",2]||t.test("^<tr")&&["<table><tbody>","</tbody></table>",2]||t.test("^<th|^<td")&&["<table><tbody><tr>","</tr></tbody></table>",3]||t.test("^<li")&&["<ul>","</ul>",1]||t.test("^<dt|^<dd")&&["<dl>","</dl>",1]||t.test("^<le")&&["<fieldset>","</fieldset>",1]||t.test("^<opt")&&['<select multiple="multiple">',"</select>",1]||["","",0];if(e){var n=new Element("div",{html:s[0]+t+s[1]}).getChildren();while(s[2]--)n=n[0].getChildren();n.inject(e);if(i)i(e);return n}else{var a=new Element("div",{html:s[0]+t+s[1]});a.setStyle("display","none").inject($(document.body));if(i)i(a);var n=a.getChildren();while(s[2]--)n=n[0].getChildren();a.dispose();return n}}});var MGridTr=new Class({Implements:[Options,Events],options:{objectId:"",isEdited:true,id:"",index:0,indexText:"0",hasSequence:true,hasOperation:true,align:"left",isNew:true,className:"",tdAttributes:null},initialize:function(t,e,i,s,n,a){this.setOptions(e);this.container=t;this.mElement=null;this.items={};this.itemData=i;this.parent=s;this.template=n;this.sourceData=a;this.css=this.parent.css||{};this.app=this.parent.app},load:function(){if(this.options.isEdited){this.create_Edit()}else{this.create_Read()}},create_Read:function(){var t=this.mElement=new Element("tr",{"data-id":this.options.id}).inject(this.container);var e={};if(this.options.align)e.align=this.options.align;var i={};if(this.options.className&&this.css[this.options.className])i=this.css[this.options.className];if(this.options.hasSequence){var s=this.sequenceTd=new Element("td",{align:"center",text:this.options.indexText||this.options.index}).inject(t);if(this.parent.options.sequenceClass&&this.css[this.parent.options.sequenceClass])s.setStyles(this.css[this.parent.options.sequenceClass])}var n=1;for(var a in this.itemData){var r=this.options.tdAttributes&&this.options.tdAttributes["_"+n]?this.options.tdAttributes["_"+n]:{};var s=new Element("td",{text:this.itemData[a].value}).inject(t);s.set(e);s.set(r);s.setStyle(i);n++}},create_Edit:function(t,e){if(this.template){this.create_Edit_byTemplate(t,e)}else{this.create_Edit_noTemplate(t,e)}},setSequenceText:function(t){if(this.sequenceTd)this.sequenceTd.set("text",t)},create_Edit_byTemplate:function(){this.mElement=this.template;this.mElement.set("data-id",this.options.id);if(this.options.hasSequence){this.sequenceTd=this.mElement.getElement("[sequence]");if(this.sequenceTd)this.sequenceTd.set("text",this.options.indexText||this.options.index)}this.mElement.getElements("[lable]").each(function(t){var e=this.itemData[t.get("lable")];if(!e)return;if(e.text)t.set("text",e.text)}.bind(this));this.mElement.getElements("[item]").each(function(t){var e=this.itemData[t.get("item")];if(!e)return;this.createItem(t,e)}.bind(this));if(this.options.hasOperation&&this.options.isEdited){if(this.parent.options.minTrCount&&this.options.index>this.parent.options.minTrCount){var t=this.mElement.getElement("[button_remove]");this.parent.createRemoveButton(this,t)}}this.mElement.setStyle("display","");this.mElement.inject(this.container)},create_Edit_noTemplate:function(){this.mElement=new Element("tr",{"data-id":this.options.id});var t={};if(this.options.align)t.align=this.options.align;var e={};if(this.options.className&&this.css[this.options.className])e=this.css[this.options.className];if(this.options.hasSequence){var i=this.sequenceTd=new Element("td",{align:"center",text:this.options.indexText||this.options.index}).inject(this.mElement);if(this.parent.options.sequenceClass&&this.css[this.parent.options.sequenceClass])i.setStyles(this.css[this.parent.options.sequenceClass])}var s=1;for(var n in this.itemData){var a=this.options.tdAttributes&&this.options.tdAttributes["_"+s]?this.options.tdAttributes["_"+s]:{};var i=new Element("td").inject(this.mElement);i.set(t);i.set(a);i.setStyles(e);var r=this.itemData[n];this.createItem(i,r);s++}if(this.options.hasOperation&&this.options.isEdited){if(this.parent.options.minTrCount&&this.options.index>this.parent.options.minTrCount){var o=new Element("td",{align:"center",style:{width:"30px"}}).inject(this.mElement);var h=this.parent.options.removeActionTdClass;if(h&&this.css[h])o.setStyles(this.css[h]);this.parent.createRemoveButton(this,o)}else{var o=new Element("td").inject(this.mElement);var h=this.parent.options.removeActionTdClass;if(h&&this.css[h])o.setStyles(this.css[h])}}this.mElement.inject(this.container)},createItem:function(t,e){e.objectId=e.name;var i=new MDomItem(t,e,this,this.app,this.css);if(this.parent.options.verifyType=="batchSingle"){i.options.warningType="single"}else{i.options.warningType=this.parent.options.verifyType}i.options.name=e.name+"_"+this.options.index;i.index=this.options.index;i.parent=this;i.load();this.items[e.objectId]=i},destroy:function(){Object.each(this.items,function(t){t.destroy()}.bind(this));this.mElement.destroy();MWF.release(this)},enableItem:function(t){if(t&&this.items[t]){var e=this.items[t];if(e.options.disable){e.enable()}}},disableItem:function(t){if(t&&this.items[t]){var e=this.items[t];if(!e.options.disable){e.disable()}}},getPrevSilbing:function(){var t=this.parent.trList.indexOf(this);if(t>0){return this.parent.trList[t-1]}else{return null}},getNextSilbing:function(){var t=this.parent.trList.indexOf(this);if(t!=-1&&t<this.parent.trList.length-1){return this.parent.trList[t+1]}else{return null}},verify:function(t){var e=true;for(var i in this.items){if(!this.items[i].verify(t)){if(this.parent.options.verifyType=="batch"||this.parent.options.verifyType=="batchSingle"){e=false}else{return false}}}return e},getItemsKeyValue:function(t,e){var i={};for(var s in this.items){var n=this.items[s];var a=e?n.getModifiedValue():n.getValue();if(a!=null){if(typeOf(a)==="array"){i[n.options.objectId]=typeOf(t)=="string"?a.join(t):a}else{i[n.options.objectId]=a}}}return i},getResult:function(t,e,i,s,n){if(!t||this.verify(i)){if(n&&this.sourceData){var a=this.sourceData;var r=this.getItemsKeyValue(e,s);for(var o in r){a[o]=r[o]}return a}else{return this.getItemsKeyValue(e,s)}}else{return false}}});
|