Browse Source

Merge branch 'dev' of ssh://10.10.100.21/source/saas-platform into dev

zhoudw 7 years ago
parent
commit
9e7b9b811c

+ 6 - 0
frontend/saas-web/Readme.md

@@ -93,6 +93,8 @@ viewModel: view.core.form.FormPanelModel
 | detnoColumn | 序号列,配置该项后无需再columns定义序号列 | √ | "pud_detno" |
 | columns[i].ignore | 是否忽略,为真时在调用保存方法时不会取到该列值 | x | true |
 | deleteDetailUrl | 删除明细接口 | √ | "/api/purchase/purchase/deleteItem" |
+| allowBlank | 是否必填列 | x | true |
+| isValid | 自定义校验规则,传入value,返回boolean | x | function(v) { return v > 10; } |
 - 需要根据columns在models文件夹下添加storeModel对应的Model
 
 ---
@@ -156,5 +158,9 @@ deleteDetailUrl 配置调整 formpanel.form->formpanel.detailGridField
 
 主从表从表配置detnoColumn属性说明变更
 
+- 2018-10-31 11:50:22
+
+从表必填配置说明allowBlamk、isValid
+
 
 

+ 10 - 2
frontend/saas-web/app/util/FormUtil.js

@@ -74,7 +74,10 @@ Ext.define('saas.util.FormUtil', {
                                 });
 
                                 //必填
-                                if(c.logic=='necessaryField'){
+                                Ext.applyIf(c, {
+                                    allowBlank: true
+                                });
+                                if(!c.allowBlank){
                                     c.cls = 'x-grid-necessary';
                                 }
 
@@ -182,7 +185,12 @@ Ext.define('saas.util.FormUtil', {
                         grid.add10EmptyRow();
                     });
                     if(code){
-                        viewModel.set(form._codeField,code);
+                        var o = {};
+                        o[form._codeField] = code;
+
+                        form.setFormData({
+                            main: o
+                        });
                     }
                 }
             }).catch(function() {

+ 1 - 1
frontend/saas-web/app/view/core/base/GridPanel.js

@@ -200,7 +200,7 @@ Ext.define('saas.view.core.base.GridPanel', {
 
     getCondition: function(f,conditionExpression){
         var condition = '';
-        if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
+        if((f.xtype == 'checkbox' || f.xtype == 'radio')){
             
         }else if(f.xtype=='textfield'&&f.value!=''){
             condition=conditionExpression.replace(new RegExp("\\{0}","g"), f.value);

+ 39 - 7
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -100,7 +100,9 @@ Ext.define('saas.view.core.form.FormPanel', {
                     xtype: 'button',
                     text: '保存',
                     handler: 'onSave',
-                    formBind: true
+                    bind: {
+                        disabled: '{!base.valid}'
+                    }
                 }, {
                     xtype: 'button',
                     text: '删除',
@@ -112,16 +114,39 @@ Ext.define('saas.view.core.form.FormPanel', {
                     xtype: 'button',
                     bind: {
                         text: '{auditBtnText}',
+                        disabled: '{!base.valid}',
                         hidden:'{!showAuditBtn}'
                     },
                     handler: "auditBtnClick",
 
                 }]))
-            }]
+            }],
+            listeners: {
+                validitychange: function() {
+                    me.isValid();
+                }
+            },
         });
         me.callParent(arguments);
     },
 
+    isValid: function() {
+        var me = this;
+        var viewModel = me.getViewModel();
+        var valid = me.getForm().isValid();
+        var detailGrids = me.query('detailGridField');
+
+        for(var i = 0; i < detailGrids.length; i++) {
+            var g = detailGrids[i];
+            if(!g.isValid()) {
+                valid = false;
+                break;
+            }
+        }
+        viewModel.set('base.valid', valid);
+        return valid;
+    },
+
     /**
      * 一些初始化viewModel的方法
      */
