Browse Source

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

zhoudw 7 years ago
parent
commit
6362d55826

+ 1 - 1
applications/commons/commons-server/src/main/resources/mapper/HomePageMapper.xml

@@ -11,7 +11,7 @@
     </select>
 
     <select id="getPurchaseDataNow" parameterType="long" resultType="string">
-        select concat('[',GROUP_CONCAT(concat('{"x":"',si_vendname,'","y":',IFNULL(si_amount,0),'}')),']')  from statsinfo
+        select concat('[',GROUP_CONCAT(concat('{"x":"',si_vendname,'","y":',IFNULL(round(si_amount/10000,2),0),'}')),']')  from statsinfo
         where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='PURC' ORDER BY si_amount desc
     </select>
 

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/FundtransferMapper.xml

@@ -241,7 +241,7 @@
       <if test="companyId != null">
         and   Fundtransfer.companyId = #{companyId}
       </if>
-    </where>  order by ft_date desc
+    </where>  order by ft_date desc, ft_code desc
   </select>
 
   <select id="selectFundtransferListByCondition" resultMap="BaseResultMap">
@@ -256,6 +256,6 @@
       <if test="companyId != null">
         and   fundtransfer.companyId = #{companyId}
       </if>
-    </where>  order by ft_date desc
+    </where>  order by ft_date desc, ft_code desc
   </select>
 </mapper>

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/OthreceiptsMapper.xml

@@ -326,7 +326,7 @@
       <if test="companyId != null">
         and   othreceipts.companyId = #{companyId, jdbcType=INTEGER}
       </if>
-    </where>  order by or_date desc
+    </where>  order by or_date desc,or_code desc
   </select>
 
   <select id="selectOthreceiptsListByCondition" resultMap="BaseResultMap">
@@ -341,6 +341,6 @@
       <if test="companyId != null">
         and   othreceipts.companyId = #{companyId, jdbcType=INTEGER}
       </if>
-    </where>  order by or_date desc
+    </where>  order by or_date desc, or_code desc
   </select>
 </mapper>

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/OthspendingsMapper.xml

@@ -321,7 +321,7 @@
       <if test="companyId != null">
         and   othspendings.companyId = #{companyId}
       </if>
-    </where>  order by os_date desc
+    </where>  order by os_date desc, os_code desc
   </select>
 
   <select id="selectOthspendingsListByCondition" resultMap="BaseResultMap">
@@ -336,6 +336,6 @@
       <if test="companyId != null">
         and   othspendings.companyId = #{companyId}
       </if>
-    </where>  order by os_date desc
+    </where>  order by os_date desc,os_code desc
   </select>
 </mapper>

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -428,7 +428,7 @@
       <if test="companyId != null">
         and   paybalance.companyId = #{companyId}
       </if>
-    </where>  order by pb_date desc, order by pb_code
+    </where>  order by pb_date desc, pb_code desc
   </select>
 
   <select id="selectPaybalanceListByCondition" resultMap="BaseResultMap">
@@ -443,7 +443,7 @@
       <if test="companyId != null">
         and   paybalance.companyId = #{companyId}
       </if>
-    </where>  order by pb_date desc, order by pb_code
+    </where>  order by pb_date desc,pb_code desc
   </select>
 
   <select id="validateCodeWhenInsert" resultType="int">

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml

@@ -131,7 +131,7 @@
       <if test="companyId != null">
         and   recbalance.companyId = #{companyId}
       </if>
-    </where>  order by rb_date desc
+    </where>  order by rb_date desc,rb_code desc
   </select>
 
   <select id="selectRecbalanceListByCondition" resultMap="BaseResultMap">
@@ -146,7 +146,7 @@
       <if test="companyId != null">
         and   recbalance.companyId = #{companyId}
       </if>
-    </where>  order by rb_date desc
+    </where>  order by rb_date desc, rb_code desc
   </select>
 
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">

+ 9 - 0
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -89,6 +89,15 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
     },
 
     listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
         itemClick: function(view,record) {
             var me = this;
             var dbfinds = me.dbfinds;

+ 13 - 1
frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js

@@ -31,7 +31,19 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                 }
             }
          }
