瀏覽代碼

代码提交

hy 7 年之前
父節點
當前提交
5bd7716904

+ 8 - 1
frontend/saas-web/app/util/FormUtil.js

@@ -117,7 +117,14 @@ Ext.define('saas.util.FormUtil', {
         }else{
             var viewModel = form.getViewModel();
             var detailStore = viewModel.get('_detailStore');
-            detailStore.loadData([{},{},{},{},{},{},{},{},{},{}]);
+            var detno = 0,datas=[];
+            Ext.Array.each(new Array(10), function() {
+                detno += 1;
+                var data = {};
+                data[form._detnoColumn] = detno;
+                datas.push(data);
+            })
+            detailStore.loadData(datas);
         }
     }
 });

+ 84 - 4
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -1,18 +1,84 @@
 Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
-    extend: 'saas.view.core.grid.GridPanel',
+    extend: 'Ext.grid.Panel',
     xtype: 'dbfindgridpanel',
     GridUtil: Ext.create('saas.util.GridUtil'),
     BaseUtil: Ext.create('saas.util.BaseUtil'),
     dataUrl: '',
+    dbSearchFields: [],
+    condition:'',
 
     initComponent: function() {
         var me = this;
         if(me.columns){
             var fields = me.columns.map(column => column.dataIndex);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 6,
+                data: [],
+                proxy: {
+                    type: 'ajax',
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = " 1=1 ";
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            keyword: condition
+                        });
+                    }
+                }
+            });
+
             Ext.apply(me, {
-                store:Ext.create('Ext.data.Store', {
-                    fields:fields
-                })
+                dockedItems:[{
+                    xtype:'toolbar',
+                    dock:'top',
+                    items:me.dbSearchFields.concat([{
+                        xtype:'button',
+                        text:'查询',
+                        handler:function(b){
+                            var grid = me;
+                            grid.condition = '';
+                            var fields = grid.dbSearchFields;
+                            Ext.Array.each(fields,function(f) {
+                                var field = b.ownerCt.down('[name='+f.name+']')
+                                var c = grid.getCondition(field,f.conditionExpression);
+                                grid.condition+=c;
+                            });
+                            debugger
+                            if(grid.condition.length>0){
+                                grid.condition = grid.condition.substring(0,grid.condition.length-5);
+                            }
+                            grid.store.loadPage(1);
+                        }
+                    },'->',{
+                        xtype:'button',
+                        text:'新增'
+                    }])
+                },{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    emptyMsg: "暂无数据",
+                    store: me.store,
+                    displayMsg: '显示{0}到{1}条数据,共有{2}条',
+                    beforePageText: "当前第",
+                    afterPageText: "页,共{0}页"
+                }]
             });
         }
         me.callParent(arguments);
@@ -70,5 +136,19 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
             }
             me.ownerCt.close();
         }
+    },
+
+    getCondition: function(f,conditionExpression){
+        debugger
+        var condition = '';
+        if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
+            
+        }else if(f.xtype=='textfield'&&f.value!=''){
+            condition=conditionExpression.replace(new RegExp("\\{0}","g"), f.value);
+        }
+        if(condition.length>0){
+            condition+= ' AND ';
+        }
+        return condition;
     }
 });

+ 1 - 0
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -35,6 +35,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                 dataUrl: f.dataUrl,
                 dbfinds: f.dbfinds,
                 belong: f.belong,
+                dbSearchFields:f.dbSearchFields?f.dbSearchFields:[],
                 dbfindtrigger:f
             }]
         });

+ 271 - 0
frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js

