本文最隻有控制層的代碼,界面設計部分看前一篇部落格。
使用者管理界面業務邏輯有點複雜,本人花了将近一周的時間才将所有代碼完善,其中參考了很多資料,也借鑒一些别人的東西,這中間遇到了很多問題,很感謝很多網友将自己的經驗發表出來供他人學習,我之前做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
}
});
}
});