Ext.define('saas.util.FormUtil', { BaseUtil: Ext.create('saas.util.BaseUtil'), // 请求页面组件接口模板 baseUrl: '/api/ui/co_view/config?name={viewName}', // 模板替换正则 urlRe: /(.*){viewName}(.*)/g, /** * 获得form的字段配置 * @param form: form组件 * @param url: url */ setItems: function(form) { var me = this, viewName = form.viewName, defaultItems = form.defaultItems, brr = [], formModel = form.getViewModel(), url = me.baseUrl.replace(me.urlRe, '$1' + viewName); brr = brr.concat(form.defaultItems); this.BaseUtil.request({url, async: false}) .then(function(res) { if(res.success) { var config = res.data || true, items = defaultItems || []; if(config) { var cusItems = config.items || []; Ext.Array.each(cusItems, function(cusItem) { var item = items.find(function(item) { return item.name == cusItem.name; }); Ext.apply(item, cusItem); }); Ext.Array.each(items, function(item) { if(item.xtype == 'datefield') { item.format = 'Y-m-d H:i:s' } if(item.xtype == 'numberfield') { Ext.applyIf(item, { hideTrigger: true, // 隐藏trigger mouseWheelEnabled: false // 取消滚轮事件 }); // 设置默认值为0 formModel.set(item.name, 0); } // 设置必填 if(item.allowBlank==false){ // TODO 需要判断类型 item.beforeLabelTextTpl = "*"; } // 如果是从表为其绑定store if(item.xtype == 'detailGridField') { var index = form.detailCount; var columns = item.columns, cnames = columns.filter(function(c) { return c.dataIndex && !c.ignore; }).map(function(c) { return c.dataIndex }); Ext.Array.each(columns, function(c) { // 不可锁定 Ext.applyIf(c, { lockable: false }); //必填 if(c.logic=='necessaryField'){ c.cls = 'x-grid-necessary'; } if(c.xtype == 'datecolumn') { Ext.apply(c.xtype, { format: 'Y-m-d H:i:s' }); } var editor = c.editor; if(editor) { if(editor.xtype == 'numberfield') { Ext.applyIf(editor, { hideTrigger: true, // 隐藏trigger mouseWheelEnabled: false // 取消滚轮事件 }); }else if(editor.xtype == 'datefield') { Ext.apply(editor, { format: 'Y-m-d H:i:s' }); } } }); cnames.push(item.detnoColumn); formModel.set('detail' + index + '.detailBindFields', cnames); item.bind = { store: '{detail' + index + '.detailStore}' }; formModel.set('detail' + index + '.detailStore', Ext.create('Ext.data.Store', { model:item.storeModel, data: [] })); form.detailCount++; } }); } return form.addItems(items); }else { return [] } }) .then(function(items) { form.fireEvent('afterSetItems', form, items); }) .then(function() { me.loadData(form); }) .catch(function(response) { console.error(response); }); }, loadData: function(form) { var me = this; form.setLoading(true); if(form.initId && form.initId!=0) { var url = form._readUrl + form.initId; me.BaseUtil.request({url }) .then(function(res) { form.setLoading(false); if(res.success) { var d = res.data; var o = { main: d.main }; if(d.hasOwnProperty('items')) { o.detail0 = d.items; }else { var idx = 1; while(d.hasOwnProperty('items' + idx)) { o['detail' + (idx - 1)] = d['items' + idx]; idx++; } } form.setFormData(o); } }) .catch(function(response) { form.setLoading(false); console.error(response); }); }else{ //取后台编号 me.BaseUtil.request({ url: '/api/commons/number/getMaxnumber', headers: { "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8' }, params: { caller:form.caller }, method: 'POST', }).then(function(res) { form.setLoading(false); if(res.success){ var code = res.data; var viewModel = form.getViewModel(); var detailGrids = form.query('detailGridField'); Ext.Array.each(detailGrids, function(grid) { grid.add10EmptyRow(); }); if(code){ viewModel.set(form._codeField,code); } } }).catch(function() { form.setLoading(false); }) } } });