@@ -157,7 +182,7 @@ Ext.define('saas.view.core.form.FormPanel', {
     addItems: function (items) {
         var me = this;
         me.setBindFields(items);
-        return this.add(items);
+        return me.add(items);
     },
 
     /**
@@ -207,10 +232,10 @@ Ext.define('saas.view.core.form.FormPanel', {
 
     setFormData: function (formData) {
         var me = this,
-            main = formData.main,
-            detailCount = me.detailCount,
-            viewModel = me.getViewModel(),
-            viewData = viewModel.getData();
+        main = formData.main,
+        detailCount = me.detailCount,
+        viewModel = me.getViewModel(),
+        viewData = viewModel.getData();
 
         viewModel.setData(main);
 
@@ -223,6 +248,8 @@ Ext.define('saas.view.core.form.FormPanel', {
                 store.loadData(detailData);
             }
         }
+
+        me.isValid();
     },
 
     /**
@@ -241,6 +268,11 @@ Ext.define('saas.view.core.form.FormPanel', {
                 defaultValue = item.defaultValue;
 
             if (xtype == 'detailGridField') {
+                item.listeners = item.listeners || {};
+                item.listeners.validChange = function() {
+                    me.isValid();
+                }
+
                 return;
             }
 

+ 13 - 8
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -51,12 +51,14 @@ Ext.define('saas.view.core.form.FormPanelController', {
         var me = this,
         form = this.getView();
 
-        if(form.getForm().wasDirty==false){
-            showToast('未修改数据,请修改后保存');
+        var valid = form.isValid();
+        if(!valid) {
+            showToast('表单校验有误,请检查');
             return false;
         }
-        if(form.getForm().wasValid==false){
-            showToast('表单校验有误,请检查');
+
+        if(form.getForm().wasDirty==false){
+            showToast('未修改数据,请修改后保存');
             return false;
         }
         //form里面数据
@@ -110,15 +112,18 @@ Ext.define('saas.view.core.form.FormPanelController', {
         detailCount = form.detailCount,
         viewModel = me.getViewModel(),
         modelData = viewModel.getData();
+
+        var valid = form.isValid();
+
+        if(!valid) {
+            showToast('表单校验有误,请检查');
+            return false;
+        }
         
         if(form.getForm().wasDirty==false){
             showToast('未修改数据,请修改后保存');
             return false;
         }
-        if(form.getForm().wasValid==false){
-            showToast('表单校验有误,请检查');
-            return false;
-        }
         //form里面数据
         var formData = form.getFormData();
         var params = {

+ 1 - 0
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -6,6 +6,7 @@ Ext.define('saas.view.core.form.FormPanelModel', {
         id: 0,
         base: {
             bindFields: [], // 绑定字段
+            valid: true, // 单据是否合法
             editable: true, // 单据是否可编辑
             codeEditable: false, // 单据编号是否可编辑
         },

+ 43 - 10
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -49,6 +49,9 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
                 emptyText: '<div style="width: 100%; text-align: center; cursor: pointer; color: green;" class="fa fa-plus" title="新增行" onclick="addRows(\'' + me.id + '\')"></div>',
             },
             listeners: {
+                edit: function() {
+                    me.fireEvent('validChange');
+                },
                 itemmouseenter: function(view, record, item, index, e, eOpts) {
                     if(!view.up('detailGridField').editable) {
                         return;
@@ -100,6 +103,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             xtype : "numbercolumn",
             align : 'center',
             format:'0',
+            allowBlank: true,
             summaryType: 'count',
             locked:true,
             lockable: false,
@@ -115,11 +119,6 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             },
         };
 
-        Ext.Array.each(columns, function(c) {
-            Ext.applyIf(c, {
-                allowBlank: true
-            });
-        });
         if (detnoField) {
             Ext.apply(me, { columns: [indexColumn].concat(columns) });
         }
@@ -193,6 +192,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         var data = {};
         data[detnoColumn] = detno + 1;
         store.insert(store.indexOf(selectedRecord) + 1, data);
+        me.fireEvent('validChange');
     },
 
     deleteDetail: function(v) {
@@ -229,6 +229,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         }else{
             store.remove(selectedRecord);
         }
+        me.fireEvent('validChange');
     },
 
     swapUp: function() {
@@ -280,6 +281,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             //聚焦目标行
             me.selModel.select(to);
         }
+        me.fireEvent('validChange');
     },
     setGridDisabled: function(able) {
         var me = this,
@@ -294,19 +296,50 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             }
         });
     },
+
+    /**
+     * 判断grid数据是否合法
+     */
     isValid: function() {
         var me = this,
-        columns = me.columns;
+        columns = me.columns,
+        dirtyData = me.getDirtyData(),
+        valid = true;
 
         // 判断列必填
-        Ext.Array.each(columns, function(c) {
+        a:
+        for(var i = 0; i < columns.length; i++) {
+            var c = columns[i];
+            var cname = c.dataIndex;
             var allowBlank = c.allowBlank;
-            if(!allowBlank) {
-                
+            var isValid = c.isValid;
+            
+            b:
+            for(var j = 0; j < dirtyData.length; j++) {
+                var d = dirtyData[j];
+                var value = d[cname];
+
+                if(typeof isValid == 'function') {
+                    if(!isValid(value)) {
+                        valid = false;
+                        break a;
+                    }
+                }
+                if(!allowBlank) {
+                    if(!value) {
+                        valid = false;
+                        break a;
+                    }
+                }
             }
-        });
+        }
+
+        return valid;
     },
 
+    /**
+     * 获得已修改的数据
+     */
     getDirtyData: function() {
         var me = this,
         store = me.getStore(),

+ 1 - 1
frontend/saas-web/app/view/document/bom/FormController.js

@@ -28,10 +28,10 @@ Ext.define('saas.view.document.bom.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('启用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('启用成功');
             }
         })
         .catch(function(res) {

+ 1 - 1
frontend/saas-web/app/view/document/customer/FormController.js

@@ -51,10 +51,10 @@ Ext.define('saas.view.document.customer.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('禁用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('禁用成功');
             }
         })
         .catch(function(res) {

+ 2 - 2
frontend/saas-web/app/view/document/product/FormController.js

@@ -146,10 +146,10 @@ Ext.define('saas.view.document.product.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('启用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('启用成功');
             }
         })
         .catch(function(res) {
@@ -169,10 +169,10 @@ Ext.define('saas.view.document.product.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('禁用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('禁用成功');
             }
         })
         .catch(function(res) {

+ 2 - 2
frontend/saas-web/app/view/document/vendor/FormController.js

@@ -27,10 +27,10 @@ Ext.define('saas.view.document.vendor.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('启用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('启用成功');
             }
         })
         .catch(function(res) {
@@ -50,10 +50,10 @@ Ext.define('saas.view.document.vendor.FormController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('禁用成功');
                 form.initId = localJson.data.id;
                 form.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
+                showToast('禁用成功');
             }
         })
         .catch(function(res) {

+ 1 - 1
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -103,7 +103,7 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                 dataIndex : "pd_prodcode", 
                 xtype : "", 
                 items : null,
-                logic : 'necessaryField',
+                allowBlank : false,
                 editor : {
                     displayField : "display", 
                     editable : true,