|
|
@@ -1,270 +1,271 @@
|
|
|
Ext.define('saas.util.FormUtil', {
|
|
|
|
|
|
- BaseUtil: Ext.create('saas.util.BaseUtil'),
|
|
|
+ statics: {
|
|
|
|
|
|
- // 请求页面组件接口模板
|
|
|
- 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);
|
|
|
+ // 请求页面组件接口模板
|
|
|
+ baseUrl: '/api/ui/co_view/config?name={viewName}',
|
|
|
+ // 模板替换正则
|
|
|
+ urlRe: /(.*){viewName}(.*)/g,
|
|
|
|
|
|
- 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.allowBlank==false){
|
|
|
- // TODO 需要判断类型
|
|
|
- item.beforeLabelTextTpl = "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>";
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 获得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);
|
|
|
|
|
|
- if(item.xtype == 'textfield') {
|
|
|
- Ext.applyIf(item, {
|
|
|
- maxLength: 50
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- if(item.xtype == 'datefield') {
|
|
|
- Ext.applyIf(item, {
|
|
|
- editable: false,
|
|
|
- format: 'Y-m-d'
|
|
|
+ saas.util.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 == 'numberfield') {
|
|
|
- Ext.applyIf(item, {
|
|
|
- hideTrigger: true, // 隐藏trigger
|
|
|
- mouseWheelEnabled: false // 取消滚轮事件
|
|
|
- });
|
|
|
- // 设置默认值为0
|
|
|
- formModel.set(item.name, 0);
|
|
|
- }
|
|
|
+ // 设置必填
|
|
|
+ if(item.allowBlank==false){
|
|
|
+ // TODO 需要判断类型
|
|
|
+ item.beforeLabelTextTpl = "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>";
|
|
|
+ }
|
|
|
|
|
|
- // 如果是从表为其绑定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 = {};
|
|
|
+ if(item.xtype == 'textfield') {
|
|
|
+ Ext.applyIf(item, {
|
|
|
+ maxLength: 50
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if(item.xtype == 'datefield') {
|
|
|
+ Ext.applyIf(item, {
|
|
|
+ editable: false,
|
|
|
+ format: 'Y-m-d'
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- Ext.Array.each(columns, function(c) {
|
|
|
+ if(item.xtype == 'numberfield') {
|
|
|
+ Ext.applyIf(item, {
|
|
|
+ hideTrigger: true, // 隐藏trigger
|
|
|
+ mouseWheelEnabled: false // 取消滚轮事件
|
|
|
+ });
|
|
|
+ // 设置默认值为0
|
|
|
+ formModel.set(item.name, 0);
|
|
|
+ }
|
|
|
|
|
|
- if(c.dataIndex && c.defaultValue) {
|
|
|
- defaultValueColumns[c.dataIndex] = c.defaultValue;
|
|
|
- }
|
|
|
+ // 如果是从表为其绑定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.applyIf(c, {
|
|
|
- lockable: false,
|
|
|
- width: 120
|
|
|
- });
|
|
|
+ Ext.Array.each(columns, function(c) {
|
|
|
|
|
|
- //必填
|
|
|
- Ext.applyIf(c, {
|
|
|
- allowBlank: true
|
|
|
- });
|
|
|
- if(!c.allowBlank){
|
|
|
- c.cls = 'x-grid-necessary';
|
|
|
- }
|
|
|
+ if(c.dataIndex && c.defaultValue) {
|
|
|
+ defaultValueColumns[c.dataIndex] = c.defaultValue;
|
|
|
+ }
|
|
|
|
|
|
- if(c.xtype == 'textfield') {
|
|
|
- Ext.applyIf(c, {
|
|
|
- maxLength: 50
|
|
|
- });
|
|
|
- }else if(c.xtype == 'datecolumn') {
|
|
|
+ // 不可锁定
|
|
|
Ext.applyIf(c, {
|
|
|
- format: 'Y-m-d'
|
|
|
+ lockable: false,
|
|
|
+ width: 120
|
|
|
});
|
|
|
- }else if(c.xtype == 'numbercolumn') {
|
|
|
+
|
|
|
+ //必填
|
|
|
Ext.applyIf(c, {
|
|
|
- align: 'end'
|
|
|
+ allowBlank: true
|
|
|
});
|
|
|
- }
|
|
|
-
|
|
|
- var editor = c.editor;
|
|
|
- if(editor) {
|
|
|
- Ext.applyIf(editor, {
|
|
|
- selectOnFocus: true
|
|
|
- });
|
|
|
- if(editor.xtype == 'numberfield') {
|
|
|
- Ext.applyIf(editor, {
|
|
|
- hideTrigger: true, // 隐藏trigger
|
|
|
- mouseWheelEnabled: false // 取消滚轮事件
|
|
|
+ if(!c.allowBlank){
|
|
|
+ c.cls = 'x-grid-necessary';
|
|
|
+ }
|
|
|
+
|
|
|
+ if(c.xtype == 'textfield') {
|
|
|
+ Ext.applyIf(c, {
|
|
|
+ maxLength: 50
|
|
|
});
|
|
|
- }else if(editor.xtype == 'datefield') {
|
|
|
- Ext.apply(editor, {
|
|
|
+ }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, {
|
|
|
- editable: false
|
|
|
+ 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();
|
|
|
- });
|
|
|
- }
|
|
|
+ if(columns[columns.length - 1].flex != 1) {
|
|
|
+ columns.push({
|
|
|
+ flex: 1,
|
|
|
+ allowBlank: true
|
|
|
+ });
|
|
|
}
|
|
|
- }));
|
|
|
|
|
|
- form.detailCount++;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- return form.addItems(items);
|
|
|
- }else {
|
|
|
- return []
|
|
|
- }
|
|
|
- })
|
|
|
- .then(function(items) {
|
|
|
- form.fireEvent('afterSetItems', form, items);
|
|
|
- })
|
|
|
- .then(function() {
|
|
|
- me.loadData(form);
|
|
|
- })
|
|
|
- .catch(function(response) {
|
|
|
- showToast('错误:' + response.message);
|
|
|
- console.error(response);
|
|
|
- });
|
|
|
+ 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();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }));
|
|
|
|
|
|
- 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.detailCount++;
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
- form.initFormData(o);
|
|
|
- form.fireEvent('load', form, o);
|
|
|
+ return form.addItems(items);
|
|
|
+ }else {
|
|
|
+ return []
|
|
|
}
|
|
|
})
|
|
|
+ .then(function(items) {
|
|
|
+ form.fireEvent('afterSetItems', form, items);
|
|
|
+ })
|
|
|
+ .then(function() {
|
|
|
+ me.loadData(form);
|
|
|
+ })
|
|
|
.catch(function(response) {
|
|
|
- form.setLoading(false);
|
|
|
+ saas.util.BaseUtil.showToast('错误:' + response.message);
|
|
|
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');
|
|
|
|
|
|
- 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 = [];
|
|
|
-
|
|
|
- Ext.Array.each(new Array(5), function() {
|
|
|
- detno += 1;
|
|
|
- var data = {};
|
|
|
- data[detnoColumn] = detno;
|
|
|
- datas.push(data);
|
|
|
- })
|
|
|
- formData['detail' + index] = datas;
|
|
|
- });
|
|
|
+ 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 = [];
|
|
|
+
|
|
|
+ Ext.Array.each(new Array(5), function() {
|
|
|
+ detno += 1;
|
|
|
+ var data = {};
|
|
|
+ data[detnoColumn] = detno;
|
|
|
+ datas.push(data);
|
|
|
+ })
|
|
|
+ formData['detail' + index] = datas;
|
|
|
+ });
|
|
|
|
|
|
- return formData;
|
|
|
+ return formData;
|
|
|
+ }else {
|
|
|
+ throw new Error('请求单据编号错误');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).then(function(formData) {
|
|
|
+ var initData = form.initData;
|
|
|
+ if(initData) {
|
|
|
+ Ext.apply(initData.main, formData.main);
|
|
|
+ form.setFormData(initData);
|
|
|
}else {
|
|
|
- throw new Error('请求单据编号错误');
|
|
|
+ form.initFormData(formData);
|
|
|
}
|
|
|
- }
|
|
|
- }).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) {
|
|
|
- showToast(res.message);
|
|
|
- form.setLoading(false);
|
|
|
- })
|
|
|
+ }).catch(function(res) {
|
|
|
+ saas.util.BaseUtil.showToast(res.message);
|
|
|
+ form.setLoading(false);
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
});
|