diff --git a/o2web/source/x_component_process_FormDesigner/$Main/bottom/tools-element.json b/o2web/source/x_component_process_FormDesigner/$Main/bottom/tools-element.json index 185cb646ae533d554983bd27b6ab5344429a3fa5..54a977e22ed03e1ce74ce438d0e66bd3a9d177d0 100644 --- a/o2web/source/x_component_process_FormDesigner/$Main/bottom/tools-element.json +++ b/o2web/source/x_component_process_FormDesigner/$Main/bottom/tools-element.json @@ -19,16 +19,6 @@ "text": MWF.xApplication.process.FormDesigner.LP.modules.el_number, "className": "Elnumber" }, - "elicon": { - "fontIcon": "el-icon-picture-outline-round", - "text": MWF.xApplication.process.FormDesigner.LP.modules.el_icon, - "className": "Elicon" - }, - "elbutton": { - "fontIcon": "el-icon-thumb", - "text": MWF.xApplication.process.FormDesigner.LP.modules.el_button, - "className": "Elbutton" - }, "elradio": { "fontIcon": "el-icon-success", "text": MWF.xApplication.process.FormDesigner.LP.modules.el_radio, @@ -59,6 +49,16 @@ "text": MWF.xApplication.process.FormDesigner.LP.modules.el_slider, "className": "Elslider" }, + "elbutton": { + "fontIcon": "el-icon-thumb", + "text": MWF.xApplication.process.FormDesigner.LP.modules.el_button, + "className": "Elbutton" + }, + "elicon": { + "fontIcon": "el-icon-picture-outline-round", + "text": MWF.xApplication.process.FormDesigner.LP.modules.el_icon, + "className": "Elicon" + }, "elcommon": { "fontIcon": "el-icon-full-screen", "text": MWF.xApplication.process.FormDesigner.LP.modules.el_common, diff --git a/o2web/source/x_component_process_FormDesigner/$Main/default/tools-element.json b/o2web/source/x_component_process_FormDesigner/$Main/default/tools-element.json index 185cb646ae533d554983bd27b6ab5344429a3fa5..54a977e22ed03e1ce74ce438d0e66bd3a9d177d0 100644 --- a/o2web/source/x_component_process_FormDesigner/$Main/default/tools-element.json +++ b/o2web/source/x_component_process_FormDesigner/$Main/default/tools-element.json @@ -19,16 +19,6 @@ "text": MWF.xApplication.process.FormDesigner.LP.modules.el_number, "className": "Elnumber" }, - "elicon": { - "fontIcon": "el-icon-picture-outline-round", - "text": MWF.xApplication.process.FormDesigner.LP.modules.el_icon, - "className": "Elicon" - }, - "elbutton": { - "fontIcon": "el-icon-thumb", - "text": MWF.xApplication.process.FormDesigner.LP.modules.el_button, - "className": "Elbutton" - }, "elradio": { "fontIcon": "el-icon-success", "text": MWF.xApplication.process.FormDesigner.LP.modules.el_radio, @@ -59,6 +49,16 @@ "text": MWF.xApplication.process.FormDesigner.LP.modules.el_slider, "className": "Elslider" }, + "elbutton": { + "fontIcon": "el-icon-thumb", + "text": MWF.xApplication.process.FormDesigner.LP.modules.el_button, + "className": "Elbutton" + }, + "elicon": { + "fontIcon": "el-icon-picture-outline-round", + "text": MWF.xApplication.process.FormDesigner.LP.modules.el_icon, + "className": "Elicon" + }, "elcommon": { "fontIcon": "el-icon-full-screen", "text": MWF.xApplication.process.FormDesigner.LP.modules.el_common, diff --git a/o2web/source/x_component_process_FormDesigner/Module/$ElElement.js b/o2web/source/x_component_process_FormDesigner/Module/$ElElement.js index 46529e4ca22788a9dd47c5ba8d9f05913a0cfef4..a784afd972c68096ff1ddd03f02b15d1a39043a8 100644 --- a/o2web/source/x_component_process_FormDesigner/Module/$ElElement.js +++ b/o2web/source/x_component_process_FormDesigner/Module/$ElElement.js @@ -202,6 +202,7 @@ MWF.xApplication.process.FormDesigner.Module.$ElElement = MWF.FC$ElElement = new case "name": this.setPropertyName(); break; case "id": this.setPropertyId(); break; case "buttonRadio": + case "vueSlot": if (this.isPropertyLoaded) if (this.vm) this.resetElement(); break; default: ; } diff --git a/o2web/source/x_component_process_Xform/$ElModule.js b/o2web/source/x_component_process_Xform/$ElModule.js index c39eec35d899e3ef072d4d32eb24380113508b8f..057ec4559b3c7627fd993f762eeb568d2e4a9674 100644 --- a/o2web/source/x_component_process_Xform/$ElModule.js +++ b/o2web/source/x_component_process_Xform/$ElModule.js @@ -47,6 +47,21 @@ o2.xApplication.process.Xform.$ElModule = MWF.APP$ElModule = new Class( this._loadUserInterface(); } }, + _checkVmodel: function(text){ + if (text){ + this.vModels = []; + var reg = /(?:v-model)(?:.lazy|.number|.trim)?(?:\s*=\s*)(?:["'])?([^"']*)/g; + var arr; + while ((arr = reg.exec(text)) !== null) { + if (arr.length>1 && arr[1]){ + var modelId = this.json.id.substring(0, this.json.id.lastIndexOf("..")); + modelId = (modelId) ? modelId+".."+arr[1] : arr[1]; + this.json[arr[1]] = this.getBusinessDataById(null, modelId); + this.vModels.push(arr[1]); + } + } + } + }, _loadUserInterface: function(){ this.node.appendHTML(this._createElementHtml(), "before"); @@ -62,6 +77,7 @@ o2.xApplication.process.Xform.$ElModule = MWF.APP$ElModule = new Class( this._createVueApp(); }, _createVueApp: function(){ + if (this.json.vueSlot) this._checkVmodel(this.json.vueSlot); if (!this.vm) this._loadVue(this._mountVueApp.bind(this)); }, @@ -95,14 +111,27 @@ o2.xApplication.process.Xform.$ElModule = MWF.APP$ElModule = new Class( }; app.methods = this._createVueMethods(app); this.appendVueExtend(app); + this.appendVueWatch(app); return app; }, + appendVueWatch: function(app){ + if (this.vModels && this.vModels.length){ + app.watch = app.watch || {}; + this.vModels.forEach(function(m){ + app.watch[m] = function(val, oldVal){ + var modelId = this.json.id.substring(0, this.json.id.lastIndexOf("..")); + modelId = (modelId) ? modelId+".."+m : m; + this.setBusinessDataById(val, modelId); + }.bind(this); + }.bind(this)); + } + }, appendVueMethods: function(methods){}, appendVueExtend: function(app){ - if (!app.methods) app.methods = {}; - this.options.elEvents.forEach(function(k){ - this._createEventFunction(app, k); - }.bind(this)); + // if (!app.methods) app.methods = {}; + // this.options.elEvents.forEach(function(k){ + // this._createEventFunction(app, k); + // }.bind(this)); }, appendVueEvents: function(methods){ this.options.elEvents.forEach(function(k){ @@ -112,7 +141,7 @@ o2.xApplication.process.Xform.$ElModule = MWF.APP$ElModule = new Class( _createEventFunction: function(methods, k){ methods["$loadElEvent_"+k.camelCase()] = function(){ this.validationMode(); - //if (k==="change") this._setBusinessData(this.getInputData()); + if (k==="change") this._setBusinessData(this.getInputData()); if (this.json.events && this.json.events[k] && this.json.events[k].code){ this.form.Macro.fire(this.json.events[k].code, this, arguments); } @@ -128,10 +157,17 @@ o2.xApplication.process.Xform.$ElModule = MWF.APP$ElModule = new Class( return methods || {}; }, _createVueData: function(){ + if (this.vModels && this.vModels.length){ + this.vModels.forEach(function(m){ + if (!this.json.hasOwnProperty(m)) this.json[m] = ""; + }.bind(this)); + } if (this.json.vueData && this.json.vueData.code){ var d = this.form.Macro.exec(this.json.vueData.code, this); this.json = Object.merge(d, this.json); } + if (this.json.$id===this.json.id) this.form.Macro.environment.data.check(this.json.$id); + this.json[this.json.$id] = this._getBusinessData(); this._appendVueData(); return this.json; }, diff --git a/o2web/source/x_component_process_Xform/$Elinput.js b/o2web/source/x_component_process_Xform/$Elinput.js index 794cdba5ec673846ba31357ee6cd9d2df821ed0e..e4d79dacc3fe13b7a78bea4a055fe13130cfb37a 100644 --- a/o2web/source/x_component_process_Xform/$Elinput.js +++ b/o2web/source/x_component_process_Xform/$Elinput.js @@ -11,24 +11,35 @@ Object.assign(o2.APP$Elinput.prototype, { __setValue: function(value){ this.moduleValueAG = null; this._setBusinessData(value); - this.json[this.json.id] = value; - if (this.readonly || this.json.isReadonly) this.node.set("text", value); + this.json[this.json.$id] = value; + this.__setReadonly(value); this.fieldModuleLoaded = true; return value; }, __setData: function(data){ var old = this.getInputData(); this._setBusinessData(data); - this.json[this.json.id] = data; - if (this.readonly || this.json.isReadonly) this.node.set("text", value); + this.json[this.json.$id] = data; + this.__setReadonly(data); if (old!==data) this.fireEvent("change"); this.moduleValueAG = null; this.validationMode(); }, + __setReadonly: function(data){ + if (this.readonly || this.json.isReadonly) this.node.set("text", data); + }, getInputData: function(){ - return this.json[this.json.id]; + return this.json[this.json.$id]; }, + // _getVueModelBindId: function(){ + // if (this.json.id.indexOf("..")!==-1){ + // this.json["$id"] ="__"+this.json.id.replace(/\.\./g, "_") + // }else{ + // this.json["$id"] = this.json.id; + // } + // }, _loadNodeEdit: function(){ + this.json["$id"] = (this.json.id.indexOf("..")!==-1) ? this.json.id.replace(/\.\./g, "_") : this.json.id; this.node.appendHTML(this._createElementHtml(), "before"); var input = this.node.getPrevious(); diff --git a/o2web/source/x_component_process_Xform/$Module.js b/o2web/source/x_component_process_Xform/$Module.js index b37ebb2e930267e54d434faf111bcffe3d237447..a6a626ef26717ab7b357d4a56fb5c42fb9c1f46b 100644 --- a/o2web/source/x_component_process_Xform/$Module.js +++ b/o2web/source/x_component_process_Xform/$Module.js @@ -12,6 +12,7 @@ MWF.xApplication.process.Xform.$Module = MWF.APP$Module = new Class( /** * 组件加载前触发。当前组件的queryLoad事件运行时还没有在form里注册,通过this.form.get("fieldId")不能获取到当前组件,需要用this.target获取。 * @event MWF.xApplication.process.Xform.$Module#queryLoad + * @event MWF.xApplication.process.Xform.$Module#queryLoad * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} */ /** @@ -449,18 +450,16 @@ MWF.xApplication.process.Xform.$Module = MWF.APP$Module = new Class( if (evdata) evdata.check(key, v); } }, - getBusinessDataById: function(d){ + getBusinessDataById: function(d, id){ var data = d || this.form.businessData.data; - //var evdata = this.form.Macro.environment.data; + var thisId = id || this.json.id; //对id类似于 xx..0..xx 的字段进行拆分 - if(this.json.id.indexOf("..") < 1){ - //if (!data.hasOwnProperty(this.json.id)) evdata.add(this.json.id, data[this.json.id]||""); - return data[this.json.id]; + if(thisId.indexOf("..") < 1){ + return data[thisId]; }else{ - var idList = this.json.id.split(".."); + 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++){ @@ -468,11 +467,8 @@ MWF.xApplication.process.Xform.$Module = MWF.APP$Module = new Class( if( !id && id !== 0 )return null; if( ["object","array"].contains(o2.typeOf(data)) ){ if( i === lastIndex ){ - //if (!data.hasOwnProperty(id)) evdata.add(id, data[id]||""); return data[id]; }else{ - //if (!data.hasOwnProperty(id)) evdata.add(id, {}); - //evdata = evdata[id]; data = data[id]; } }else{ @@ -490,17 +486,18 @@ MWF.xApplication.process.Xform.$Module = MWF.APP$Module = new Class( evdata.check(id, v); } }, - setBusinessDataById: function(v){ + setBusinessDataById: function(v, id){ debugger; //对id类似于 xx..0..xx 的字段进行拆分 var evdata = this.form.Macro.environment.data; var data = this.form.businessData.data; - if(this.json.id.indexOf("..") < 1){ - data[this.json.id] = v; - this._checkEvdata(evdata, this.json.id, v); + 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 = this.json.id.split(".."); + var idList = thisId.split(".."); idList = idList.map( function(d){ return d.test(/^\d+$/) ? d.toInt() : d; }); //var data = this.form.businessData.data; diff --git a/o2web/source/x_component_process_Xform/Elcascader.js b/o2web/source/x_component_process_Xform/Elcascader.js index 5dca7332d462e625880c556d77dc88380b151221..cb4f42ac7d28ecd99efbab2abba203cd4b92e599 100644 --- a/o2web/source/x_component_process_Xform/Elcascader.js +++ b/o2web/source/x_component_process_Xform/Elcascader.js @@ -139,23 +139,7 @@ MWF.xApplication.process.Xform.Elcascader = MWF.APPElcascader = new Class( html += ""; return html; }, - __setValue: function(value){ - this.moduleValueAG = null; - this._setBusinessData(value); - this.json[this.json.id] = value; - //if (this.readonly || this.json.isReadonly) this.node.set("text", value); - this.fieldModuleLoaded = true; - return value; - }, - __setData: function(data){ - var old = this.getInputData(); - this._setBusinessData(data); - this.json[this.json.id] = data; - //if (this.readonly || this.json.isReadonly) this.node.set("text", value); - if (old!==data) this.fireEvent("change"); - this.moduleValueAG = null; - this.validationMode(); - }, + __setReadonly: function(data){}, getCheckedNodes: function(leafOnly){ return (this.vm) ? this.vm.getCheckedNodes(leafOnly) : null; } diff --git a/o2web/source/x_component_process_Xform/Elcheckbox.js b/o2web/source/x_component_process_Xform/Elcheckbox.js index 96348725dfa52edb6c478ac700993647462eeced..316cfbc86df03174f7675d66c6ee3d75936613fe 100644 --- a/o2web/source/x_component_process_Xform/Elcheckbox.js +++ b/o2web/source/x_component_process_Xform/Elcheckbox.js @@ -113,8 +113,9 @@ MWF.xApplication.process.Xform.Elcheckbox = MWF.APPElcheckbox = new Class( _createElementHtml: function(radioValues){ debugger; + this.json["$id"] = (this.json.id.indexOf("..")!==-1) ? this.json.id.replace(/\.\./g, "_") : this.json.id; var html = "1 && arr[1]){ + var modelId = this.json.id.substring(0, this.json.id.lastIndexOf("..")); + modelId = (modelId) ? modelId+".."+arr[1] : arr[1]; + this.json[arr[1]] = this.getBusinessDataById(null, modelId); + this.vModels.push(arr[1]); + } + } + } }, _createElementHtml: function(){ var html = this.json.vueTemplate || ""; - return this._filterHtml(html); + if (html) this._checkVmodel(html); + // return this._filterHtml(html); + return html; } }); diff --git a/o2web/source/x_component_process_Xform/Elinput.js b/o2web/source/x_component_process_Xform/Elinput.js index a50b0cc893f3142268ed1875a1e98e62865d6493..e9947751d4f0e3366c2eefb4590a14a19b12a39b 100644 --- a/o2web/source/x_component_process_Xform/Elinput.js +++ b/o2web/source/x_component_process_Xform/Elinput.js @@ -21,11 +21,6 @@ MWF.xApplication.process.Xform.Elinput = MWF.APPElinput = new Class( "elEvents": ["focus", "blur", "change", "input", "clear"] }, _appendVueData: function(){ - this.form.Macro.environment.data.check(this.json.id); - //if (!this.json[this.json.id]){ - this.json[this.json.id] = this._getBusinessData(); - //} - if (!this.json.maxlength) this.json.maxlength = ""; if (!this.json.minlength) this.json.minlength = ""; if (!this.json.showWordLimit) this.json.showWordLimit = false; @@ -52,8 +47,9 @@ MWF.xApplication.process.Xform.Elinput = MWF.APPElinput = new Class( // }.bind(this); // }, _createElementHtml: function(){ + debugger; var html = "