@@ -0,0 +1,271 @@
+Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'multidbfindgridpanel',
+    GridUtil: Ext.create('saas.util.GridUtil'),
+    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    dataUrl: '',
+    dbSearchFields: [],
+    condition:'',
+    selectRecordArr:[],
+
+    selModel: {
+        checkOnly:true,
+        type:'checkboxmodel',
+        ignoreRightMouseSelection : false,
+        listeners:{
+            select:function(selModel,record,c,d){
+                var selectRecordArr = selModel.view.ownerCt.selectRecordArr;
+                selectRecordArr.push(record);
+            },
+            deselect:function(selModel,record){
+                var selectRecordArr = selModel.view.ownerCt.selectRecordArr;
+                var index = -1;
+                index = selectRecordArr.findIndex(function(f){
+                    return f.id==record.id
+                });
+                if(index>-1){
+                    selectRecordArr.splice(index,1);
+                }
+            }
+        },
+	    onHeaderClick: function(headerCt, header, e) {
+            console.log('header click');
+	        if (header.isCheckerHd) {
+	            e.stopEvent();
+	            var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
+	            if (isChecked && this.getSelection().length > 0) {//先全选,再筛选后再全选时,无法响应的bug
+	                this.deselectAll(true);
+	            } else {
+	                this.selectAll(true);
+	                this.view.ownerCt.selectall = true;
+	            }
+            }
+	    }
+	},
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 6,
+                data: [],
+                proxy: {
+                    type: 'ajax',
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = " 1=1 ";
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            keyword: condition
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype:'toolbar',
+                    dock:'top',
+                    items:me.dbSearchFields.concat([{
+                        xtype:'button',
+                        text:'查询',
+                        handler:function(b){
+                            var grid = me;
+                            grid.condition = '';
+                            var fields = grid.dbSearchFields;
+                            Ext.Array.each(fields,function(f) {
+                                var field = b.ownerCt.down('[name='+f.name+']')
+                                var c = grid.getCondition(field,f.conditionExpression);
+                                grid.condition+=c;
+                            });
+                            if(grid.condition.length>0){
+                                grid.condition = grid.condition.substring(0,grid.condition.length-5);
+                            }
+                            grid.store.loadPage(1);
+                        }
+                    },'->',{
+                        xtype:'button',
+                        text:'新增'
+                    }])
+                },{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    emptyMsg: "暂无数据",
+                    store: me.store,
+                    displayMsg: '显示{0}到{1}条数据,共有{2}条',
+                    beforePageText: "当前第",
+                    afterPageText: "页,共{0}页",
+                    items:[{
+                        xtype:'checkbox',
+                        id:'showSelectRecord',
+                        boxLabel:'显示选中数据',
+                        handler:function(b){
+                            var grid = me;
+                            if(b.checked){
+                                grid.store.loadData(grid.selectRecordArr);
+                            }else{
+                                grid.store.loadPage(1);
+                            }
+                        }
+                    }],
+                    moveFirst: function() {
+                        //if(Ext.getCmp('showSelectRecord').checked==false){
+                            if (this.fireEvent('beforechange', this, 1) !== false) {
+                                this.store.loadPage(1);
+                                return true;
+                            }
+                        //}
+                        return false;
+                    },
+                    movePrevious: function() {
+                        var me = this,
+                            store = me.store,
+                            prev = store.currentPage - 1;
+                        if (prev > 0) {
+                            if (me.fireEvent('beforechange', me, prev) !== false) {
+                                store.previousPage();
+                                return true;
+                            }
+                        }
+                        return false;
+                    },
+                    moveNext: function() {
+                        var me = this,
+                            store = me.store,
+                            total = me.getPageData().pageCount,
+                            next = store.currentPage + 1;
+                        if (next <= total) {
+                            if (me.fireEvent('beforechange', me, next) !== false) {
+                                store.nextPage();
+                                return true;
+                            }
+                        }
+                        return false;
+                    },
+                    moveLast: function() {
+                        var me = this,
+                            last = me.getPageData().pageCount;
+                        if (me.fireEvent('beforechange', me, last) !== false) {
+                            me.store.loadPage(last);
+                            return true;
+                        }
+                        return false;
+                    },
+                    doRefresh: function() {
+                        var me = this,
+                            store = me.store,
+                            current = store.currentPage;
+                        if (me.fireEvent('beforechange', me, current) !== false) {
+                            store.loadPage(current);
+                            return true;
+                        }
+                        return false;
+                    },
+                    updateInfo: function() {
+                        var me = this,
+                            displayItem = me.child('#displayItem'),
+                            store = me.store,
+                            pageData = me.getPageData(),
+                            count, msg;
+                        if (displayItem) {
+                            count = store.getCount();
+                            if (count === 0) {
+                                msg = me.emptyMsg;
+                            } else {
+                                msg = Ext.String.format(me.displayMsg, pageData.fromRecord, pageData.toRecord, pageData.total);
+                            }
+                            displayItem.setText(msg);
+                        }
+                    }
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    loadData: function(grid, url) {
+        this.BaseUtil.request({url})
+        .then(function(response) {
+            var data = Ext.decode(response.responseText);
+                grid.getStore().loadData(data.data);
+                grid.fireEvent('afterLoadData', grid, data.data);
+                grid.setLoading(false);
+        })
+        .catch(function(response) {
+            // something...
+        });
+    },
+
+    listeners:{
+        afterrender:function(grid){
+            if(grid.dataUrl){
+                grid.setLoading(true);
+                grid.loadData(grid, grid.dataUrl);
+            }
+        }//,
+        // itemClick: function(view,record) {
+        //     var me = this;
+        //     var dbfinds = me.dbfinds;
+        //     if(dbfinds&&dbfinds.length>0){
+        //         if(me.belong=='grid'){
+        //             for (let index = 0; index < dbfinds.length; index++) {
+        //                 var item = dbfinds[index];
+        //                 var rec = me.dbfindtrigger.column.ownerCt.ownerCt.selModel.getLastSelected();
+        //                 if(rec){
+        //                     var nowRec = me.dbfindtrigger.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
+        //                     nowRec.set(item.to,record.get(item.from));
+        //                     //me.column.getEditor().setValue(record.get(item.from));
+        //                 }
+        //             }
+        //         }else if(me.belong=='form'){
+        //             for (let index = 0; index < dbfinds.length; index++) {
+        //                 var item = dbfinds[index];
+        //                 var field = me.ownerCt.belong.down('[name='+item.to+']');
+        //                 if(field){
+        //                     var val = record.get(item.from);
+        //                     if(field.xtype=='dbfindtrigger'){
+        //                         field.setValue(val);
+        //                         field.lastTriggerValue=val;
+        //                     }else{
+        //                         field.setValue(val);
+        //                     }    
+        //                 }
+        //             }
+        //         }
+        //     }
+        //     me.ownerCt.close();
+        // }
+    },
+
+    getCondition: function(f,conditionExpression){
+        debugger
+        var condition = '';
+        if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
+            
+        }else if(f.xtype=='textfield'&&f.value!=''){
+            condition=conditionExpression.replace(new RegExp("\\{0}","g"), f.value);
+        }
+        if(condition.length>0){
+            condition+= ' AND ';
+        }
+        return condition;
+    }
+});

