zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C#跨线程调用:不同的窗体之间调用同一个控件
    C#窗体传值的集中方法,亲测可用,随便选
    图像处理中关于Blob的阈值的一些概念
    科幻小说
    汽车制造MES介绍之3 - AVI车辆识别与调度
    汽车制造MES介绍之4
    汽车制造MES介绍之2
    汽车制造MES介绍之1
    推荐几个学习英语的神器
    通过KEPWARE ODBC DRIVER和ADVANCED TAG 实现数据库和PLC的双向通信
  • 原文地址:https://www.cnblogs.com/zhougaojun/p/3423464.html
Copyright © 2011-2022 走看看