天天看點

extjs 4.1 使用者管理控制層代碼

本文最隻有控制層的代碼,界面設計部分看前一篇部落格。

使用者管理界面業務邏輯有點複雜,本人花了将近一周的時間才将所有代碼完善,其中參考了很多資料,也借鑒一些别人的東西,這中間遇到了很多問題,很感謝很多網友将自己的經驗發表出來供他人學習,我之前做pb開發的時候很少發表部落格,遇到不會的到就到網上找别人的解決方法,感覺很應該将自己的東西拿出來也供别人學習和借鑒,同時也可以将知識梳理一遍,對自己對别人都有益處。我剛剛開始發表自己的blog,希望大家有什麼問題一起讨論,共同進步。

Ext.define('rm.controller.UserController', {
    extend: 'Ext.app.Controller',
    requires : [ 'Ext.ux.CheckColumn' ],
    models: [
             'OrgModel' ,
             'UserModel'
    ],
    stores: [
             'OrgStore' ,
             'UserStore'
    ],
    refs: [
    {
        ref: 'window',
        selector: 'UserMngMainView'
    }
    ],
    
    
    initWindow: function(component, eOpts) {
        //帶配置設定角色store配置
        var window =this.getWindow();
        var grd1=window.down('#grd1');
        var store1 = Ext.create('rm.store.GrantStore' ,{
            
            autoLoad: false,
            model: 'rm.model.GrantModel',
            storeId: 'notUserRoleGrantStore',
            
            proxy: {
                type: 'ajax',
                url: 'Grant/getNotUserRoleGrantsByUserId',
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }

        }  );
        grd1.reconfigure(store1);
        
        //已配置設定store配置
        var grd2=window.down('#grd2');
        var store2 = Ext.create('rm.store.GrantStore' ,{
            autoLoad: false,
            model: 'rm.model.GrantModel',
            storeId: 'UserRoleGrantStore',
            
            proxy: {
                type: 'ajax',
                url: 'Grant/getUserRoleGrantsByUserId',
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }
        }  );
        grd2.reconfigure(store2);
        //待配置設定機構
        var grd3=window.down('#grd3');
        var store3 = Ext.create('rm.store.GrantStore' ,{
            autoLoad: false,
            model: 'rm.model.GrantModel',
            storeId: 'NotUserOrgGrants',
            
            proxy: {
                type: 'ajax',
                url: 'Grant/getNotUserOrgGrantsByUserId',
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }
        }  );
        grd3.reconfigure(store3);    
        //已配置設定機構
        var grd4=window.down('#grd4');
        var store4 = Ext.create('rm.store.GrantStore' ,{
            autoLoad: false,
            model: 'rm.model.GrantModel',
            storeId: 'UserOrgGrants',
            
            proxy: {
                type: 'ajax',
                url: 'Grant/getUserOrgGrantsByUserId',
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }
        }  );
        grd4.reconfigure(store4);    
        //加載機構store
        Ext.getStore('OrgStore').load();
        
        var orgcbx = window.down("#orgcbx");
        var orgStore = orgcbx.getStore( );
        orgStore.on("load",function(store,records,successful,eOpts){
            this.insert(0,{hospcode:'0000',hospname:'全部'});
            
        },orgStore);        
        
        
        
//        this.refresh();
    },
    refresh :function(  button, e, eOpts){
        
    
        var window = this.getWindow();
        var userGrid = window.down('#userGrid');
        var userForm = window.down('#userForm');
        var userStore = userGrid.getStore();
        this.userId=userForm.down('textfield[name=userId]').getValue();    
        var hospcode = window.down('#queryForm').down("combobox[name=hospcode]").getValue( );
         if (typeof hospcode =='undefined' || hospcode=='0000'||hospcode=='' ||hospcode==null){
             hospcode='%';
         }
        Ext.apply(userStore.proxy.extraParams, {hospcode :hospcode});
        userStore.load({
            scope: this,
            callback: function(records, operation, success) {
                if (success==true){
                    if(this.userId!=''){
                        var window = this.getWindow();
                        var userGrid = window.down('#userGrid');
                        var userStore = userGrid.getStore();
                        
                        var row=userStore.find('userId',this.userId);
                        if (row>=0){
                            userGrid.getSelectionModel( ).select(row);
                        }
                        
                        
                    }
                    
                }
            }
        });
    },
    getUsersByHospcode : function( combobox, newValue, oldValue,  eOpts ){
 
    this.refresh(  );
//        var window = this.getWindow();
//        var userGrid = window.down('#userGrid');
//        var userStore = userGrid.getStore();
//         if(newValue=='0000'){
//             newValue='%';
//         }
//        Ext.apply(userStore.proxy.extraParams, {hospcode :newValue });
//        userStore.load({
//            scope: userStore,
//            callback: function(records, operation, success) {
//                if (success==true){
//                    
//                }
//            }
//        });
    },
    
    filterUsers :function( field, newValue,oldValue,eOpts ){
        var window = this.getWindow();
        var userGrid = window.down('#userGrid');
        var userStore = userGrid.getStore();
        userStore.clearFilter();
        userStore.filter([
            {
                filterFn: function(item) {
                    return item.get("squn").toLowerCase().indexOf(newValue.toLowerCase() ) >=0   ;
                }
            }
        ]);
        
    },
    getInfos : function(dataview, record, item, index, e, eOpts) {  
        var window = this.getWindow();
        var userForm=window.down("form[itemId=userForm]");
//        userForm.down("radiofield[name=status]").setValue(true);
        //擷取userInfo
        userForm.load({
            scope:this,
            url : 'User/getUserByUserId',         
            params:{userId : record.data.userId },     
            success:function(form,action){
                form.__origin=action.result.data;
                form.__isNew = undefined
                var window=this.getWindow();
                var form = window.down("form[itemId=userForm]");
                var userId = form.down("field[name=userId]");
                userId.setReadOnly(true);
                
                
            },
            failure:function(form,action){           
                
            }            
        });
        //擷取待配置設定角色
        var grd1 =  window.down("#grd1");
        var grd1_store =  grd1.getStore();
        grd1_store.proxy.extraParams={userId : record.data.userId };
        grd1_store.load({
            scope: grd1_store,
            callback: function(records, operation, success) {
                if (success==true){
                    this.each(function(b) {
                        b.__isNew = true;
                    })
                }
            }
        });
        //已配置設定角色
        var grd2 =  window.down("#grd2");
        var grd2_store =  grd2.getStore();
        grd2_store.proxy.extraParams={userId : record.data.userId };
        grd2_store.load({
            scope: grd2_store,
            callback: function(records, operation, success) {
                if (success==true){
                    this.each(function(b) {
                        b.__origin = Ext.apply({}, b.data);
                        b.__isNew = undefined;
                    })
                }
            }
        });        
        //待配置設定機構
        var grd3 =  window.down("#grd3");
        var grd3_store =  grd3.getStore();
        grd3_store.proxy.extraParams={userId : record.data.userId };
        grd3_store.load({
            scope: grd3_store,
            callback: function(records, operation, success) {
                if (success==true){
                    this.each(function(b) {
                        b.__isNew = true;
                    })
                }
            }
        });
        //已配置設定機構
        var grd4 =  window.down("#grd4");
        var grd4_store =  grd4.getStore();
        grd4_store.proxy.extraParams={userId : record.data.userId };
        grd4_store.load({
            scope: grd4_store,
            callback: function(records, operation, success) {
                if (success==true){
                    this.each(function(b) {
                        b.__origin = Ext.apply({}, b.data);
                        b.__isNew = undefined;
                    })
                }
            }
        });            
    },    
    addUserRoleGrant:function(/*dataview, record, item, index, e, eOpts*/) {  

        var window = this.getWindow();
        var grd1 = window.down('#grd1');
        var grd1_store = grd1.getStore();
        var grd2 = window.down('#grd2');
        var grd2_store = grd2.getStore();
        var records = grd1.getSelectionModel( ).getSelection( ) ;
        grd1_store.remove( records  );  
        grd2_store.insert( grd2_store.getCount( )  ,  records );
        
    },
    delUserRoleGrant:function(/*dataview, record, item, index, e, eOpts*/) {
        var window = this.getWindow();
        var grd1 = window.down('#grd1');
        var grd1_store = grd1.getStore();
        var grd2 = window.down('#grd2');
        var grd2_store = grd2.getStore();
        var records = grd2.getSelectionModel( ).getSelection( ) ;
        
        grd2_store.remove( records  );
        grd1_store.insert( grd1_store.getCount( )  ,  records );
    },    
    addUserOrgGrant:function(dataview, record, item, index, e, eOpts) {  
        var window = this.getWindow();
        var grd3 = window.down('#grd3');
        var grd3_store = grd3.getStore();
        var grd4 = window.down('#grd4');
        var grd4_store = grd4.getStore();
        var records = grd3.getSelectionModel( ).getSelection( ) ;
        grd3_store.remove( records  );
        grd4_store.insert( grd4_store.getCount( )  ,  records );
    
    },
    delUserOrgGrant:function(dataview, record, item, index, e, eOpts) {   
        var window = this.getWindow();
        var grd3 = window.down('#grd3');
        var grd3_store = grd3.getStore();
        var grd4 = window.down('#grd4');
        var grd4_store = grd4.getStore();
        var records = grd4.getSelectionModel( ).getSelection( ) ;
        grd4_store.remove( records  );
        grd3_store.insert( grd4_store.getCount( )  ,  records );
    },
    clear :function(){
        var window =this.getWindow();
        window.down('#grd1').getStore().removeAll();
        window.down('#grd2').getStore().removeAll();
        window.down('#grd3').getStore().removeAll();
        window.down('#grd4').getStore().removeAll();
        window.down('#userForm').getForm().loadRecord(Ext.create(  "rm.model.UserModel") );
        window.down('#userForm').getForm().__isNew=true;
        window.down('#userForm').getForm().__origin=undefined;
        window.down('#userForm').down("field[name=userId]").setReadOnly(false);  
        
    },
    save:function(deleteFalg){
        var window =this.getWindow();
        var baseForm=window.down('#userForm').getForm();
        var grd2 = window.down('#grd2');
        var grd2_store = grd2.getStore();
        var grd4 = window.down('#grd4');
        var grd4_store = grd4.getStore();
        var deleteRerords = [];
        //搜集user資訊
        
        var user ;
        
        if (  typeof deleteFalg =='boolean' && deleteFalg){
            user = baseForm.__origin;
            user.deleteFlag = true;    
            
        }else{
            if ( baseForm.isDirty( )) {
            user = baseForm.getFieldValues();
        
            if (!baseForm.__isNew ){
                user.origin  = baseForm.__origin
            }
            
        }

        }
        //1搜集角色授權資訊
        var m=[],n=[],d=[];
        //1.1擷取新增或修改的記錄
        var j=grd2_store.getCount();
        for(i=j-1;i>=0;i--){
 
            record=grd2_store.getAt(i);
            data = Ext.apply({},record.data )
            
            if(record.dirty){
                
                if(record.__isNew){
                    n.push(data);
                }else{
                    data.origin=record.__origin;
                    m.push(data);
                }
            }else if( record.__isNew ){
                n.push(data);
            }
 

        }
        //1.2擷取删除的記錄
        deleteRerords = grd2_store.getRemovedRecords( );
        for(i=0 ;i<deleteRerords.length;i++){
            
            if( !deleteRerords[i].__isNew ){
                d.push(deleteRerords[i].__origin);
                
            }
            
        }
    
        
        //2搜集機構授權資訊
        var m1=[],n1=[],d1=[];
        //2.1擷取新增或修改的記錄
        var j=grd4_store.getCount();
        for(i=j-1;i>=0;i--){
 
            record=grd4_store.getAt(i);
            data = Ext.apply({},record.data )
            
            if(record.dirty){
                
                if(record.__isNew){
                    n1.push(data);
                }else{
                    data.origin=record.__origin;
                    m1.push(data);
                }
            }else if( record.__isNew ){
                n1.push(data);
            }
 

        }
        //2.2擷取删除的記錄
        deleteRerords = grd4_store.getRemovedRecords( );
        for(i=0 ;i<deleteRerords.length;i++){
            
            if( !deleteRerords[i].__isNew ){
                d1.push(deleteRerords[i].__origin);
                
            }
            
        }

        var parms={
                   user :Ext.encode(user),
                   userRoles:Ext.encode({
                           adds : n,
                        dels : d,
                        mods : m
                   }),
                   userOrgs:Ext.encode({
                       adds : n1,
                       dels : d1,
                       mods : m1                       
                   })
        };
        if (user==null && n.length==0&& d.length==0&& m.length==0&& n1.length==0&& d1.length==0&& m1.length==0) return
        //ajax送出資料
        Ext.Ajax.request({
            scope: this,
            url:   'User/saveUserInfo',
            params: parms,
            success : function(response, options){
                   if (  typeof deleteFalg =='boolean' && deleteFalg){
                       this.clear();
                   }

                this.refresh( );
            }
        });
        
 
        
    },
    del : function(){
        
        var window = this.getWindow();
        var baseForm=window.down('#userForm').getForm();
        var userName=window.down('#userForm').down('textfield[name=userName]').getValue();    
        var userId=window.down('#userForm').down('textfield[name=userId]').getValue();    
 
        if (!baseForm.__isNew ){
            Ext.Msg.show({
                title: '系統提示',
                msg: "你确認現在删除操作員["+userId+":"+userName+"]的資訊嗎?</br>該操作員相關的授權也将被同時删除!!",
                buttons: Ext.Msg.YESNOCANCEL,
                scope : this,
                fn :function(btn){  
                    if(btn=='yes'){
                        var grd2 = window.down('#grd2');
                        grd2.getSelectionModel().selectAll();
                        this.delUserRoleGrant();
                        var grd4 = window.down('#grd4');
                        grd4.getSelectionModel().selectAll();
                        this.delUserOrgGrant();
                        this.save(true);
                    }

                }
            
            });
        }else{
            this.clear();
        }
    },
    init: function(application) {
        //添加全局變量
        Ext.applyIf(this, {
            userId : ''
        });
    


        this.control({
            "UserMngMainView": {
                afterrender:function(){
                    this.initWindow();
                    this.refresh();
                }
            } ,
            "UserMngMainView gridpanel[itemId=userGrid]": {
                select: this.getInfos
            } ,
            "UserMngMainView gridpanel[itemId=grd1]": {
                itemdblclick: this.addUserRoleGrant
            } ,
            "UserMngMainView gridpanel[itemId=grd2]": {
                itemdblclick: this.delUserRoleGrant
            } ,
            "UserMngMainView gridpanel[itemId=grd3]": {
                itemdblclick: this.addUserOrgGrant
            } ,
            "UserMngMainView button[itemId=btn1]": {
                click: this.addUserRoleGrant
            } ,
            "UserMngMainView button[itemId=btn3]": {
                click: function(){
                    var window = this.getWindow();
                    var grd1 = window.down('#grd1');
                    grd1.getSelectionModel().selectAll();
                    this.addUserRoleGrant();
                }
            } ,
            "UserMngMainView button[itemId=btn2]": {
                click: this.delUserRoleGrant
            } ,

            "UserMngMainView button[itemId=btn4]": {
                click: function(){
                var window = this.getWindow();
                var grd2 = window.down('#grd2');
                grd2.getSelectionModel().selectAll();
                this.delUserRoleGrant();
                }
            } ,
            
            
            "UserMngMainView button[itemId=btn5]": {
                click: this.addUserOrgGrant
            } ,
            
            "UserMngMainView button[itemId=btn7]": {
                click: function(){
                    var window = this.getWindow();
                    var grd3 = window.down('#grd3');
                    grd3.getSelectionModel().selectAll();
                    this.addUserOrgGrant();
                }
            } ,
            
            "UserMngMainView button[itemId=btn6]": {
                click: this.delUserOrgGrant
            } ,

            "UserMngMainView button[itemId=btn8]": {
                click: function(){
                    var window = this.getWindow();
                    var grd4 = window.down('#grd4');
                    grd4.getSelectionModel().selectAll();
                    this.delUserOrgGrant();
                }
            } ,
            
            "UserMngMainView gridpanel[itemId=grd4]": {
                itemdblclick: this.delUserOrgGrant
            } ,
            
            "UserMngMainView combobox[itemId=orgcbx]": {
                 change : this.getUsersByHospcode
            } ,
            
             "UserMngMainView textfield[itemId=userfield]": {
                 change : this.filterUsers
            } ,
            
            "UserMngMainView button[action=addAction]": {
                click: this.clear
            } ,
            
            "UserMngMainView button[action=refreshAction]": {
                click:  this.refresh
                
            } ,
            
            "UserMngMainView button[action=saveAction]": {
                click:  this.save
            } ,
            
            "UserMngMainView button[action=delAction]": {
                click:  this.del
            }
            });
    }

});