Browse Source

detailGrid组件逻辑完善

zhuth 7 years ago
parent
commit
201b642dc3

+ 84 - 45
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -22,9 +22,16 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
     },
 
 
-    store: {
-        data: []
-    },
+    store: Ext.create('Ext.data.Store', {
+        fields: ['id', 'pdTaxtotal', 'pdTotal'],
+        data: [{
+            id: '40',
+            pdTaxtotal: 30
+        }, {
+            id: '60',
+            pdTotal: 79
+        }]
+    }),
 
     showIndex: true,
     configUrl: '',
@@ -37,16 +44,16 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
                 dock: 'bottom',
                 items: [{
                     iconCls: 'x-fa fa-plus-circle',
-                    handler: me.addDetail
+                    handler: 'addDetail'
                 }, {
                     iconCls: 'x-fa fa-trash',
-                    handler: me.deleteDetail
+                    handler: 'deleteDetail'
                 }, {
                     iconCls: 'x-fa fa-arrow-up',
-                    handler: me.swapUp
+                    handler: 'swapUp'
                 }, {
                     iconCls: 'x-fa fa-arrow-down',
-                    handler: me.swapDown
+                    handler: 'swapDown'
                 }]
             }]
         });
@@ -56,58 +63,90 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
     listeners: {
         afterrender: function(grid) {
             if(grid.store.count()==0){
-                grid.add10EmptyRow();
+                grid.getController().add10EmptyRow();
             }
         },
         itemClick: function(tableView, record, item, index, e, eOpts) {
             var grid = tableView.up('grid'),
-                store = grid.store,
-                count = store.getCount();
+            controller = grid.getController(),
+            store = grid.store,
+            count = store.getCount();
 
             if(index == count - 1) {
-                grid.add10EmptyRow();
+                controller.add10EmptyRow();
             }
         }
     },
 
-    add10EmptyRow: function() {
-        var me = this,
-            store = me.getStore(),
-            selectedRecord = me.selModel.lastSelected,
-            datas = [];
-
-        Ext.Array.each(new Array(10), function() {
-            datas.push({});
-        })
-        store.insert(store.indexOf(selectedRecord) + 1, datas);
-    },
-
-    addDetail: function() {
-        var grid = this.up('grid'),
+    controller: Ext.create('Ext.app.ViewController', {
+        add10EmptyRow: function() {
+            var me = this,
+                grid = me.getView(),
+                store = grid.getStore(),
+                selectedRecord = grid.selModel.lastSelected,
+                datas = [];
+    
+            Ext.Array.each(new Array(10), function() {
+                datas.push({});
+            })
+            store.insert(store.indexOf(selectedRecord) + 1, datas);
+        },
+    
+        addDetail: function() {
+            var me = this,
+            grid = me.getView(),
             store = grid.getStore(),
             selectedRecord = grid.selModel.lastSelected;
-
-        store.insert(store.indexOf(selectedRecord) + 1, {});
-    },
-
-    deleteDetail: function() {
-        var grid = this.up('grid'),
+    
+            store.insert(store.indexOf(selectedRecord) + 1, {});
+        },
+    
+        deleteDetail: function() {
+            var me = this,
+            grid = me.getView(),
             store = grid.getStore(),
             selectedRecord = grid.selModel.lastSelected;
-
-        store.remove(selectedRecord);
-    },
-
-    swapUp: function() {
-        var grid = this.up('grid'),
+    
+            store.remove(selectedRecord);
+        },
+    
+        swapUp: function() {
+            var me = this,
+            grid = me.getView(),
             store = grid.getStore(),
             record = grid.selModel.lastSelected,
-            selectedIdx = store.indexOf(record),
-            to = store.getAt(selectedIdx - 1);
-
-    },
-
-    swapDown: function() {
-
-    }
+            selectedIdx = store.indexOf(record);
+            
+            me.swap(grid, record, selectedIdx, -1);
+        },
+    
+        swapDown: function() {
+            var me = this,
+            grid = me.getView(),
+            store = grid.getStore(),
+            record = grid.selModel.lastSelected,
+            selectedIdx = store.indexOf(record);
+            
+            me.swap(grid, record, selectedIdx, 1);
+        },
+    
+        swap: function(grid, from, index, dir) {
+            var store = grid.getStore(),
+            to = store.getAt(index + dir);
+    
+            if(from) {
+                var keys = grid.getColumns().map(function(c) { return c.dataIndex }),
+                data = from.getData(),
+                toData = to.getData();
+    
+                Ext.each(keys, function(key, index) {
+                    to.set(key, null);
+                    from.set(key, toData[key]);
+                    to.set(key, data[key]);
+                });
+                //聚焦目标行
+                grid.selModel.select(to);
+            }
+        }
+    }),
 });

+ 5 - 1
frontend/saas-web/app/view/test/myform/FormPanelModel.js

@@ -4,7 +4,11 @@ Ext.define('saas.view.test.myform.FormPanelModel', {
     
     data: {
         company: '深圳市优软科技有限公司',
-        name: 'saas'
+        name: 'saas',
+        c: [{
+            text: '列',
+            dataIndex: 'c'
+        }]
     }
 
 });

+ 7 - 0
frontend/saas-web/app/view/test/order/FormPanel.js

@@ -5,4 +5,11 @@ Ext.define('saas.view.test.order.FormPanel', {
     controller: 'test-order-formcontroller',
     viewModel: 'test-order-formmodel',
 
+    toolBtns: [{
+        xtype: 'button',
+        text: '测试',
+        handler: function() {
+            console.log('11');
+        }
+    }]
 });