Browse Source

单据有修改关闭提示允许直接保存

zhuth 7 years ago
parent
commit
422832c758

+ 10 - 4
frontend/saas-web/app/util/BaseUtil.js

@@ -86,11 +86,17 @@ Ext.define('saas.util.BaseUtil', {
          * @param message: 内容
          * @return : Promise
          */
-        showConfirm: function (title, message) {
+        showConfirm: function (title, message, config) {
             return new Ext.Promise(function (resolve, reject) {
-                Ext.MessageBox.confirm(title, message, function (buttonId) {
-                    return resolve(buttonId);
-                });
+                Ext.MessageBox.show(Ext.Object.merge({
+                    title: title,
+                    msg: message,
+                    buttons: Ext.Msg.YESNO,
+                    icon: Ext.Msg.QUESTION,
+                    fn: function (buttonId) {
+                        return resolve(buttonId);
+                    }
+                }, config));
             })
         },
 

+ 71 - 2
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -31,7 +31,6 @@ Ext.define('saas.view.core.form.FormPanel', {
     remoteConfig: true, // 是否需要从远端读取form配置
     toolBtns: [], // 自定义按钮
     codeInHeader: true, // 单据编号显示在toolbar
-    closeConfirm: true, // 关闭确认
     invalidText: '表单校验有误,请检查', // 校验未通过提示内容
     dirtyAuditText: '表单数据有修改,是否先保存修改?', // 有修改时点击审核提示内容
     noDirtySaveText: '表单数据无修改', // 无修改点击保存提示内容
@@ -487,7 +486,7 @@ Ext.define('saas.view.core.form.FormPanel', {
         return dirty;
     },
 
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         viewModel = me.getViewModel(),
         allData = viewModel.getData(),
@@ -508,6 +507,52 @@ Ext.define('saas.view.core.form.FormPanel', {
             main: formData,
         };
 
+        for (var i = 0; i < detailCount; i++) {
+            var g = detailGrids[i];
+            var gridDirtyData = g.getSaveData();
+            var modelDetail = allData['detail' + i];
+            var detailBindFields = modelDetail.detailBindFields;
+
+            Ext.Array.each(gridDirtyData, function(d) {
+                for(k in d) {
+                    if(!Ext.Array.contains(detailBindFields, k)) {
+                        delete d[k];
+                    }
+                }
+            });
+            
+
+            dirtyData['detail' + i] = gridDirtyData;
+        }
+
+        return dirtyData;
+    },
+
+    getDirtyData: function() {
+        var me = this,
+        formF = me.getForm(),
+        viewModel = me.getViewModel(),
+        allData = viewModel.getData(),
+        bindFields = allData.base.bindFields,
+        detailCount = me.detailCount,
+        formData = {},
+        detailGrids = me.query('detailGridField');
+
+        Ext.Array.each(bindFields, function(field) {
+            var v = allData[field];
+            var f = formF.findField(field);
+            if(Ext.isDate(v)) {
+                v = Ext.Date.format(v, 'Y-m-d H:i:s');
+            }
+            if(f && f.isDirty()) {
+                formData[field] = f.originalValue;
+            }
+        });
+
+        var dirtyData = {
+            main: formData,
+        };
+
         for (var i = 0; i < detailCount; i++) {
             var g = detailGrids[i];
             var gridDirtyData = g.getDirtyData();
@@ -544,4 +589,28 @@ Ext.define('saas.view.core.form.FormPanel', {
     beforeUnAudit: function() {
         return true;
     },
+
+    promiseCloseTab: function() {
+        var me = this,
+        controller = me.getController();
+
+        if(me.isDirty()) {
+            return saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,离开前要保存吗?', {
+                buttons: Ext.Msg.YESNOCANCEL
+            }).then(function(yes) {
+                if(yes === 'yes') {
+                    controller.onSave();
+                    return false;
+                }else if(yes === 'no') {
+                    return true;
+                }else {
+                    return false
+                }
+            })
+        }else {
+            return new Promise(function (resolve, reject) {
+                return resolve(true);
+            });
+        }
+    }
 });

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

@@ -169,7 +169,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         modelData = viewModel.getData();
 
         //form里面数据
-        var formData = form.getDirtyData();
+        var formData = form.getSaveData();
 
         var params = {
             main:formData.main

+ 16 - 2
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -458,7 +458,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         return allData;
     },
 
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         store = me.getStore(),
         allData = store.getData().items,
@@ -518,5 +518,19 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             }
         });
         return trueData;
-    }
+    },
+
+    getDirtyData: function() {
+        var me = this,
+        store = me.getStore(),
+        modifiedData = store.getModifiedRecords(),
+        dirtyData = [];
+
+        Ext.Array.each(modifiedData, function(m, index) {
+            var modified = m.modified;
+            dirtyData.push(modified);
+        });
+
+        return dirtyData;
+    },
 });

+ 12 - 9
frontend/saas-web/app/view/core/tab/Controller.js

@@ -32,10 +32,11 @@ Ext.define('saas.view.core.tab.Controller', {
          
                 if (me.fireEvent('beforeclose', me) !== false) {
                     if (me.tabBar) {
-                        if(tabView.closeConfirm && tabView.isDirty()) {
-                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
-                            .then(function(yes) {
-                                if(yes == 'yes') {
+                        if(tabView.fireEvent('beforeclose', tabView) !== false) {
+                            tabView.promiseCloseTab()
+                            .then(function(close) {
+                                console.log();
+                                if(close) {
                                     if (me.tabBar.closeTab(me) === false) {
                                         return;
                                     }
@@ -47,11 +48,13 @@ Ext.define('saas.view.core.tab.Controller', {
                             }
                         }
                     } else {
-                        if(tabView.closeConfirm == 'function' && tabView.isDirty()) {
-                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
-                            .then(function(yes) {
-                                if(yes == 'yes') {
-                                    me.fireClose();
+                        if(tabView.fireEvent('beforeclose', tabView) !== false) {
+                            tabView.promiseCloseTab()
+                            .then(function(close) {
+                                if(close) {
+                                    if (me.tabBar.closeTab(me) === false) {
+                                        return;
+                                    }
                                 }
                             });
                         }else {

+ 1 - 1
frontend/saas-web/app/view/money/verification/FormPanelController.js

@@ -566,7 +566,7 @@ Ext.define('saas.view.money.verification.FormPanelController', {
         modelData = viewModel.getData();
 
         //form里面数据
-        var formData = form.getDirtyData();
+        var formData = form.getSaveData();
 
         var params = {
             main:formData.main

+ 2 - 2
frontend/saas-web/app/view/stock/inventory/EditDataList.js

@@ -500,7 +500,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
     },
     onSave:function(){
         var me = this,
-        gridData = me.getDirtyData();
+        gridData = me.getSaveData();
         if(gridData==null){
             saas.util.BaseUtil.showErrorToast('未修改数据');
         }
@@ -519,7 +519,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
             saas.util.BaseUtil.showErrorToast('保存失败: ' + res.message);
         });        
     },
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         store = me.getStore(),
         allData = store.getData().items,