MWF.require("MWF.widget.Common", null, false); /** @classdesc $Module 组件类,此类为所有组件的父类。 * @class * @o2category FormComponents * @hideconstructor * */ MWF.xApplication.process.Xform.$Module = MWF.APP$Module = new Class( /** @lends MWF.xApplication.process.Xform.$Module# */ { Implements: [Events], options: { /** * 组件加载前触发。queryLoad执行的时候,当前组件没有在form里注册,通过this.form.get("fieldId")不能获取到当前组件,需要用this.target获取。 * @event MWF.xApplication.process.Xform.$Module#queryLoad * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} */ /** * 组件加载后触发. * @event MWF.xApplication.process.Xform.$Module#postLoad * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} */ /** * 组件加载后触发. * @event MWF.xApplication.process.Xform.$Module#load * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} */ "moduleEvents": ["load", "queryLoad", "postLoad"] }, initialize: function(node, json, form, options){ /** * @summary 组件的节点,mootools封装过的Dom对象,可以直接使用原生的js和moootools方法访问和操作该对象。 * @see https://mootools.net/core/docs/1.6.0/Element/Element * @member {Element} * @example * //可以在脚本中获取该组件 * var field = this.form.get("fieldId"); //获取组件对象 * field.node.setStyle("font-size","12px"); //给节点设置样式 */ this.node = $(node); this.node.store("module", this); /** * @summary 组件的配置信息,比如id,类型,是否只读等等。可以在组件的queryLoad事件里修改该配置来对组件做一些改变。 * @member {JsonObject} * @example * //可以在脚本中获取该组件 * var json = this.form.get("fieldId").json; //获取组件对象 * var id = json.id; //获取组件的id * var type = json.type; //获取组件的类型,如Textfield 为文本输入组件,Select为下拉组件 * * //在组件queryLoad事件里设置组件只读。 * //当前组件的queryLoad事件运行时还没有在form里注册,通过this.form.get("fieldId")不能获取到当前组件,需要用this.target获取。 * var json = this.target.json; * json.isReadonly = true; //设置组件为只读。 */ this.json = json; /** * @summary 组件的所在表单对象. * @member {MWF.xApplication.process.Xform.Form} * @example * var form = this.form.get("fieldId").form; //获取组件所在表单对象 * var container = form.container; //获取表单容器 */ this.form = form; /** * 当前组件在数据表格或者数据模板中时,可以通过此属性获取所在行(条目)对象. * @member {MWF.xApplication.process.Xform.Datatemplate.Line|MWF.xApplication.process.Xform.DatatablePC.Line|MWF.xApplication.process.Xform.DatatableMobile.Line} * @example * //获取当前组件所在数据模板/数据表格的行(条目)对象 * var line = this.target.parentLine; * //获取当前字段所在行下标 * var index = line.getIndex(); * //获取当前字段所在条目的subject字段的值 * var data = line.getModule("subject").getData(); * //设置当前字段所在条目的subject字段的值 * line.getModule("subject").setData("test1"); */ this.parentLine = null; }, /** * @summary 根据组件的校验设置进行校验。 * @param {String} [routeName] - 可选,路由名称. * @example * if( !this.form.get('fieldId').validate() ){ * return false; * } * @return {Boolean} 是否通过校验 */ validate: function (routeName, opinion) { if( this.validationMode )this.validationMode(); if( this.validation ){ return this.validation(routeName, opinion); }else{ return true; } }, validation: function (routeName, opinion) { if (!this.isReadonly() && this.json.showMode!=="disabled"){ if (this.getInputData){ this._setBusinessData(this.getInputData("change")); } if (this.validationFormat){ if (!this.validationFormat()) return false; } if (!this.validationConfig(routeName, opinion)) return false; if (!this.json.validation) return true; if (!this.json.validation.code) return true; this.currentRouteName = routeName; var flag = this.form.Macro.exec(this.json.validation.code, this); this.currentRouteName = ""; if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation; if (flag.toString() !== "true") { this.notValidationMode(flag); return false; } } return true; }, saveValidation: function () { return true; }, /** * 当前组件在数据源组件中时,可以通过此方法获取所在的上级数据源/子数据源/子数项组件. * @param {String} [type] 需要获取的类型,"source"为表示数据源,"subSource"表示子数据源,"subSourceItem"表示子数据项组件。 * 如果该参数省略,则获取离当前组件最近的上述组件。 * @return {Source|SubSource|SubSourceItem}。 * @example * var source = this.target.getSource(); //获取当前组件的所在子上级数据源/子数据源/子数项组件. * var data = source.data; //获取数据 * * var source = this.form.get("fieldId").getSource("source"); //获取数据源组件 * var data = source.data; //获取数据 */ getSource: function( type ){ if( type ){ var parent = this.node.getParent(); while(parent && parent.get("MWFtype")!= type ){ parent = parent.getParent(); } return (parent) ? parent.retrieve("module") : null; }else{ return this._getSource(); } }, _getSource: function(){ var parent = this.node.getParent(); while(parent && ( parent.get("MWFtype")!="source" && parent.get("MWFtype")!="subSource" && parent.get("MWFtype")!="subSourceItem" )) parent = parent.getParent(); return (parent) ? parent.retrieve("module") : null; }, /** * 获取当前组件所在的祖先组件. * @param {String} [type] 需要获取的组件类型。 * 如果该参数省略,则获取离当前组件最近的祖先组件。type有效值如下: *
form- 表单
*
common- 通用组件
*
datatable- 数据表格
*
datatableline- 数据表格行
*
datatemplate- 数据模板
*
datatemplateline- 数据模板行
*
div- 容器组件
*
elcommon- Element通用组件
*
elcontainer- Element容器组件
*
subform- 子表单
*
source- 数据源组件
*
subsource- 子数据源
*
subsourceitem- 子数据项组件
*
tab- 分页组件
*
tabpage- 分页组件的某个分页
*
table- 表格
*
tabletd- 单元格
*
widget- 部件
* @param {Function} [validateFunction] 进一步校验,参数为获取到匹配到类型的组件,返回false继续往上取对应类型的组件,返回true返回该组件。 * @return {MWF.xApplication.process.Xform.$Module}。 * @example * var module = this.target.getParentModule(); //获取最近的祖先。 * * var datatemplateLine = this.target.getParentModule("datatemplateline"); //获取当前组件所在的数据模板行. * * var module = this.target.getParentModule(null, function(module){ * return module.json.id === "div_1"; * }); //获取当前组件id为div_1的父组件。 */ getParentModule: function( type, validateFunction ){ var lcType = ( type || "" ).toLowerCase(); if( lcType === "form" )return this.form; var module, vm; var parent; if( ["datatableline","datatemplateline", "tabpage", "tab", "widget", "table"].contains( lcType ) ){ parent = this.node; }else{ parent = this.node.getParent(); } while(parent) { module = null; vm = null; var MWFtype = parent.get("MWFtype"); if( MWFtype ){ module = parent.retrieve("module"); if( module ){ switch (lcType) { case "": vm = module; break; case "table": if( module.table )vm = module.table; break; case "widget": if( module.widget )vm = module.widget; break; case "tab": if( module.tab )vm = module.tab; break; case "tabpage": if( module.page && module.tab )vm = module.page; break; case "datatableline": if( module.parentLine && module.parentDatatable )vm = module.parentLine; break; case "datatemplateline": if( module.parentLine && module.parentDatatemplate )vm = module.parentLine; break; case "subsourceitem": if( MWFtype.toLowerCase() === "subsourceitem" )vm = module; break; case "tabletd": if( module.json.type === "Table$Td" )vm = module; break; default: if( module.json.type.toLowerCase() === lcType )vm = module; break; } } if( vm ){ if( !validateFunction ){ return vm; }else if( validateFunction && validateFunction.call(this.form.Macro, vm) ){ return vm; } } parent = parent.getParent(); }else{ parent = parent.getParent(); } } return null; }, isReadonly : function(){ return !!(this.readonly || this.json.isReadonly || this.form.json.isReadonly || this.json.showMode==="read" || this.isSectionMergeRead()); }, isAllSectionShow: function(){ return this.json.showAllSection && this.json.section === "yes" && this.isSectionData(); }, isSectionMergeRead: function(){ return this.json.sectionMerge === "read" && this.json.section !== "yes" && this.isSectionData() }, isSectionMergeEdit: function(){ return this.json.sectionMerge === "edit" && this.json.section !== "yes" && this.isSectionData() }, isSectionData: function(){ //数据是否经过区段处理 var data = this.getBusinessDataById(); return o2.typeOf( data ) === "object"; }, getSortedSectionData: function(){ //获取合并排序后的数据 var data = this.getBusinessDataById(); var array = []; for( var key in data ){ array.push({ sectionKey: key, key: key, data: data[key] }) } if( this.json.sectionMergeSortScript && this.json.sectionMergeSortScript.code){ array.sort( function(a, b){ this.form.Macro.environment.event = { "a": a, "b": b }; var flag = this.form.Macro.exec(this.json.sectionMergeSortScript.code, this); this.form.Macro.environment.event = null; return flag; }.bind(this)) } return array; }, //区段合并的区段值 _getMergeSectionKey: function( data ){ switch (this.json.sectionKey){ case "person": return layout.desktop.session.user.id; case "unit": return (this.form.businessData.task) ? this.form.businessData.task.unit : ""; case "activity": return (this.form.businessData.work) ? this.form.businessData.work.activity : ""; case "splitValue": return (this.form.businessData.work) ? this.form.businessData.work.splitValue : ""; case "script": var d; if( this.json.sectionKeyScript && this.json.sectionKeyScript.code){ this.form.Macro.environment.event = data; d = this.form.Macro.exec(this.json.sectionKeyScript.code, this); this.form.Macro.environment.event = null; }else{ d = ""; } return d; default: return ""; } }, getSectionKeyWithMerge: function(data, callback){ switch (this.json.sectionKey) { case "person": if( !this.form.sectionKeyPersonMap )this.form.sectionKeyPersonMap = {}; if( this.form.sectionKeyPersonMap[data.key] ){ callback(this.form.sectionKeyPersonMap[data.key]); return; } //只获取一次。把callback存起来,等异步调用完成后一次性执行callback if( !this.form.sectionKeyCallbackMap )this.form.sectionKeyCallbackMap = {}; var map = this.form.sectionKeyCallbackMap; if( !map[ data.key ] )map[ data.key ] = []; if( !map[ data.key ].length ){ Promise.resolve( o2.Actions.load("x_organization_assemble_express").PersonAction.listObject({ "personList": [data.key] })).then(function(json){ var key = json.data.length ? json.data[0].name : data.key; this.form.sectionKeyPersonMap[data.key] = key; while( map[ data.key ].length ){ map[ data.key ].shift()( key ); } }.bind(this)); } map[ data.key ].push( callback ); break; case "unit": callback( data.key.split("@")[0] ); break; case "activity": case "splitValue": callback( data.key ); break; case "script": var d; if( this.json.sectionKeyScript && this.json.sectionKeyScript.code){ this.form.Macro.environment.event = data; d = this.form.Macro.exec(this.json.sectionKeyScript.code, this); this.form.Macro.environment.event = null; }else{ d = ""; } callback( d ); break; } }, _loadMergeReadNode: function(keepHtml, position) { if (!keepHtml) { this.node.empty(); this.node.set({ "nodeId": this.json.id, "MWFType": this.json.type }); } switch (this.json.mergeTypeRead) { case "htmlScript": this._loadMergeReadNodeByHtml(); break; case "dataScript": this._loadMergeReadNodeByData(); break; default: this._loadMergeReadNodeByDefault(position); break; } }, _loadMergeReadNodeByHtml: function(){ if (this.json.sectionMergeReadHtmlScript && this.json.sectionMergeReadHtmlScript.code) { var html = this.form.Macro.exec(this.json.sectionMergeReadHtmlScript.code, this); this.node.set("html", html); } }, _loadMergeReadNodeByData: function(){ if (this.json.sectionMergeReadDataScript && this.json.sectionMergeReadDataScript.code) { var data = this.form.Macro.exec(this.json.sectionMergeReadDataScript.code, this); } }, _loadMergeReadNodeByDefault: function( position ){ var data = this.getSortedSectionData(); var sectionNodeStyles = this._parseStyles(this.json.sectionNodeStyles); var sectionKeyStyles = this._parseStyles(this.json.sectionKeyStyles); var sectionContentStyles = this._parseStyles(this.json.sectionContentStyles); data.each(function(d){ var node = new Element("div.mwf_sectionnode", { styles : sectionNodeStyles }).inject(this.node, position || "bottom"); if( this.json.showSectionKey ){ var keyNode = new Element("div.mwf_sectionkey", { styles : sectionKeyStyles }).inject(node); this.getSectionKeyWithMerge( d, function (key) { if( o2.typeOf(key) === "string" ){ keyNode.set("text", key + (this.json.keyContentSeparator || "")); }else{ Promise.resolve(key).then(function (k) { keyNode.set("text", k + (this.json.keyContentSeparator || "")); }.bind(this)) } }.bind(this)); } var contentNode = new Element("div.mwf_sectioncontent", { styles : sectionContentStyles }).inject(node); this._loadMergeReadContentNode( contentNode, d ) }.bind(this)) }, _loadMergeReadContentNode: function( contentNode, data ){ contentNode.set("text", data.data) }, _loadMergeEditNode: function(){ if( this.json.mergeTypeEdit === "script" ){ this._loadMergeEditNodeByScript(); }else{ this._loadMergeEditNodeByDefault(); } }, _loadMergeEditNodeByScript: function(){ if (this.json.sectionMergeEditScript && this.json.sectionMergeEditScript.code) { var data = this.form.Macro.exec(this.json.sectionMergeEditScript.code, this); this._setBusinessData( data ); this._loadNode(); } }, _loadMergeEditNodeByDefault: function(){ var data = this.getSortedSectionData(); data = data.map(function(d){ return d.data; }); this._setBusinessData( data.join("") ); this._loadNode(); }, /** * @summary 隐藏组件. * @example * this.form.get("fieldId").hide(); //隐藏组件 */ hide: function(){ var dsp = this.node.getStyle("display"); if (dsp!=="none") this.node.store("mwf_display", dsp); this.node.setStyle("display", "none"); if (this.iconNode) this.iconNode.setStyle("display", "none"); }, /** * @summary 显示组件. * @example * this.form.get("fieldId").show(); //显示组件 */ show: function(){ var dsp = this.node.retrieve("mwf_display", "block"); this.node.setStyle("display", dsp); if (this.iconNode) this.iconNode.setStyle("display", "block"); }, load: function(){ this._loadModuleEvents(); if (this.fireEvent("queryLoad")){ this._queryLoaded(); this._loadUserInterface(); this._loadStyles(); this._loadDomEvents(); //this._loadEvents(); this._afterLoaded(); this.fireEvent("postLoad"); if( this.moduleSelectAG && typeOf(this.moduleSelectAG.then) === "function" ){ this.moduleSelectAG.then(function () { this.fireEvent("load"); this.isLoaded = true; }.bind(this)) }else{ this.fireEvent("load"); this.isLoaded = true; } } }, _loadUserInterface: function(){ // this.node = this.node; }, _loadStyles: function(){ if (this.json.styles){ this.node.setStyles( this._parseStyles(this.json.styles) ); } // if (this.json.styles) Object.each(this.json.styles, function(value, key){ // if ((value.indexOf("x_processplatform_assemble_surface")!=-1 || value.indexOf("x_portal_assemble_surface")!=-1 || value.indexOf("x_cms_assemble_control")!=-1)){ // var host1 = MWF.Actions.getHost("x_processplatform_assemble_surface"); // var host2 = MWF.Actions.getHost("x_portal_assemble_surface"); // var host3 = MWF.Actions.getHost("x_cms_assemble_control"); // if (value.indexOf("/x_processplatform_assemble_surface")!==-1){ // value = value.replace("/x_processplatform_assemble_surface", host1+"/x_processplatform_assemble_surface"); // }else if (value.indexOf("x_processplatform_assemble_surface")!==-1){ // value = value.replace("x_processplatform_assemble_surface", host1+"/x_processplatform_assemble_surface"); // } // if (value.indexOf("/x_portal_assemble_surface")!==-1){ // value = value.replace("/x_portal_assemble_surface", host2+"/x_portal_assemble_surface"); // }else if (value.indexOf("x_portal_assemble_surface")!==-1){ // value = value.replace("x_portal_assemble_surface", host2+"/x_portal_assemble_surface"); // } // if (value.indexOf("/x_cms_assemble_control")!==-1){ // value = value.replace("/x_cms_assemble_control", host3+"/x_cms_assemble_control"); // }else if (value.indexOf("x_cms_assemble_control")!==-1){ // value = value.replace("x_cms_assemble_control", host3+"/x_cms_assemble_control"); // } // value = o2.filterUrl(value); // } // this.node.setStyle(key, value); // }.bind(this)); }, _parseStyles: function( styles ){ var s = {}; Object.each(styles || {}, function(value, key){ if ((value.indexOf("x_processplatform_assemble_surface")!=-1 || value.indexOf("x_portal_assemble_surface")!=-1 || value.indexOf("x_cms_assemble_control")!=-1)){ var host1 = MWF.Actions.getHost("x_processplatform_assemble_surface"); var host2 = MWF.Actions.getHost("x_portal_assemble_surface"); var host3 = MWF.Actions.getHost("x_cms_assemble_control"); if (value.indexOf("/x_processplatform_assemble_surface")!==-1){ value = value.replace("/x_processplatform_assemble_surface", host1+"/x_processplatform_assemble_surface"); }else if (value.indexOf("x_processplatform_assemble_surface")!==-1){ value = value.replace("x_processplatform_assemble_surface", host1+"/x_processplatform_assemble_surface"); } if (value.indexOf("/x_portal_assemble_surface")!==-1){ value = value.replace("/x_portal_assemble_surface", host2+"/x_portal_assemble_surface"); }else if (value.indexOf("x_portal_assemble_surface")!==-1){ value = value.replace("x_portal_assemble_surface", host2+"/x_portal_assemble_surface"); } if (value.indexOf("/x_cms_assemble_control")!==-1){ value = value.replace("/x_cms_assemble_control", host3+"/x_cms_assemble_control"); }else if (value.indexOf("x_cms_assemble_control")!==-1){ value = value.replace("x_cms_assemble_control", host3+"/x_cms_assemble_control"); } value = o2.filterUrl(value); } s[key] = value; }.bind(this)); return s; }, _loadModuleEvents : function(){ Object.each(this.json.events, function(e, key){ if (e.code){ if (this.options.moduleEvents.indexOf(key)!==-1){ this.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); } } }.bind(this)); }, _loadDomEvents: function(){ Object.each(this.json.events, function(e, key){ if (e.code){ if (this.options.moduleEvents.indexOf(key)===-1){ this.node.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); } } }.bind(this)); }, _loadEvents: function(){ Object.each(this.json.events, function(e, key){ if (e.code){ if (this.options.moduleEvents.indexOf(key)!==-1){ this.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); }else{ this.node.addEvent(key, function(event){ return this.form.Macro.fire(e.code, this, event); }.bind(this)); } } }.bind(this)); }, addModuleEvent: function(key, fun){ if (this.options.moduleEvents.indexOf(key)!==-1){ this.addEvent(key, function(event){ return (fun) ? fun(this, event) : null; }.bind(this)); }else{ this.node.addEvent(key, function(event){ return (fun) ? fun(this, event) : null; }.bind(this)); } }, _getBusinessData: function(id){ var v; if (this.json.section=="yes"){ v = this._getBusinessSectionData(id); }else { if (this.json.type==="Opinion"){ v = this._getBusinessSectionDataByPerson(id); }else{ // return this.form.businessData.data[this.json.id] || ""; var value = this.getBusinessDataById(null, id); return (o2.typeOf(value)!=="null") ? value : ""; //return this.getBusinessDataById() || ""; } } //if (o2.typeOf(v)==="string") v = o2.dtxt(v); return v; }, _getBusinessSectionData: function(id){ switch (this.json.sectionBy){ case "person": return this._getBusinessSectionDataByPerson(id); case "unit": return this._getBusinessSectionDataByUnit(id); case "activity": return this._getBusinessSectionDataByActivity(id); case "splitValue": return this._getBusinessSectionDataBySplitValue(id); case "script": return this._getBusinessSectionDataByScript(((this.json.sectionByScript) ? this.json.sectionByScript.code : ""), id); default: // return this.form.businessData.data[this.json.id] || ""; return this.getBusinessDataById(null, id) || ""; } }, _getBusinessSectionDataByPerson: function(id){ this.form.sectionListObj[id||this.json.id] = layout.desktop.session.user.id; // var dataObj = this.form.businessData.data[this.json.id]; var dataObj = this.getBusinessDataById(null, id); return (dataObj) ? (dataObj[layout.desktop.session.user.id] || "") : ""; }, _getBusinessSectionDataByUnit: function(id){ this.form.sectionListObj[id || this.json.id] = ""; // var dataObj = this.form.businessData.data[this.json.id]; var dataObj = this.getBusinessDataById(null, id); if (!dataObj) return ""; var key = (this.form.businessData.task) ? this.form.businessData.task.unit : ""; if (key) this.form.sectionListObj[id||this.json.id] = key; return (key) ? (dataObj[key] || "") : ""; }, _getBusinessSectionDataByActivity: function(id){ this.form.sectionListObj[id||this.json.id] = ""; // var dataObj = this.form.businessData.data[this.json.id]; var dataObj = this.getBusinessDataById(null, id); if (!dataObj) return ""; var key = (this.form.businessData.work) ? this.form.businessData.work.activity : ""; if (key) this.form.sectionListObj[id||this.json.id] = key; return (key) ? (dataObj[key] || "") : ""; }, _getBusinessSectionDataBySplitValue: function(id){ this.form.sectionListObj[id||this.json.id] = ""; // var dataObj = this.form.businessData.data[this.json.id]; var dataObj = this.getBusinessDataById(null, id); if (!dataObj) return ""; var key = (this.form.businessData.work) ? this.form.businessData.work.splitValue : ""; if (key) this.form.sectionListObj[id||this.json.id] = key; return (key) ? (dataObj[key] || "") : ""; }, _getBusinessSectionDataByScript: function(code, id){ this.form.sectionListObj[id||this.json.id] = ""; // var dataObj = this.form.businessData.data[this.json.id]; var dataObj = this.getBusinessDataById(null, id); if (!dataObj) return ""; var key = this.form.Macro.exec(code, this); if (key) this.form.sectionListObj[id||this.json.id] = key; return (key) ? (dataObj[key] || "") : ""; }, _setEnvironmentData: function(v){ if (this.json.section=="yes"){ this._setEnvironmentSectionData(v); }else { if (this.json.type==="Opinion"){ this._setEnvironmentSectionDataByPerson(v); }else{ this.setEnvironmentDataById(v); } } }, _setEnvironmentSectionData: function(v){ switch (this.json.sectionBy){ case "person": var key = layout.desktop.session.user.id; this._setEnvironmentSectionDataByKey(key, v); break; case "unit": var key = (this.form.businessData.task) ? this.form.businessData.task.unit : ""; this._setEnvironmentSectionDataByKey(key, v); break; case "activity": var key = (this.form.businessData.work) ? this.form.businessData.work.activity : ""; this._setEnvironmentSectionDataByKey(key, v); break; case "splitValue": var key = (this.form.businessData.work) ? this.form.businessData.work.splitValue : ""; this._setEnvironmentSectionDataByKey(key, v); break; case "script": var key = this.form.Macro.exec(this.json.sectionByScript.code, this); this._setEnvironmentSectionDataByKey(key, v); break; default: this.setEnvironmentDataById(v); } }, _setEnvironmentSectionDataByKey: function(key, v){ if (key){ var evdata = this.getBusinessDataById(this.form.Macro.environment.data); var evdata; if (!evdata){ evdata = this.setEnvironmentDataById({}); } if (!evdata.hasOwnProperty(key)){ evdata.add(key, v); }else{ evdata[key] = v; } } }, setEnvironmentDataById: function(v){ //对id类似于 xx..0..xx 的字段进行拆分 var evdata = this.form.Macro.environment.data; if(this.json.id.indexOf("..") < 1){ if (!evdata.hasOwnProperty(this.json.id)){ evdata.add(this.json.id, v); }else{ evdata[this.json.id] = v; } }else{ var idList = this.json.id.split(".."); idList = idList.map( function(d){ return d.test(/^\d+$/) ? d.toInt() : d; }); //var data = this.form.businessData.data; var lastIndex = idList.length - 1; for(var i=0; i<=lastIndex; i++){ var id = idList[i]; if( !id && id !== 0 )return; if( i === lastIndex ){ if (!evdata.hasOwnProperty(id)){ evdata.add(id, v); }else{ evdata[id] = v; } }else{ var nexId = idList[i+1]; if(o2.typeOf(nexId) === "number"){ //下一个ID是数字 if( !evdata[id] && o2.typeOf(evdata[id]) !== "array" ){ evdata.add(id, []); } if( nexId > evdata[id].length ){ //超过了最大下标,丢弃 return; } }else{ //下一个ID是字符串 if( !evdata[id] || o2.typeOf(evdata[id]) !== "object"){ evdata.add(id, {}); } } evdata = evdata[id]; } } } return evdata; }, _setBusinessData: function(v, id){ //if (o2.typeOf(v)==="string") v = o2.txt(v); if (this.json.section=="yes"){ this._setBusinessSectionData(v, id); }else { if (this.json.type==="Opinion"){ this._setBusinessSectionDataByPerson(v, id); }else{ this.setBusinessDataById(v, id); if (this.json.isTitle) this.form.businessData.data.$work.title = v; } } }, _setBusinessSectionData: function(v, id){ switch (this.json.sectionBy){ case "person": this._setBusinessSectionDataByPerson(v, id); break; case "unit": this._setBusinessSectionDataByUnit(v, id); break; case "activity": this._setBusinessSectionDataByActivity(v, id); break; case "splitValue": this._setBusinessSectionDataBySplitValue(v, id); break; case "script": this._setBusinessSectionDataByScript(this.json.sectionByScript.code, v, id); break; default: this.setBusinessDataById(v, id); } }, _setBusinessSectionDataByPerson: function(v, id){ var key = layout.desktop.session.user.id; this._setBusinessSectionDataByKey(key, v, id); }, _setBusinessSectionDataByUnit: function(v, id){ var key = (this.form.businessData.task) ? this.form.businessData.task.unit : ""; this._setBusinessSectionDataByKey(key, v, id); }, _setBusinessSectionDataByActivity: function(v, id){ var key = (this.form.businessData.work) ? this.form.businessData.work.activity : ""; this._setBusinessSectionDataByKey(key, v, id); }, _setBusinessSectionDataBySplitValue: function(v, id){ var key = (this.form.businessData.work) ? this.form.businessData.work.splitValue : ""; this._setBusinessSectionDataByKey(key, v, id); }, _setBusinessSectionDataByScript: function(code, v, id){ var key = this.form.Macro.exec(code, this); this._setBusinessSectionDataByKey(key, v, id); }, _setBusinessSectionDataByKey: function(key, v, id){ if (key){ var dataObj = this.getBusinessDataById(null, id); var evdata; if (!dataObj){ dataObj = {}; evdata = this.setBusinessDataById(dataObj, id); } dataObj[key] = v; if (evdata) evdata.check(key, v); } }, getBusinessDataById: function(d, id){ var data = d || this.form.businessData.data; var thisId = id || this.json.id; //对id类似于 xx..0..xx 的字段进行拆分 if(thisId.indexOf("..") < 1){ return data[thisId]; }else{ var idList = thisId.split(".."); idList = idList.map( function(d){ return d.test(/^\d+$/) ? d.toInt() : d; }); var lastIndex = idList.length - 1; for(var i=0; i<=lastIndex; i++){ var id = idList[i]; if( !id && id !== 0 )return null; if( ["object","array"].contains(o2.typeOf(data)) ){ if( i === lastIndex ){ return data[id]; }else{ data = data[id]; } }else{ return null; } } } }, _checkEvdata: function(evdata, id, v){ switch (o2.typeOf(evdata)){ case "array": break; default: evdata.check(id, v); } }, setBusinessDataById: function(v, id){ //对id类似于 xx..0..xx 的字段进行拆分 var evdata = this.form.Macro.environment.data; var data = this.form.businessData.data; var thisId = id || this.json.id; if(thisId.indexOf("..") < 1){ data[thisId] = v; this._checkEvdata(evdata, thisId, v); //this.form.businessData.data[this.json.id] = v; }else{ var idList = thisId.split(".."); idList = idList.map( function(d){ return d.test(/^\d+$/) ? d.toInt() : d; }); //var data = this.form.businessData.data; var lastIndex = idList.length - 1; for(var i=0; i<=lastIndex; i++){ var id = idList[i]; if( !id && id !== 0 )return; if( i === lastIndex ){ data[id] = v; //evdata.check(id, v); this._checkEvdata(evdata, id, v); }else{ var nexId = idList[i+1]; if(o2.typeOf(nexId) === "number"){ //下一个ID是数字 if( !data[id] && o2.typeOf(data[id]) !== "array" ){ data[id] = []; //evdata.check(id, []); this._checkEvdata(evdata, id, []); } if( nexId > data[id].length ){ //超过了最大下标,丢弃 return; } }else{ //下一个ID是字符串 if( !data[id] || o2.typeOf(data[id]) !== "object"){ data[id] = {}; //evdata.check(id, {}); this._checkEvdata(evdata, id, {}); } } data = data[id]; evdata = evdata[id]; } } } return evdata; }, _queryLoaded: function(){}, _afterLoaded: function(){}, setValue: function(){ }, focus: function(){ this.node.focus(); }, _getModuleByPath: function( path ){ /* 注: 系统的数据中允许多层路径,id上通过..来区分层次: 1、单层或者是最外层,填"fieldId",表示表单上的直接组件。 2、如果有多层数据模板,"./fieldId"表示和当前组件id同层次的组件,"../fieldId"表示和上一层组件同层次的组件,以此类推。 3、如果有多层数据模板,也可通过"datatemplateId.*.datatemplateId2.*.fieldId"来表示全层次路径。datatemplateId表示第一层数据模板的id,datatemplateId2表示第二层的id。 */ if(!path)return; var idList = this.json.id.split(".."); if( path.contains("*") ){ //允许path中包含*,替代当前path的层次 var paths = path.split("."); for( var i=0; i level*2 ){ for( var i=0; i 0)idList_copy.pop(); } path = idList_copy.join("..")+".."+lastName; }else{ idList_copy[idList_copy.length-1] = lastName; path = idList_copy.join("..") } } return this.form.all[path]; }, clearDefaultMargin: function (){ var marginStyle = this.node.getStyle('margin-right'); var paddingStyle = this.node.getStyle('padding-right'); if( marginStyle === '20px' || paddingStyle === '4px' ){ var map = {}; Object.each(this.json.recoveryStyles || {}, function(value, key){ var k = key.toLowerCase(); if( ['margin','margin-right','padding', 'padding-right'].contains(k) ){ map[k] = value; } }); if( marginStyle === '20px' && map['margin'] !== '20px' && map['margin-right'] !== '20px') { this.node.setStyle('margin-right', '0'); } if( paddingStyle === '4px' && map['padding'] !== '4px' && map['padding-right'] !== '4px') { this.node.setStyle('padding-right', '0'); } } } });