123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- o2.xDesktop.requireApp("process.Xform", "$Module", null, false);
- o2.xDesktop.requireApp("process.Xform", "$ElModule", null, false);
- /** @class Elcommon 基于Element UI的通用组件。
- * @o2cn 通用组件
- * @example
- * //可以在脚本中获取该组件
- * //方法1:
- * var button = this.form.get("name"); //获取组件
- * //方法2
- * var button = this.target; //在组件事件脚本中获取
- * @extends o2.xApplication.process.Xform.$Module
- * @o2category FormComponents
- * @o2range {Process|CMS|Portal}
- * @hideconstructor
- */
- o2.xApplication.process.Xform.Elcommon = o2.APPElcommon = new Class(
- /** @lends o2.xApplication.process.Xform.Elcommon# */
- {
- Implements: [Events],
- Extends: o2.APP$ElModule,
- /**
- * @summary 组件的配置信息,同时也是Vue组件的data。
- * @member o2.xApplication.process.Xform.Elcommon#json {JsonObject}
- * @example
- * //可以在脚本中获取此对象,下面两行代码是等价的,它们获取的是同一个对象
- * var json = this.form.get("elcommon").json; //获取组件的json对象
- * var json = this.form.get("elcommon").vm.$data; //获取Vue组件的data数据,
- *
- */
- // load: function(){
- // this._loadModuleEvents();
- // if (this.fireEvent("queryLoad")){
- // this._queryLoaded();
- // this._loadUserInterface();
- // }
- // },
- //
- // initialize: function(node, json, form, options){
- // debugger;
- // this.node = $(node);
- // this.node.store("module", this);
- // this.json = json;
- // this.form = form;
- // this.field = true;
- // this.parentLine = null;
- // },
- _checkVueHtml: function(){
- var nodes = this.node.querySelectorAll("*[v-model]");
- this.tmpVueData = {};
- var arrs = ["el-checkbox-group"];
- nodes.forEach(function(node){
- var model = node.get("v-model");
- if (model) this.tmpVueData[model] = (arrs.indexOf(node.tagName.toString().toLowerCase())===-1) ? "" : [];
- }.bind(this));
- },
- _loadUserInterface: function(){
- this.node.set("html", this._createElementHtml());
- //this._checkVueHtml();
- this._checkVmodel();
- this.node.set({
- "id": this.json.id,
- "MWFType": this.json.type
- });
- this.node.addClass("o2_vue");
- this._createVueApp();
- },
- // _createVueApp: function(){
- // if (!this.vm) this._loadVue(this._mountVueApp.bind(this));
- // },
- //
- // _loadVue: function(callback){
- // if (!window.Vue){
- // o2.loadAll({"css": "../o2_lib/vue/element/index.css", "js": ["vue", "elementui"]}, { "sequence": true }, callback);
- // }else{
- // if (callback) callback();
- // }
- // },
- // _mountVueApp: function(){
- // if (!this.vueApp) this.vueApp = this._createVueExtend();
- //
- // /**
- // * @summary Vue对象实例
- // * @see https://vuejs.org/
- // * @member {VueInstance}
- // */
- // this.vm = new Vue(this.vueApp).$mount(this.node);
- // },
- _createVueExtend: function(){
- // if (this.tmpVueData){
- // Object.keys(this.tmpVueData).each(function(k){
- // this.form.Macro.environment.data.check(k, this.tmpVueData[k]);
- // }.bind(this));
- // }
- if (this.vModels && this.vModels.length){
- this.vModels.forEach(function(m){
- if (!this.json.hasOwnProperty(m)) this.json[m] = "";
- }.bind(this));
- }
- var app = {};
- if (this.json.vueApp && this.json.vueApp.code) app = this.form.Macro.exec(this.json.vueApp.code, this);
- if (!app) app = {};
- if (app.data){
- var ty = o2.typeOf(app.data);
- switch (ty){
- case "object":
- Object.keys(app.data).each(function(k){
- this.json[k] = app.data[k];
- //this.form.Macro.environment.data.add(k, app.data[k]);
- }.bind(this));
- app.data = this.json;
- // app.data = this.json;
- // app.data = Object.merge(this.json, this.form.Macro.environment.data);
- break;
- case "function":
- var dataFun = app.data;
- var _slef = this;
- app.data = function(){
- var d = dataFun();
- //_self.form.Macro.environment.data.add(_self.json.id, d);
- Object.keys(d).each(function(k){
- _self.json[k] = d[k];
- //_self.form.Macro.environment.data.add(k, d[k]);
- });
- //var data = Object.merge(_slef.json);
- //return _self.form.Macro.environment.data;
- return _self.json;
- };
- break;
- }
- }else{
- //app.data = this.form.Macro.environment.data;
- app.data = this.json;
- }
- var _self = this;
- var mountedFun = app.mounted;
- app.mounted = function(){
- _self._afterMounted(this.$el);
- if (mountedFun && o2.typeOf(mountedFun)=="function") return mountedFun.apply(this);
- };
- this.appendVueWatch(app);
- return app;
- },
- // _afterMounted: function(el){
- // this.node = el;
- // this.node.set({
- // "id": this.json.id,
- // "MWFType": this.json.type
- // });
- // this._loadVueCss();
- // this._loadDomEvents();
- // this._afterLoaded();
- // this.fireEvent("postLoad");
- // this.fireEvent("load");
- // },
- // _loadVueCss: function(){
- // if (this.json.vueCss && this.json.vueCss.code){
- // this.styleNode = this.node.loadCssText(this.json.vueCss.code, {"notInject": true});
- // this.styleNode.inject(this.node, "before");
- // }
- // },
- // _filterHtml: function(html){
- // var tmp = new Element("div", {"html": html});
- // var nodes = tmp.querySelectorAll("*[v-model]");
- // this.tmpVueData = {};
- // nodes.forEach(function(node){
- // this.tmpVueData[node.get("v-model")] = "";
- // }.bind(this));
- // return html;
- // },
- _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._getBusinessData(modelId);
- // this.vModels.push(arr[1]);
- // }
- // }
- // }
- var nodes = this.node.querySelectorAll("*[v-model]");
- this.vModels = [];
- var arrs = ["el-checkbox-group"];
- nodes.forEach(function(node){
- var model = node.get("v-model");
- var tag = node.tagName.toString().toLowerCase();
- if (model){
- var modelId = this.json.id.substring(0, this.json.id.lastIndexOf(".."));
- modelId = (modelId) ? modelId+".."+model : model;
- this.json[model] = this._getBusinessData(modelId);
- if (!this.json[model]){
- this.json[model] = (arrs.indexOf(tag)===-1) ? "" : []
- }
- this.vModels.push(model);
- }
- }.bind(this));
- },
- _createElementHtml: function(){
- var html = this.json.vueTemplate || "";
- // if (html) this._checkVmodel(html);
- // return this._filterHtml(html);
- return html;
- },
- resetData: function(){
- if (this.vModels && this.vModels.length){
- this.vModels.forEach(function(m){
- var modelId = this.json.id.substring(0, this.json.id.lastIndexOf(".."));
- modelId = (modelId) ? modelId+".."+m : m;
- this.json[m] = this._getBusinessData(modelId);
- }.bind(this));
- }
- },
- });
|