-	},
+    },
+    
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        }
+    },
 
     initComponent: function() {
         var me = this;

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

@@ -59,11 +59,13 @@ Ext.define('saas.view.core.form.FormPanel', {
             cls: 'x-formpanel-btn-orange',
             xtype: 'button',
             text: '新增',
+            hidden: true,
             bind: {
                 hidden: '{!id}'
             },
             handler: 'add'
         }, {
+            hidden: true,
             xtype: 'button',
             text: '复制',
             handler: 'onCopy',
@@ -71,6 +73,7 @@ Ext.define('saas.view.core.form.FormPanel', {
                 hidden: '{!'+ me._idField + '}',
             }
         }, {
+            hidden: true,
             xtype: 'button',
             text: '保存',
             handler: 'onSave',
@@ -80,6 +83,7 @@ Ext.define('saas.view.core.form.FormPanel', {
                 disabled: '{!base.valid || '+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}'
             }
         }, {
+            hidden: true,
             xtype: 'button',
             text: '删除',
             bind: {
@@ -87,6 +91,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             },
             handler: 'delete'
         }, {
+            hidden: true,
             xtype: 'button',
             bind: {
                 text: '{auditBtnText}',

+ 20 - 2
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -33,7 +33,24 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
     columnWidth: 1.0,
     showRowNum: true,
     autoQuery: true,
-    selModel: 'checkboxmodel',
+    selModel: {
+        checkOnly:true,
+        type:'checkboxmodel',
+        listeners:{
+            selectionchange:function(selModel,record,e){
+                var grid = selModel.view.ownerCt;
+                var statusField = grid.codeField.split('_')[0] + '_status';
+                var hasAudited = false;
+                var items = selModel.getSelected().items;
+                Ext.each(items, function(item, index){
+                    if(item.get(statusField)=='已审核'){
+                        hasAudited = true
+                    }
+                });
+                grid.ownerCt.getViewModel().setData({'deleteDisable':hasAudited});
+            }
+         }
+	},
 
     initComponent: function () {
         var me = this;
@@ -215,7 +232,8 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                     text: '删除',
                     handler: me.onDelete,
                     bind: {
-                        hidden: '{!deleteEnable}'
+                        hidden: '{!deleteEnable}',
+                        disabled: '{deleteDisable}'
                     }
                 }]
             }, {

+ 2 - 1
frontend/saas-web/app/view/core/query/QueryPanelModel.js

@@ -9,6 +9,7 @@ Ext.define('saas.view.core.query.QueryPanelModel', {
         printEnable: true, // 显示打印按钮
         importEnable: true, // 显示导入按钮
         closeEnable: true, // 显示关闭按钮
-        deleteEnable: true // 显示删除按钮
+        deleteEnable: true, // 显示删除按钮
+        deleteDisable:false //删除按钮是否可使用
     }
 });

+ 13 - 10
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -112,16 +112,19 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 hideTrigger: true,
                 mouseWheelEnabled: false,
                 minValue: 0
-            },{
-                xtype:'numberfield',
-                name:'bk_thisamount',
-                allowBlank:true,
-                fieldLabel:'当前余额',
-                hideTrigger: true,
-                mouseWheelEnabled: false,
-                beforeLabelTextTpl:'',
-                minValue: 0
-            },{
+            },
+            // {
+            //     xtype:'numberfield',
+            //     name:'bk_thisamount',
+            //     allowBlank:true,
+            //     fieldLabel:'当前余额',
+            //     hideTrigger: true,
+            //     mouseWheelEnabled: false,
+            //     beforeLabelTextTpl:'',
+            //     minValue: 0
+            // }
+            // ,
+            {
                 xtype:'combo',
                 name:'bk_type',
                 allowBlank:false,

+ 22 - 0
frontend/saas-web/app/view/document/kind/Kind.js

@@ -249,6 +249,28 @@ Ext.define('saas.view.document.kind.Kind', {
             reqUrl:'/api/account/role/save',
             updateUrl:'/api/account/role/update',
         },
+        accountinformation:{
+            columns: [{
+                text: '账户',
+                dataIndex: 'wh_code',
+                width: 200
+            },{
+                text: '账户',
+                dataIndex: 'wh_description',
+                width: 200
+            },{
+                text: '账户',
+                dataIndex: 'wh_type',
+                width: 200
+            },{  
+                text: '账户',
+                dataIndex: 'wh_status',
+                hidden:true,
+            }],
+            keyField:'id',
+            reqUrl: '/api/document/warehouse/save',
+            delUrl: '/api/document/warehouse/delete'
+        },
         warehouse:{
             columns: [{
                 text: '编号',

+ 27 - 0
frontend/saas-web/app/view/document/kind/KindModel.js

@@ -235,6 +235,33 @@ Ext.define('saas.view.document.kind.KindModel', {
                     });
                 }
             }
+        },  
+        accountinformation: {    
+            fields:[
+                {name: 'id', type: 'int'},
+                {name: 'rl_name',  type: 'string'}
+            ],
+            proxy: {
+                type: 'ajax',
+                url: '/api/document/productunit/list',
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data'
+                }
+            },
+            pageSize: null,
+            autoLoad: false,
+            listeners: {
+                beforeload: function (store, op) {
+                    Ext.apply(store.proxy.extraParams, {
+                        number: 1,
+                        size: 1000
+                    });
+                }
+            }
         },
         productunit: {    
             fields:[

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

@@ -310,6 +310,14 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                 text : "关联销售单号", 
                 dataIndex : "pd_salecode", 
                 width : 120.0
+            },{
+                text : "备注", 
+                dataIndex : "pd_remark",
+                width : 250, 
+                items : null,
+                editor : {
+                    xtype : "textfield"
+                },
             }
         ]
     }, {

+ 24 - 0
frontend/saas-web/app/view/sys/account/AccountInformation.js

@@ -0,0 +1,24 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.sys.account.AccountInformation', {
+    extend: 'saas.view.document.kind.Kind',
+    xtype: 'sys-account-accountinformation',
+    autoScroll: true,
+    layout:'fit',
+    defaultType:'accountinformation',
+    tbar: ['->',{
+        xtype:'button',
+        text:'刷新',
+        listeners: {
+            click: 'onRefresh'
+        }
+    }],
+    listeners:{
+        afterrender:function(p){
+            p.getViewModel().setData({title:'账户信息'});
+        }
+    }
+})
+
+

+ 8 - 4
frontend/saas-web/app/view/sys/config/FormPanel.js

@@ -115,12 +115,16 @@ Ext.define('saas.view.sys.config.FormPanel', {
         columnWidth : 0.25
     },{  
         bind:'{en_signet}',
-        xtype : "textfield", 
         name : "en_signet", 
         fieldLabel : "打印章上传", 
-        allowBlank : true, 
-        editable:false,
-        columnWidth : 0.25
+        allowBlank : false, 
+        columnWidth : 0.33,
+        xtype: 'filefield',
+        emptyText: '请选择图片',
+        buttonText: '',
+        buttonConfig: {
+            iconCls: 'x-fa fa-picture-o'
+        }
     },{  
         ignore:true,
         bind:'{updateTime}',

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

@@ -15,7 +15,7 @@ Ext.define('saas.view.sys.power.FormPanel', {
     frame:true,
     layout: 'border',
     autoScroll: true,
-    saveUrl:'/api/account/role/save/bind/resource',
+    saveUrl:'http://192.168.253.31:8560/api/account/role/save/bind/resource',
 
     items: [{
         title:'角色列表',

+ 246 - 36
frontend/saas-web/app/view/sys/power/GroupGrid.js

@@ -7,11 +7,6 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         'saas.view.sys.power.OtherField'
     ],
     xtype: 'power-grid',
-    plugins: {
-        cellediting: {
-            clicksToEdit: 1
-        }
-    },
     bind:{
         store: '{powergrid}'
     },
@@ -26,12 +21,12 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         collapseTip:null,
         collapsible:false,
         expandTip:null,
-		showSummaryRow: true,
+		showSummaryRow: false,
         startCollapsed: false,
         groupHeaderTpl: '{name}'+'模块'
 	})],
     initId:0,
-    dataUrl:'/api/account/role/power/resource',
+    dataUrl:'http://192.168.253.31:8560/api/account/role/power/resource',
     selModel:Ext.create('Ext.selection.CheckboxModel', {
         checkOnly: true,
         showHeaderCheckbox:false,
@@ -54,7 +49,7 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         header: '单据名称',
         dataIndex: 'groupName',
         xtype: '',
-        flex: 1.5,
+        flex: 2,
         stopSelection: false
     },{
         header: '查询',
@@ -63,7 +58,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('query');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('query',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '保存',
         dataIndex: 'add',
@@ -71,7 +90,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('add');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('add',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '修改',
         dataIndex: 'update',
@@ -79,7 +122,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('update');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('update',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '删除',
         dataIndex: 'delete',
@@ -87,7 +154,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('delete');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('delete',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '审核',
         dataIndex: 'audit',
@@ -95,7 +186,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('audit');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('audit',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '反审核',
         dataIndex: 'unAudit',
@@ -103,7 +218,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('unAudit');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('unAudit',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '导入',
         dataIndex: 'fileImport',
@@ -111,7 +250,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('fileImport');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('fileImport',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '导出',
         dataIndex: 'fileExport',
@@ -119,7 +282,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('fileExport');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('fileExport',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     }, {
         header: '打印',
         dataIndex: 'print',
@@ -127,7 +314,31 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         headerCheckbox: true,
         menuDisabled:true,
         flex: 1,
-        stopSelection: false
+        stopSelection: false,
+        onTitleElClick:function(a,b,c,d){
+            var me = this;
+            var records = me.ownerCt.ownerCt.store.data.items;
+            var first = 'null',isAllCheck = true;
+            Ext.Array.each(records,function(rec){
+                var data = rec.get('print');
+                if(data!=null&&(typeof data)=='boolean'){
+                    if(first=='null'){
+                        first = data;
+                    }else{
+                        if(first!=data){
+                            isAllCheck = false
+                        }
+                    }
+                    rec.set('print',!data)
+                }
+            });
+            if(isAllCheck){
+                me.setHeaderStatus(!first)
+            }
+        },
+        doUpdateHeaderState: function(e) {
+            return true;
+        }
     },{
         text: '其它',
         flex: 2.7,
@@ -149,15 +360,14 @@ Ext.define('saas.view.sys.power.GroupGrid', {
                 {name: 'groupId',type:'int'},
                 {name: 'groupName',type:'string'},
                 {name: 'moduleName',type:'string'},
-                {name: 'query',type:'bool'},
-                {name: 'add', type: 'bool'},
-                {name: 'delete', type: 'bool'},
-                {name: 'audit', type: 'bool'},
-                {name: 'update', type: 'bool'},
-                {name: 'unAudit', type: 'bool'},
-                {name: 'fileExport', type: 'bool'},
-                {name: 'fileImport', type: 'bool'},
-                {name: 'print', type: 'bool'},
+                {name: 'add'},
+                {name: 'delete'},
+                {name: 'audit'},
+                {name: 'update'},
+                {name: 'unAudit'},
+                {name: 'fileExport'},
+                {name: 'fileImport'},
+                {name: 'print'},
                 {name: 'other', calculate: function(data) {
                     var groupId = data['groupId'];
                     var other = data['other'];
@@ -200,7 +410,7 @@ Ext.define('saas.view.sys.power.GroupGrid', {
 
     listeners: {
         columnshow: 'onColumnToggle',
-        columnhide: 'onColumnToggle'
+        columnhide: 'onColumnToggle',
     },
     selectAllPower: function(record){
         var me = this;
@@ -213,15 +423,15 @@ Ext.define('saas.view.sys.power.GroupGrid', {
     },
     setAllOthers:function(record,bool){
         var data = {};
-        data.add = bool;
-        data.query = bool;
-        data.delete = bool;
-        data.audit = bool;
-        data.update = bool;
-        data.unAudit= bool;
-        data.fileExport= bool;
-        data.fileImport= bool;
-        data.print= bool;
+        data.add = record.get('add')==null?null:bool;
+        data.query = record.get('query')==null?null:bool;
+        data.delete = record.get('delete')==null?null:bool;
+        data.audit = record.get('audit')==null?null:bool;
+        data.update = record.get('update')==null?null:bool;
+        data.unAudit= record.get('unAudit')==null?null:bool;
+        data.fileExport= record.get('fileExport')==null?null:bool;
+        data.fileImport= record.get('fileImport')==null?null:bool;
+        data.print= record.get('print')==null?null:bool;
         var other=record.get('other');
         Ext.Array.each(other,function(o){
             o.checked=bool;

+ 41 - 0
frontend/saas-web/overrides/grid/column/CheckColumn.js

@@ -0,0 +1,41 @@
+Ext.define('saas.override.grid.column.CheckColumn', {
+    override: 'Ext.grid.column.Check',
+
+    defaultRenderer:function(value,cellValues,a,b,c,d,e,f){
+        var me = this,
+        cls = me.checkboxCls,
+        tip = '';
+        if (me.invert) {
+            value = !value;
+        }
+        if (me.disabled) {
+            cellValues.tdCls += ' ' + me.disabledCls;
+        }
+        if (value) {
+            cls += ' ' + me.checkboxCheckedCls;
+            tip = me.checkedTooltip;
+        } else {
+            tip = me.tooltip;
+        }
+        if (tip) {
+            cellValues.tdAttr += ' data-qtip="' + Ext.htmlEncode(tip) + '"';
+        }
+        if (me.useAriaElements) {
+            cellValues.tdAttr += ' aria-describedby="' + me.id + '-cell-description' + (!value ? '-not' : '') + '-selected"';
+        }
+        // This will update the header state on the next animation frame
+        // after all rows have been rendered.
+        me.updateHeaderState();
+        if(typeof value=='object'&&value==null){
+            cellValues.style = 'display: none;';
+            cellValues.tdCls += ' ' + me.disabledCls;
+            cellValues.innerCls = me.disabledCls;
+            cellValues.classes.push(me.disabledCls);
+            cellValues.cellRole = me.disabledCls;
+            return '<span style="display: none;" class="'+ me.disabledCls +'"></span>'
+        }
+
+        return '<span class="' + cls + '" role="' + me.checkboxAriaRole + '"' + (!me.ariaStaticRoles[me.checkboxAriaRole] ? ' tabIndex="0"' : '') + '></span>';
+    }
+
+});