Browse Source

主从表从表绑定store dirty问题解决/主从表获取数据通用方法实现

zhuth 7 years ago
parent
commit
31f296e015

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

@@ -36,19 +36,22 @@ Ext.define('saas.util.FormUtil', {
                         if(item.xtype == 'detailGridField') {
                         if(item.xtype == 'detailGridField') {
                             var storeName = item.name || item.xtype + Ext.id();
                             var storeName = item.name || item.xtype + Ext.id();
                             item.bind = {
                             item.bind = {
-                                store: {
-                                    data : '{' + storeName + '}'
-                                }
+                                store: '{' + storeName + '}'
                             };           
                             };           
-
-                            item.store = {
+                            var detailGrids = viewModel.get('detailGrids');
+                            detailGrids.push(storeName);
+                            viewModel.set('detailGrids', detailGrids);
+                            viewModel.set(storeName, Ext.create('Ext.data.Store', {
                                 fields: item.columns ? item.columns.filter(function(c) {
                                 fields: item.columns ? item.columns.filter(function(c) {
                                     return !!c.dataIndex;
                                     return !!c.dataIndex;
                                 }).map(function(c) {
                                 }).map(function(c) {
-                                    return c.dataIndex;
+                                    return {
+                                        name: c.dataIndex,
+                                        type: 'string'
+                                    }
                                 }) : [],
                                 }) : [],
                                 data: []
                                 data: []
-                            };
+                            }));
                         }
                         }
                     });
                     });
                 }
                 }

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

@@ -36,7 +36,7 @@ Ext.define('saas.view.core.form.FormPanel', {
     initComponent: function() {
     initComponent: function() {
 
 
         var me = this;
         var me = this;
-        //me.FormUtil.setItems(me);
+        me.FormUtil.setItems(me);
 
 
         //判断是否加载数据
         //判断是否加载数据
 
 
@@ -60,7 +60,6 @@ Ext.define('saas.view.core.form.FormPanel', {
         }
         }
 
 
         Ext.apply(me, {
         Ext.apply(me, {
-            items:me.defaultItems,
             dockedItems: [{
             dockedItems: [{
                 xtype: 'toolbar',
                 xtype: 'toolbar',
                 dock: 'top',
                 dock: 'top',
@@ -94,7 +93,70 @@ Ext.define('saas.view.core.form.FormPanel', {
     },
     },
 
 
     addItems: function(items) {
     addItems: function(items) {
+        var me = this;
+        me.setBindFields(items);
         return this.add(items);
         return this.add(items);
+    },
+
+    /**
+     * 获取form数据
+     */
+    getFormData: function() {
+        var me = this,
+        viewModel = me.getViewModel(),
+        allData = viewModel.getData(),
+        bindFields = allData.bindFields,
+        formData = {
+            main: {},
+            detail: []
+        };
+
+        for(k in allData) {
+            if(k == 'detailGridField') {
+                var store = allData[k],
+                storeData = store.getData().items;
+                formData.detail = storeData.map(function(d) {
+                    return d.getData();
+                });
+                continue;
+            }
+            if(bindFields.indexOf(k) != -1) {
+                formData.main[k] = allData[k];
+            }
+        }
+        
+        return formData;
+    },
+
+    /**
+     * 设置需要绑定的字段
+     */
+    setBindFields: function(items) {
+        var me = this,
+        viewModel = me.getViewModel(),
+        bindFields = [];
+
+        Ext.Array.each(items, function(item) {
+            var ignore = item.ignore,
+            bind = item.bind;
+
+            if(!ignore && bind) {
+                if(!Ext.isString(bind)) {
+                    // 这里默认所有的fields都绑定的value,如果是其他属性则需要在加载成组件之后去获取他的defaultBind
+                    bind = bind.value;
+                }
+                if(bind) {
+                    bind = bind.replace(/[{|}]/g, '');
+                    bindFields.push(bind);
+                }
+            }
+        });
+        viewModel.set('bindFields', bindFields);
+    },
+
+    initValues: function(values) {
+        var me = this,
+        viewModel = me.getViewModel();
     }
     }
     
     
 });
 });

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

@@ -155,10 +155,4 @@ Ext.define('saas.view.core.form.FormPanelController', {
             }
             }
         });
         });
     },
     },
-    /**
-     * 获取form数据
-     */
-    getFormData: function() {
-        
-    }
 });
 });

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

@@ -1,4 +1,9 @@
 Ext.define('saas.view.core.form.FormPanelModel', {
 Ext.define('saas.view.core.form.FormPanelModel', {
     extend: 'Ext.app.ViewModel',
     extend: 'Ext.app.ViewModel',
-    alias: 'viewmodel.core-form-formpanel'
+    alias: 'viewmodel.core-form-formpanel',
+
+    data: {
+        bindFields: [], // 请求绑定字段,绑定到formfield并且未设置ignore为true
+        detailGrids: [], // 记录从表绑定项
+    }
 });
 });

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

@@ -55,6 +55,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
                     text: 'Debugger',
                     text: 'Debugger',
                     handler: function() {
                     handler: function() {
                         var detailGrid = me;
                         var detailGrid = me;
+                        var form = detailGrid.up('form');
                         debugger;
                         debugger;
                     }
                     }
                 }]
                 }]

+ 1 - 5
frontend/saas-web/app/view/test/order/FormPanel.js

@@ -120,11 +120,7 @@ Ext.define('saas.view.test.order.FormPanel', {
     }, {
     }, {
         name : "detailGridField", 
         name : "detailGridField", 
         xtype : "detailGridField", 
         xtype : "detailGridField", 
-        bind: {
-            store:{
-                data:'{detailGridField}'
-            }
-        },
+        
         columns : [
         columns : [
             {
             {
                 text : "序号", 
                 text : "序号", 

+ 10 - 0
frontend/saas-web/app/view/test/query/QueryPanelModel.js

@@ -5,5 +5,15 @@ Ext.define('saas.view.test.query.QueryPanelModel', {
     data: {
     data: {
        // pu_total: '3333',
        // pu_total: '3333',
         //pu_code: '4'
         //pu_code: '4'
+    },
+    formulas: {
+        queryItems1: {
+            get: function(get) {
+                var pu_code = get('pu_code'),
+                pu_date = get('pu_date');
+
+                return '单据编号:' + pu_code + ',采购日期:从' + Ext.Date.format(pu_date.from, 'Y-m-d') + '到' + Ext.Date.format(pu_date.to, 'Y-m-d');
+            }
+        }
     }
     }
 });
 });