+ 57 - 0
frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js

@@ -0,0 +1,57 @@
+/**
+ *  multi dbfind trigger
+ * 改了下MultiDbfindTrigger的赋值方式,在grid中也会把多选的值用#号连接
+ */
+Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
+	extend: 'Ext.form.field.Trigger',
+	alias: 'widget.multidbfindtrigger',
+	triggerCls: 'x-form-search-trigger',
+    GridUtil: Ext.create('saas.util.GridUtil'),
+    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    minChars:1, // 设置用户输入字符多少时触发查询
+    tpl: '',
+    enableKeyEvents:true,
+    initComponent:function() {
+        var me = this;
+        this.callParent(arguments);
+    },
+    onTriggerClick:function(f){
+        //判断dbfindtrigger归属
+        var belong = f.judge(f);
+        var win = Ext.create('Ext.window.Window', {   
+            trigger:f,
+            belong:f.ownerCt,  
+            modal:true,
+            height: '80%',
+            width: '80%',
+            title: '查找',
+            scrollable: true,
+            bodyPadding: 10,
+            constrain: true,
+            closable: true,
+            layout:'fit',
+            renderTo:Ext.getCmp('main-tab-panel').getActiveTab().getEl(),
+            items:[{
+                xtype:'multidbfindgridpanel',
+                columns: f.dbColumns,
+                dataUrl: f.dataUrl,
+                dbfinds: f.dbfinds,
+                belong: f.belong,
+                dbSearchFields:f.dbSearchFields?f.dbSearchFields:[],
+                dbfindtrigger:f
+            }]
+        });
+        win.show();
+    },
+
+    judge:function(f){
+        if(f.ownerCt.xtype.trim().toUpperCase().indexOf('FORMPANEL')>-1){
+            f.belong = 'form';
+            return 'form'
+        }
+        else if(f.column){
+            f.belong = 'grid';
+            return 'grid'
+        }
+    }
+});

