主要步骤:
第一步:
布局
/*************主面板开始***********************/
var mainPanel = new Ext.Panel({
id : "mainPanel",
layout : "border",
items:[{
region:"north",
height:100,
layout:"fit",
frame:true,
items:headPanel
},{
region:"south",
height:30,
layout:"fit",
frame:true,
items:footPanel
},
{
/*frame:true,*/
region:"west",
width:200,
title:"菜单",
lines:false,
autoScroll: true,
layout:"fit",
// 可收缩面板
collapsible: true,
// 可拉动边框
split:true,
items:menuPanel
},{
region:"center",
layout:"fit",
items:centerPanel
}]
});
/*************主面板结束***********************/
new Ext.Viewport({items:mainPanel,layout:'fit'});
第二部:
左边菜单面板Accordion布局,动态添加面板和面板的树
var menuPanel = new Ext.Panel({
id:"menuPanel",
layout:"accordion",//布局
layoutConfig: {
// activeOnTop: true, //设置打开的字面板置顶
fill: true, //字面板充满父面板的剩余空间
hideCollapseTool: false, //显示“展开收缩”按钮
titleCollapse: true, //允许通过点击子面板的标题来展开或者收缩面板
animate: true, //使用动画效果
autoWidth:true
},
listeners :{
"beforerender":function(){
Ext.Ajax.request({
url:"/LibrarySystem/menu/Menu_getMenus",
//传输的json格式:[{'id':'1','iconCls':'setting','text':'系统管理','leaf':false},{'id':'3','iconCls':'team','text':'人员管理','leaf':false},{'id':'7','iconCls':'book1','text':'图书管理','leaf':false},{'id':'19','iconCls':'bookdetail1','text':'借阅管理','leaf':false},{'id':'9','iconCls':'bookp0','text':'图书借阅','leaf':false},{'id':'27','iconCls':'message0','text':'通知信息','leaf':false}]
success:function(res){
//如果服务器返回的json串是一个数组
var obj = Ext.decode(res.responseText);
for(var i = 0;i<obj.length;i++){
var treePanel = createTree(obj[i].id); //创建一棵树,并且将树的id传递给树根(根节点就是 和accordion的子面板的属性一样,此处必须用菜单的id作为节点id)
menuPanel.add({ //添加accordion布局的子面板,并添加其属性
id:"menu"+obj[i].id,//面板id,为了和树节点区分所以在前面加了一个menu
title:obj[i].text,//现实的菜单内容
iconCls:obj[i].iconCls,//自定义图标
items:treePanel//将树面板放到accordion子面板中
});
}
menuPanel.doLayout();
}
});
},
}
});
----------------右侧主要显示区域 Tab面板-------------------
var centerPanel = new Ext.Panel({
id:"centerPanel",
layout : "fit",
items:mainTabPanel
});
var mainTabPanel = new Ext.TabPanel({
/* 内容 */
id : "mainTabPanel",
margins:"0 10 0 0",
/*title : "内容",*/
xtype : "tabpanel",
activeTab : 0,
items : [ {
id : "welcome",
title : "欢迎页面",
iconCls : 'application_homeIcon',
layout : "fit",
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/welcome/welcome.html></iframe>',
} ]
});
-------------------创建根节点----------------------------------
function createRoot(id){
return new Ext.tree.AsyncTreeNode({
text : "菜单根节点",
id : id,
leaf : false
});
---------------------创建子节点-----------------------------------------
function createTree(id){
return new Ext.tree.TreePanel({
root : createRoot(id),
loader : mainLoader, //自动请求服务器,返回子节点
//子节点返回数据格式:[{'id':'4','iconCls':'role','text':'人员角色管理','leaf':true},{'id':'5','iconCls':'userIcon','text':'人员账号管理','leaf':true},{'id':'6','iconCls':'position','text':'人员信息管理','leaf':true},{'id':'10','iconCls':'username','text':'个人信息管理','leaf':true},{'id':'11','iconCls':'password','text':'修改密码','leaf':true},{'id':'25','iconCls':'log','text':'人员管理日志','leaf':true}]
border:false,
lines:false,
rootVisible : false,
enableTabScroll:true,
listeners : {
click : function(node, event) {
event.stopEvent();// 阻止默认的事件
if (node.isLeaf()) {
// 叶子节点事件处理
var tab = Ext.getCmp("mainTabPanel");
// 此处可以进行ajax请求,获取autoLoad的路径
//ajax请求url路径
Ext.Ajax.request({
url : "/LibrarySystem/menu/Menu_getMenusById",
params: { id:node.id},
success: function(response){
var resultObject = Ext.decode(response.responseText);
var resultStateEnd = resultObject.url.split(".")[1];
if(resultStateEnd=="jsp" || resultStateEnd=="html"){
tab.add({
id : node.id + "Tab",
title : node.text,
iconCls:resultObject.iconCls,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src='+resultObject.url+'></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}else{
tab.add({
id : node.id + "Tab",
title : node.text,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}
},
failure: function(){
Ext.Msg.show({
title:"警告",
msg:"请求数据失败",
buttons:Ext.Msg.OK,
icon: Ext.MessageBox.WARNING
});
tab.add({
id : node.id + "Tab",
title : node.text,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}
});
} else {
// 单击菜单显示或者隐藏
node.toggle();
}
}
}
});
}
Ext.onReady(function(){
/** **************树根开始****************************** */
function createRoot(id){
return new Ext.tree.AsyncTreeNode({
text : "菜单根节点",
id : id,
leaf : false
});
}
var mainLoader = new Ext.tree.TreeLoader({
url : "/LibrarySystem/menu/Menu_getMenus",
baseParams : {
id:""
}
});
mainLoader.on("beforeload", function(loader, node) {
loader.baseParams.id = (node.id == "root" ? "":node.id );
});
/****************树根结束****************************** */
/*************头部面板开始***********************/
var headPanel = new Ext.Panel({
id:"headPanel",
autoLoad:"/LibrarySystem/app/foot/head.html"
});
/*************头部面板开始***********************/
/*************尾部面板开始***********************/
var footPanel = new Ext.Panel({
id:"footPanel",
autoLoad:"/LibrarySystem/app/foot/foot.html"
});
/*************尾部面板结束***********************/
/*************主要内容面板开始***********************/
var mainTabPanel = new Ext.TabPanel({
/* 内容 */
id : "mainTabPanel",
margins:"0 10 0 0",
/*title : "内容",*/
xtype : "tabpanel",
activeTab : 0,
items : [ {
id : "welcome",
title : "欢迎页面",
iconCls : 'application_homeIcon',
layout : "fit",
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/welcome/welcome.html></iframe>',
} ]
});
var centerPanel = new Ext.Panel({
id:"centerPanel",
layout : "fit",
items:mainTabPanel
});
var menuPanel = new Ext.Panel({
id:"menuPanel",
layout:"accordion",
layoutConfig: {
// activeOnTop: true, //设置打开的字面板置顶
fill: true, //字面板充满父面板的剩余空间
hideCollapseTool: false, //显示“展开收缩”按钮
titleCollapse: true, //允许通过点击子面板的标题来展开或者收缩面板
animate: true, //使用动画效果
autoWidth:true
},
listeners :{
"beforerender":function(){
Ext.Ajax.request({
url:"/LibrarySystem/menu/Menu_getMenus",
success:function(res){
//如果服务器返回的json串是一个数组
var obj = Ext.decode(res.responseText);
for(var i = 0;i<obj.length;i++){
var treePanel = createTree(obj[i].id);
menuPanel.add({
id:"menu"+obj[i].id,
title:obj[i].text,
iconCls:obj[i].iconCls,
items:treePanel
});
}
menuPanel.doLayout();
}
});
},
}
});
/*************主要内容面板结束***********************/
function createTree(id){
return new Ext.tree.TreePanel({
root : createRoot(id),
loader : mainLoader,
border:false,
lines:false,
rootVisible : false,
enableTabScroll:true,
listeners : {
click : function(node, event) {
event.stopEvent();// 阻止默认的事件
if (node.isLeaf()) {
// 叶子节点事件处理
var tab = Ext.getCmp("mainTabPanel");
// 此处可以进行ajax请求,获取autoLoad的路径
//ajax请求url路径
Ext.Ajax.request({
url : "/LibrarySystem/menu/Menu_getMenusById",
params: { id:node.id},
success: function(response){
var resultObject = Ext.decode(response.responseText);
var resultStateEnd = resultObject.url.split(".")[1];
if(resultStateEnd=="jsp" || resultStateEnd=="html"){
tab.add({
id : node.id + "Tab",
title : node.text,
iconCls:resultObject.iconCls,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src='+resultObject.url+'></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}else{
tab.add({
id : node.id + "Tab",
title : node.text,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}
},
failure: function(){
Ext.Msg.show({
title:"警告",
msg:"请求数据失败",
buttons:Ext.Msg.OK,
icon: Ext.MessageBox.WARNING
});
tab.add({
id : node.id + "Tab",
title : node.text,
html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
closable : true
});
// 显示当前打开的面板
tab.setActiveTab(node.id + "Tab");
}
});
} else {
// 单击菜单显示或者隐藏
node.toggle();
}
}
}
});
}
/*************主面板开始***********************/
var mainPanel = new Ext.Panel({
id : "mainPanel",
layout : "border",
items:[{
region:"north",
height:100,
layout:"fit",
frame:true,
items:headPanel
},{
region:"south",
height:30,
layout:"fit",
frame:true,
items:footPanel
},
{
/*frame:true,*/
region:"west",
width:200,
title:"菜单",
lines:false,
autoScroll: true,
layout:"fit",
// 可收缩面板
collapsible: true,
// 可拉动边框
split:true,
items:menuPanel
},{
region:"center",
layout:"fit",
items:centerPanel
}]
});
/*************主面板结束***********************/
new Ext.Viewport({items:mainPanel,layout:'fit'});
});