Ext.define('erp.view.sys.base.FormPortal',{ extend: 'Ext.form.Panel', alias: 'widget.formportal', autoScroll : true, defaultType : 'textfield', labelSeparator : ':', buttonAlign : 'center', bodyStyle : 'background:#f9f9f9;padding:5px 5px 0', fieldDefaults : { msgTarget: 'none', blankText : $I18N.common.form.blankText }, FormUtil: Ext.create('erp.util.FormUtil'), BaseUtil: Ext.create('erp.util.BaseUtil'), layout:'column', defaultValues:null, saveType:'ADD', defaults:{ xtype:'textfield', columnWidth:0.33, margin:'5 5 5 5' }, caller:null, buttons: [{ xtype:'tbtext', text:'
带'+required+'输入框为必填项
' },'->',{ text: '保存', formBind: true, disabled: true, handler: function(btn) { var form = this.up('form'); if (form.isValid()) { form.onSave(form,btn); } } },{ text: '清空', handler: function() { this.up('form').getForm().reset(); } }], initComponent : function(){ var params=this.params ||{ caller:this.caller||caller, condition:this.condition }; this.getFormItems(this,"common/singleFormItems.action",params); this.callParent(arguments); }, getFormItems: function(form, url, param){ var me = this; me.setLoading(true); Ext.Ajax.request({//拿到form的items url : basePath + url, params: param, method : 'post', callback : function(options, success, response){ me.setLoading(false); if (!response) return; var res = new Ext.decode(response.responseText); if(res.exceptionInfo != null){ showError(res.exceptionInfo);return; } form.fo_id = res.fo_id; form.fo_keyField = res.keyField; form.tablename = res.tablename;//表名 if(res.keyField){//主键 form.keyField = res.keyField; } if(res.statusField){//状态 form.statusField = res.statusField; } if(res.statuscodeField){//状态码 form.statuscodeField = res.statuscodeField; } if(res.codeField){//Code form.codeField = res.codeField; } if(res.dealUrl){ form.dealUrl = res.dealUrl; } form.fo_detailMainKeyField = res.fo_detailMainKeyField;//从表外键字段 var grids = Ext.ComponentQuery.query('gridpanel'); var items = me.setItems(form, res.items, res.data, res.limits, { }); form.add(items); form.fireEvent('afterload', form); } }); }, setItems: function(form, items, data, limits, necessaryCss){ var edit = true,hasData = true,limitArr = new Array(); if(limits != null && limits.length > 0) {//权限外字段 limitArr = Ext.Array.pluck(limits, 'lf_field'); } if (data) { data = Ext.decode(data); } else { hasData = false; } var bool = 'a'; if(items.length > 110&&items.length <=190){ bool = 'b'; }else if(items.length>190){ bool = 'c'; } Ext.each(items, function(item){ if(item.columnWidth<0.5)item.columnWidth = 0.5; item.cls=""; item.fieldStyle="background:white repeat-x 0 0;border-width: 1px;border-style: solid;"; //item.fieldStyle="background: white repeat-x 0 0;border-color: silver #d9d9d9 #d9d9d9;"; if(item.name != null) { if(item.name == form.statusField){//状态加特殊颜色 item.fieldStyle = item.fieldStyle + ';font-weight:bold;'; } else if(item.name == form.statuscodeField){//状态码字段强制隐藏 item.xtype = 'hidden'; } } if(form.codeField && item.name==form.codeField) item.allowBlank=false; if(!item.allowBlank && item.fieldLabel) { item.afterLabelTextTpl=required; } if(item.xtype == 'hidden') { item.columnWidth = 0; item.margin = '0'; }else if(item.xtype == 'checkbox') { item.focusCls = ''; item.fieldStyle = ''; item.uncheckedValue=0; }else if(item.xtype =='erpYnField'){ item.xtype='checkbox'; item.boxLabel=item.fieldLabel; item.hideLabel=true; item.afterBoxLabelTextTpl=required; item.fieldStyle = ''; item.checked = Math.abs(item.value || 0) == 1; }else if(item.xtype=='textareatrigger') item.xtype='textareafield'; if(item.maskRe!=null){ item.maskRe=new RegExp(item.regex); } if(form.defaultValues){ Ext.Array.each(form.defaultValues,function(v){ if(item.name in v) item.value=v[item.name]; }); } if (hasData) { item.value = data[item.name]; if(item.xtype == 'datefield' && !item.format && item.value) { item.value = item.value.substring(0,10); } if(item.secondname){//针对合并型的字段MultiField item.secondvalue = data[item.secondname]; } if(!edit){ form.readOnly = true; item.fieldStyle = item.fieldStyle + ';background:#f1f1f1;'; item.readOnly = true; } if(item.xtype == 'checkbox'){ item.checked = Math.abs(item.value || 0) == 1; item.fieldStyle = ''; item.uncheckedValue=0; } } }); items.push({ xtype:'fieldset', title: '表单介绍', columnWidth: 1, collapsible: true, collapsed: true, html:'表单介绍' }) return items; }, onSave: function(form,btn){ var me = this,url,warnMsg='保存成功!',kF=null; if(!me.checkData()){ return; } if(form.keyField){ kF=Ext.getCmp(form.keyField); if(kF.value == null || kF.value == '' || kF.value!=kF.originalValue){ me.getSeqId(form,me.setKeyFieldValue); url = form.saveUrl; form.saveType='ADD'; }else { url = form.updateUrl; warnMsg='修改成功!'; form.saveType='UPDATE'; } } Ext.each(form.items.items, function(item){ if(item.xtype == 'numberfield'){ //number类型赋默认值,不然sql无法执行 if(item.value == null || item.value == ''){ item.setValue(0); } }else if(item.xtype=='checkbox'){ item.dirty=true; if(item.checked){ item.inputValue='-1'; item.submitValue='-1'; }else { item.inputValue='0'; item.submitValue='0'; item.value='0'; item.rawValue='0'; } } }); var r = form.getValues(); var keys = Ext.Object.getKeys(r), f; var reg = /[!@#$%^&*()'":,\/?]/; Ext.each(keys, function(k){ f = form.down('#' + k); if(f && f.logic == 'ignore') { delete r[k]; } //codeField值强制大写,自动过滤特殊字符 if(k == form.codeField && !Ext.isEmpty(r[k])) { r[k] = r[k].trim().toUpperCase().replace(reg, ''); } }); Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段 if(contains(k, 'ext-', true)){ delete r[k]; } }); var params=new Object(); params.formStore= unescape(escape(Ext.JSON.encode(r))); if(form.emptyGrid)params.gridStore="[]"; if(url.indexOf('caller=') == -1){ url = url + "?caller=" + form.caller; } form.setLoading(true); if(form.saveType='UPDATE' && form.keyField && kF.value) me.saveBefore(form.caller,kF.value); Ext.Ajax.request({ url : basePath + url, params : params, method : 'post', callback : function(options,success,response){ form.setLoading(false); var localJson = new Ext.decode(response.responseText); if(localJson.success){ showResult('提示',warnMsg); me.saveAfter(form.caller,kF.value); form.saveSuccess(form.currentTab,btn); } else if(localJson.exceptionInfo){ showResult('提示',localJson.exceptionInfo); } else{ showResult('提示',"操作失败!"); } } }); }, getSeqId: function(form,fn){ if(!form){ form = Ext.getCmp('form'); } Ext.Ajax.request({ url : basePath + form.getIdUrl, method : 'get', async: false, callback : function(options,success,response){ var rs = new Ext.decode(response.responseText); if(rs.exceptionInfo){ showError(rs.exceptionInfo);return; } if(rs.success){ fn.call(null, form.keyField,rs.id); } } }); }, checkData:function(){ return true; }, setKeyFieldValue:function(keyField,value){ Ext.getCmp(keyField).setValue(value); }, saveBefore:function(caller,keyValue){ Ext.Ajax.request({ url : basePath + 'ma/sysinit/saveBefore.action', method : 'POST', async: false, params:{ caller:caller, keyValue:keyValue } }); }, saveAfter:function(caller,keyValue){ Ext.Ajax.request({ url : basePath + 'ma/sysinit/saveAfter.action', method : 'POST', params:{ caller:caller, keyValue:keyValue } }); } });