Extjs4.X--开发后台管理系统--框架搭建

     在实际Ext项目开发中,主框架的搭建是关键,下面根据个人经验做一个简单的事例!

1.运行主界面如下图:

2、前台的JS文件,采用Ext4.X提供的MVC框架建立如下目录结构!

 (1)App.js  应用程序的入口

Ext.onReady(function(){
    Ext.QuickTips.init();
    Ext.Loader.setConfig({
        enabled : true
    });
    Ext.application({
        name : 'AM',
        appFolder : 'app',
            launch : function(){
                Ext.create('Ext.container.Viewport',{
                    layout :'fit',    
                    loadMask:{
                        msg : '正在加载,请稍后...'
                    },
                    items :
                    {
                        xtype : 'mainview'
                    }
                });
        },
        controllers : [ 'MainController']
    });
});
View Code

(2).MainView.js   主界面

Ext.define('AM.view.MainView',{
    extend:'Ext.panel.Panel',
    alias : 'widget.mainview',
    layout: 'border',
    items: [
    {
        title: '系统标题',
        region: 'north',    
        xtype: 'panel',
        margins:'0 0 5 0',
        tbar:[
            '->',
            '张三,欢迎您!',
            'Date:'+Ext.Date.format(new Date(),'Y-m-d'),
            {
                text:'修改密码'            
            },
            {
                text:'退出'            
            },
            {
                xtype:'displayfield',
                50
            }
            
        ]
    },
    {
        title: '操作菜单',
        region:'west',
        xtype: 'menutree',
        layout:'fit',
         margins:'0 0 1 1',
        split:true,
         180,
        maxWidth:250,
        collapsible: true
    },{
        region: 'center', 
        id:'centerId',
        xtype: 'tabpanel',
        margins:'0 1 1 0',
        layout: 'fit',
        items:[
            {
                title:'主界面',
                padding:10,
                html:'这里是系统简介!'
            }
        ]
    },{
        title: '系统版本及说明',
        region: 'south',    
        xtype: 'panel',
        split: true   
    }],
    initComponent : function(){
        this.callParent(arguments);
    }
});
View Code

(3).MenuView.js   左边菜单界面

Ext.define('AM.view.MenuView',{
    extend:'Ext.tree.Panel',
    alias : 'widget.menutree',
    store:'MenuStore',
    animate:true,
    rootVisible:false,
    initComponent : function(){
        this.callParent(arguments);
    }
});
View Code

(4).MenuModel.js   数据模型

Ext.define('AM.model.MenuModel',{
    extend:'Ext.data.Model',
    fields:['id','text','leaf','iconCls','url']
});
View Code

(5).MenuStore.js   数据集

Ext.define('AM.store.MenuStore',{
    extend:'Ext.data.TreeStore',
    fields:['id','text','leaf','href','url','iconCls'],
    proxy: {
         type: 'ajax',
         url: 'Tree/getTreeList.do'
    },
    reader : {
          type : 'json'
    },
    root: {
         text: '树根',
         id: '00',
         expanded: true
    },
    folderSort: true,
         sorters: [{
            property: 'id',
            direction: 'ASC'
     }]
});
View Code

(6).MainController.js   控制器

Ext.define('AM.controller.MainController',{
    extend : 'Ext.app.Controller',
    init : function(){
        var menuTree = null;
        this.control({
            'menutree':{
                render:function(t, eOpts){
                    menuTree = t;
                },
                beforeitemexpand:function(node, eOpts ){
                    Ext.apply(menuTree.getStore().proxy.extraParams,{
                        id:node.data.id
                    });
                },
                itemclick:function(tree, r, item, index, e, eOpts ){
                    /*var root = menuTree.getRootNode();
                    var childNode = root.getChildAt(index);
                    if(childNode.hasChildNodes())
                    {
                        alert('132');
                    }*/
                    if(r.raw.url!=null && r.raw.url!=''){
                    var tblPanel = tree.up('mainview').down('tabpanel[id=centerId]');
                    var panel = Ext.getCmp(r.raw.id);
                    if(!panel){
                        tblPanel.add(
                            {
                                id:r.raw.id,
                                title:r.raw.text,
                                closable:true,
                                iconCls:r.raw.iconCls,
                                html:"<iframe src="+BASEPATH+r.raw.url+" frameborder=0  scrolling='auto' width=100% height=100%></iframe>"
                            }
                        ).show();
                    }else{
                        panel.show();
                    }
                }
                }
            }
        });
    },
    views:[
        'MainView','MenuView'
    ],
    models:[
        'MenuModel'
    ],
    stores:[
        'MenuStore'
    ]
});
View Code

 2.左边菜单使用了动态加载方式,这里使用SpringMVC,在现实中菜单数据因保存在数据库中,为了省事这里只做模拟即可

package com.phome.spring.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.phone.spring.bean.TreeBean;
/**
 * 获取菜单列表
 * @author lenovo
 *
 */
@Controller
@RequestMapping("/Tree")
public class TreeListAction {
    @RequestMapping("/getTreeList")
    public void getTreeList(HttpServletRequest request,
            HttpServletResponse response,
            @RequestParam(value = "id", required = false) String id) {
        try {
            List<TreeBean> list = null;
            if (id == null || id.equals("00")) {
                list = new ArrayList<TreeBean>();
                list.add(new TreeBean("01", "系统设置", false,null));
                list.add(new TreeBean("02", "全局配置", false,null));
                list.add(new TreeBean("03", "商户管理", false,null));
            } else if (id.equals("01")) {
                list = new ArrayList<TreeBean>();
                list.add(new TreeBean("0101", "用户管理", true,"0101"));
                list.add(new TreeBean("0102", "角色管理", true,"0102"));
                list.add(new TreeBean("0103", "日志记录", true,"0103"));
            } else if (id.equals("02")) {
                list = new ArrayList<TreeBean>();
                list.add(new TreeBean("0201", "商户配置", true,"0201"));
                list.add(new TreeBean("0202", "终端配置", true,"0202"));
                list.add(new TreeBean("0203", "其他配置", true,"0203"));
            } else if (id.equals("03")) {
                list = new ArrayList<TreeBean>();
                list.add(new TreeBean("0301", "商户管理", true,"0301"));
                list.add(new TreeBean("0302", "指令管理", true,"0302"));
                list.add(new TreeBean("0303", "监控管理", true,"0303"));
            }
            if (list != null) {
                StringBuffer jsonStr = new StringBuffer("[");
                for (TreeBean tree : list) {
                    JSONObject jb = JSONObject.fromObject(tree);
                    jsonStr.append(jb).append(",");
                }
                jsonStr.deleteCharAt(jsonStr.length() - 1);
                jsonStr.append("]");
                response.setCharacterEncoding("utf-8");
                response.getWriter().write(jsonStr.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
View Code
原文地址:https://www.cnblogs.com/zhougaojun/p/3423464.html