Ext.define('saas.util.FormUtil', { statics: { // 请求页面组件接口模板 baseUrl: '/api/ui/co_view/config?name={viewName}', // 模板替换正则 urlRe: /(.*){viewName}(.*)/g, setItems: function(form) { var me = this, defaultItems = form.defaultItems; me.applyCusItemConfig(form) .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); }); items = me.applyDefaultItems(form, items); } form.removeAll(); return form.addItems(items); }else { return [] } }) .then(function(items) { form.fireEvent('afterSetItems', form, items); }) .then(function() { me.loadData(form); }) .catch(function(response) { saas.util.BaseUtil.showErrorToast('加载数据错误:' + response.message); console.error(response); }); }, /** * 获得form的客户自定义字段配置 * @param form: form组件 * @param url: url */ applyCusItemConfig: function(form) { var me = this, viewName = form.viewName, defaultItems = form.defaultItems, url = me.baseUrl.replace(me.urlRe, '$1' + viewName); return saas.util.BaseUtil.request({url, async: false}); }, /** * 处理formitems的一些默认配置 */ applyDefaultItems: function(form, items) { var me = this, formModel = form.getViewModel(); Ext.Array.each(items, function(item) { // 设置必填 if(item.allowBlank==false){ // TODO 需要判断类型 item.beforeLabelTextTpl = "*"; } if(item.xtype == 'textfield') { Ext.applyIf(item, { maxLength: 50 }); } if(item.xtype == 'datefield') { Ext.applyIf(item, { editable: false, format: 'Y-m-d' }); } if(item.xtype == 'numberfield') { Ext.applyIf(item, { hideTrigger: true, // 隐藏trigger mouseWheelEnabled: false // 取消滚轮事件 }); // 设置默认值为0 formModel.set(item.name, 0); } // 如果是从表为其绑定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 }), defaultValueColumns = {}; Ext.Array.each(columns, function(c) { if(c.dataIndex && c.defaultValue) { defaultValueColumns[c.dataIndex] = c.defaultValue; } // 不可锁定 Ext.applyIf(c, { lockable: false, width: 120 }); //必填 Ext.applyIf(c, { allowBlank: true }); if(!c.allowBlank){ c.cls = 'x-grid-necessary'; } if(c.xtype == 'textfield') { Ext.applyIf(c, { maxLength: 50 }); }else if(c.xtype == 'datecolumn') { Ext.applyIf(c, { format: 'Y-m-d' }); }else if(c.xtype == 'numbercolumn') { Ext.applyIf(c, { align: 'end' }); } var editor = c.editor; if(editor) { Ext.applyIf(editor, { selectOnFocus: true }); if(editor.xtype == 'numberfield') { Ext.applyIf(editor, { hideTrigger: true, // 隐藏trigger mouseWheelEnabled: false // 取消滚轮事件 }); }else if(editor.xtype == 'datefield') { Ext.apply(editor, { format: 'Y-m-d' }); Ext.applyIf(editor, { editable: false }); } } }); if(columns[columns.length - 1].flex != 1) { columns.push({ flex: 1, allowBlank: true }); } 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: [], listeners: { add: function(store, records, index, eOpts) { Ext.Array.each(records, function(r) { for(k in defaultValueColumns) { r.set(k, defaultValueColumns[k]); } r.commit(); }); } } })); form.detailCount++; } }); return items; }, loadData: function(form) { var me = this; form.setLoading(true); if(form.initId && form.initId!=0) { var url = form._readUrl + '/' + form.initId; saas.util.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.initFormData(o); form.fireEvent('load', form, o); } }) .catch(function(response) { form.setLoading(false); console.error(response); }); }else{ //取后台编号 saas.util.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'); if(code){ var o = {}; o[form._codeField] = code; var formData = {main: {}}; Ext.apply(formData.main, o); Ext.Array.each(detailGrids, function(grid, index) { var detno = 0; var detnoColumn = grid.detnoColumn; var datas = []; var emptyRows = grid.emptyRows; Ext.Array.each(new Array(emptyRows), function() { detno += 1; var data = {}; data[detnoColumn] = detno; datas.push(data); }) formData['detail' + index] = datas; }); return formData; }else { throw new Error('请求单据编号错误'); } }else { return { main: {}, } } }).then(function(formData) { var initData = form.initData; if(initData) { Ext.apply(initData.main, formData.main); form.setFormData(initData); }else { form.initFormData(formData); } }).catch(function(res) { saas.util.BaseUtil.showErrorToast(res.message); form.setLoading(false); }) } } } });