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
}
});
}
});