+ 3 - 0
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -62,6 +62,9 @@ Ext.define('saas.view.core.form.FormPanel', {
                 }, {
                     xtype: 'button',
                     text: '删除',
+                    bind: {
+                        hidden: '{deleteHidden}'
+                    },
                     handler: 'delete'
                 }, {
                     xtype: 'button',

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

@@ -3,7 +3,17 @@ Ext.define('saas.view.core.form.FormPanelModel', {
     alias: 'viewmodel.core-form-formpanel',
 
     data: {
+        id:0,
         bindFields: [], // 请求绑定字段,绑定到formfield并且未设置ignore为true
         _detailStore: null, // 从表store
     },
+
+    formulas:{
+        deleteHidden:{
+            bind:'{id}',
+            get:function(value){
+                return !value;
+            }
+        }
+    }
 });

+ 24 - 20
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -26,11 +26,6 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
     configUrl: '',
 
     features: [{
-        ftype : 'groupingsummary',
-        groupHeaderTpl : '{name}',
-        hideGroupedHeader : false,
-        enableGroupingMenu : false
-    }, {
         ftype: 'summary',
         dock: 'bottom'
     }],
@@ -110,17 +105,20 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             form = me.ownerCt,
             detnoColumn = form._detnoColumn,
             store = me.getStore(),
-            selectedRecord = me.selModel.lastSelected;
+            selectedRecord = me.selModel.lastSelected,
+            detno = 0;
 
         //当前行后序号全部加1
-        var detno = selectedRecord.data[form._detnoColumn];
-        var store = me.store;
-        store.each(function(item){
-            d = item.data[detnoColumn];
-            if(Number(d) > detno) {
-                item.set(detnoColumn, Number(d) + 1);
-            }
-        });
+        if(selectedRecord){
+            detno = selectedRecord.data[form._detnoColumn];
+            var store = me.store;
+            store.each(function(item){
+                d = item.data[detnoColumn];
+                if(Number(d) > detno) {
+                    item.set(detnoColumn, Number(d) + 1);
+                }
+            });
+        }
         var data = {};
         data[detnoColumn] = detno + 1;
         store.insert(store.indexOf(selectedRecord) + 1, data);
@@ -158,11 +156,11 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     swapUp: function() {
         var me = this,
-            store = me.getStore(),
-            record = me.selModel.lastSelected,
-            selectedIdx = store.indexOf(record);
-            
-            me.swap(record, selectedIdx, -1);
+        store = me.getStore(),
+        record = me.selModel.lastSelected,
+        selectedIdx = store.indexOf(record);
+
+        me.swap(record, selectedIdx, -1);
     },
 
     swapDown: function() {
@@ -176,11 +174,17 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     swap: function(from, index, dir) {
         var me = this,
+        form = me.ownerCt,
         store = me.getStore(),
         to = store.getAt(index + dir);
 
         if(from && to) {
-            var keys = me.getColumns().map(function(c) { return c.dataIndex }),
+            var keys = me.getColumns().map(function(c) {
+                //剔除序号字段
+                if(c.dataIndex!=form._detnoColumn){
+                    return c.dataIndex 
+                }
+            }),
             data = from.getData(),
             toData = to.getData();
 

+ 73 - 1
frontend/saas-web/app/view/test/order/FormController.js

@@ -26,6 +26,14 @@ Ext.define('saas.view.test.order.FormController', {
                         },{
                             field:'ve_name',width:100
                         }],
+                        dbSearchFields:[{
+                            xtype : "textfield", 
+                            name : "ve_name", 
+                            conditionExpression:"ve_name like '{0}%'",
+                            fieldLabel : "供应商名称", 
+                            allowBlank : true, 
+                            columnWidth : 0.25
+                        }],
                         dbColumns:[{
                             conditionCode:'ve_id',
                             "text": "供应商ID",
@@ -66,16 +74,80 @@ Ext.define('saas.view.test.order.FormController', {
             'dbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
-                        conditionCode:'pr_code',
                         dataUrl:'http://192.168.253.41:9480/api/document/product/getProductsByCondition',
                         dbfinds:[{
                             from:'pr_code',to:'pd_prodcode'
+                        },{
+                            from:'pr_unit',to:'pd_unit'
                         }],
                         dbtpls:[{
                             field:'pr_code',width:100
                         },{
                             field:'pr_detail',width:100
                         }],
+                        dbSearchFields:[{
+                            emptyText:'输入物料编号或物料名称',
+                            xtype : "textfield", 
+                            name : "search", 
+                            conditionExpression:"CONCAT(pr_code, pr_detail) like '{0}%'",
+                            allowBlank : true, 
+                            columnWidth : 0.25
+                        }],
+                        dbColumns:[{
+                            "text": "物料ID",
+                            "flex": 0,
+                            "dataIndex": "pr_id",
+                            "width": 0,
+                            "xtype": "",
+                            "items": null
+                        },{
+                            "text": "物料编号",
+                            "flex": 1,
+                            "dataIndex": "pr_code",
+                            "width": 100,
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "物料名称",
+                            "flex": 1,
+                            "dataIndex": "pr_detail",
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "物料规格",
+                            "flex": 0,
+                            "dataIndex": "pr_spec",
+                            "width": 200,
+                            "xtype": "",
+                            "items": null
+                        }]
+                    }) ;   
+
+                }
+            },
+            //放大镜赋值关系 以及 tpl模板
+            'multidbfindtrigger[name=pd_prodcode]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'http://192.168.253.41:9480/api/document/product/getProductsByCondition',
+                        dbfinds:[{
+                            from:'pr_code',to:'pd_prodcode'
+                        },{
+                            from:'pr_unit',to:'pd_unit'
+                        }],
+                        dbtpls:[{
+                            field:'pr_code',width:100
+                        },{
+                            field:'pr_detail',width:100
+                        }],
+                        dbSearchFields:[{
+                            emptyText:'输入物料编号或物料名称',
+                            xtype : "textfield", 
+                            name : "search", 
+                            conditionExpression:"CONCAT(pr_code, pr_detail) like '{0}%'",
+                            allowBlank : true, 
+                            columnWidth : 0.25
+                        }],
                         dbColumns:[{
                             "text": "物料ID",
                             "flex": 0,

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

@@ -18,7 +18,7 @@ Ext.define('saas.view.test.order.FormPanel', {
     _auditUrl:'http://192.168.253.58:8800/purchase/audit',
     _deleteUrl:'http://192.168.253.58:8800/purchase/delete/',
     _deleteDetailUrl:'http://192.168.253.58:8800/purchase/deleteItem/',
-    initId:11,
+    initId:0,
 
     toolBtns: [{
         xtype: 'button',
@@ -146,7 +146,7 @@ Ext.define('saas.view.test.order.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }, 
                 text : "物料编号", 
                 width : 200.0,