`
zccst
  • 浏览: 3322785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ExtJS三级联动菜单

 
阅读更多
一、前端js代码
// JavaScript Document

Ra.ServerFailsInfo.bydepart = function(grid_id,level,department,product,service){

	/********************  公共  ************************/
	var store = {
		'department' : new Ext.data.JsonStore({
			url: 'api/list_k.php?action=department',
			fields: ['name']}), 
		'product' : new Ext.data.JsonStore({
			url: 'api/list_k.php?action=product',
			fields: ['name']}), 
		'service' : new Ext.data.JsonStore({
			url: 'api/list_k.php?action=service',
			fields: ['name']})
	};
	
	// 从服务器获取查询结果
	// 先设置jsonStore,然后load
	var jsonStore = new Ext.data.JsonStore({
        url: 'api/fail_parts_bydepart.php',
		listeners:{
            'loadexception' : function(e){
				alert(e.toString());
            }
        },
        fields: [
			{name: 'name'},
			{name: 'flash'},
			{name: 'percent'}
			
        ]
    });
	//仅执行一次(打开时tab时默认)
	jsonStore.load({params:{
		'level'	: 'all',
		'department' : department,
		'product': product,
		'service': service
	}});

	
	
	// 定义一个对象,用于向服务器端传值
	var paras = {};                   
	paras.view_level = '公司级别';
	
	
	// 表体 —— tbar
	var tbar_depart = new Ext.Toolbar({
	    items :[{
			xtype: 'tbtext',
			text : "查看级别:"
		   },'-',
		   
		new Ext.form.ComboBox({
			id : 'failparts-view_level',
			store: ['公司级别','部门级别','产品线级别','子分类级别'],
			allowBlank:false,
			triggerAction: 'all',
			width :100,
			displayValue :'部门级别',
			value :'部门级别',
			name : 'view_level',
			listeners : {
				'select' : function(obj, data, index){
					// obj是combobox对象,data是用户选择的值,index是索引(0,1,2...)
					vlevel = data.data.text;// 用户选择的值,此处为何是text,而不是name?
					paras.view_level = data.data.text;
					Ext.getCmp('failparts-form-department').clearValue();//通过id得到一个Component对象
					paras.department = '';  // 部门
					Ext.getCmp('failparts-form-product').clearValue();
					paras.product = '';     // 产品线
					Ext.getCmp('failparts-form-service').clearValue();
					paras.service = '';     // 子分类
					switch(vlevel){
						case '公司级别':
							Ext.getCmp('failparts-form-department').setVisible(false); 		
							Ext.getCmp('failparts-form-product').setVisible(false);  
							Ext.getCmp('failparts-form-service').setVisible(false); 		
							break;
						case '部门级别':
							Ext.getCmp('failparts-form-department').setVisible(true); 		
							Ext.getCmp('failparts-form-product').setVisible(false);  
							Ext.getCmp('failparts-form-service').setVisible(false); 		
							break;
						case '产品线级别':
							Ext.getCmp('failparts-form-department').setVisible(true); 		
							Ext.getCmp('failparts-form-product').setVisible(true);  
							Ext.getCmp('failparts-form-service').setVisible(false); 		
							break;
						case '子分类级别':
							Ext.getCmp('failparts-form-department').setVisible(true); 		
							Ext.getCmp('failparts-form-product').setVisible(true);  
							Ext.getCmp('failparts-form-service').setVisible(true); 		
							break;
						default:
							Ext.getCmp('failparts-form-department').setVisible(true); 		
					}
				}
			}
			}),'-',

		
		new Ext.form.ComboBox({
			id : 'failparts-form-department',
			allowBlank:false,
			store: store['department'], // 引用store
			displayField:'name',
			triggerAction: 'all',
			hidden : true,
			emptyText:'请选择部门',
			width :110,
			name : 'department',
			listeners : {
				'select' : function(obj, data, index){
					paras.department = data.data.name; //此处为何是name,而不是text?
					if(paras.view_level == '产品线级别' ||paras.view_level == '子分类级别'){
						store.product.baseParams = {'department' : encodeURIComponent(data.data.name)};
						store.product.load();
						Ext.getCmp('failparts-form-product').clearValue();
						Ext.getCmp('failparts-form-product').setVisible(true);  
					}
				}	
			}
		}),
		
		
		new Ext.form.ComboBox({
				id : 'failparts-form-product',
				store: store.product,  // 引用store
				displayField:'name',
				hidden : true,
				width    : 120,
				emptyText:'请选择产品线',
				triggerAction: 'all',
				name : 'product',
				listeners : {
					'select' : function(obj, data, index){
						paras.product = data.data.name;
						if(paras.view_level == '子分类级别'){
							store.service.baseParams = {  //把字符串作为 URI 组件进行编码
								'product' : encodeURIComponent(data.data.name),
								'department' : paras.department
							};
							store.service.load();
							Ext.getCmp('failparts-form-service').clearValue();
							Ext.getCmp('failparts-form-service').setVisible(true);
						}
					}
				}
		}),

		new Ext.form.ComboBox({
			id : 'failparts-form-service',
			store: store.service,  // 引用store
			displayField:'name',
			hidden : true,
			emptyText:'请选择子分类',
			width    : 200,
			triggerAction: 'all',
			name : 'service',
			listeners : {
				'select' : function(obj, data, index){
					paras.service = data.data.name;
				}
			}
		}),
		
		{
			iconCls		:	'search',
			text	: '<b>更新内容</b>',
			handler	: function() {
				switch(paras.view_level) {
					case '公司级别':
						var level = 'all';
						break;
					case '部门级别':
						var level = 'department';
						break;
					case '产品线级别':
						var level = 'product';
						break;
					case '子分类级别':
						var level = 'service';
						break;
					default:
						break;
				}
				if ( level == 'department' && paras.department == '' ) {
					Ext.Msg.alert('友情提示','请选择要查询的部门!');
					return;
				}
				if ( level == 'product' && (paras.department == '' || paras.product == '') ) {
					Ext.Msg.alert('友情提示','请选择要查询的部门-产品线!');
					return;
				}
				if ( level == 'service' && (paras.department == '' || paras.product == '' || paras.service == '' ) ) {
					Ext.Msg.alert('友情提示','请选择要查询的部门-产品线-子分类!');
					return;
				}
				// 获取选择的值
				//Ext.Msg.alert(level,paras.department + ', ' + paras.product + ', ' + paras.service);
				jsonStore.load({params:{
					'level'	: level,
					'department' : paras.department,
					'product': paras.product,
					'service': paras.service
				}});
			}
		},'->',
			Baidu.Ra.Excel(grid_id)
		]
	});
	
	
	// 表格面板的列模型
	var cm = new Ext.grid.ColumnModel([
		{header:'机型',dataIndex:'model',width:100,sortable:true}
		,{header:'部件类型',dataIndex:'parts_type',width:100,sortable:true}
		,{header:'部件总数量',dataIndex:'total',width:100,sortable:true}
		,{header:'故障数量',dataIndex:'num',width:100,sortable:true}
		,{header:'故障率',dataIndex:'percent',width:100,sortable:true}
	]);
	
	// 表格面板。也有Ext.FormPanel
	var panel = new Ext.grid.GridPanel({
		baseCls: 'x-plain',
		id:grid_id,
		title:'按部门统计',
		closable:true,
		cm:cm,
		store:jsonStore,
		loadMask: {
            msg: '数据获取中,请稍候...'
        },
		tbar:tbar_depart,
		region:'center'
	});
	CompanyName.Ra.tabCon.add(panel);
    CompanyName.Ra.tabCon.activate(panel);
}


二、后端php代码
require "CompanyName/Rss/Common/config.inc";
require "CompanyName/Util/util.inc";
require "CompanyName/Rss/Module/db.inc";
require	"CompanyName/Rss/Control/func.inc";
$idc	= urldecode(companyName_get_data(B_REQUEST, 'idc'));
$dep	= urldecode(companyName_get_data(B_REQUEST, 'department'));
$finance= urldecode(companyName_get_data(B_REQUEST, 'finance'));
$product= urldecode(companyName_get_data(B_REQUEST, 'product'));
$action	= urldecode(companyName_get_data(B_REQUEST, 'action'));
$iden	= urldecode(companyName_get_data(B_REQUEST, 'iden'));

$suffix	= date("Ym", time());
$table 	= "service_list";
switch($action){
  case 'service' :
	  $sql = "select distinct service as name from $table where department='$dep'";
	  if($product != '[全部]'){
		  $sql .= " and product='$product'";
	  }
	  break;
  case 'product' :
	  $sql = "select distinct product as name from $table where 1";
	  if($dep != '[全部]'){
		  $sql .= " and department='$dep'";
	  }
	 break;
  case 'getflag':
  	  break;
  default:
	  $sql = "select distinct department as name from $table";
}
$sth = $pdo->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print json_encode($result);



三、数据库PDO
//在另一个config.php文件中,用define(key, value);方式设置用户名密码等。
$dsn = sprintf("mysql:host=%s;dbname=%s;port=%d;charset=%s", DB_HOST, DB_NAME, DB_PORT, DB_CHARSET);
try{
	$pdo = new PDO($dsn, DB_USER, DB_PASSWORD);
	$pdo->query("set names " . DB_CHARSET);
}catch(PDOException $e){
	error_log($e->getMessage());
}

$dsn = sprintf("mysql:host=%s;dbname=%s;port=%d;charset=%s", DB_HOST_BUDGET, DB_NAME_BUDGET, DB_PORT, DB_CHARSET);
try{
    $pdo_budget = new PDO($dsn, DB_USER, DB_PASSWORD);
	$pdo_budget->query("set names " . DB_CHARSET);
}catch(PDOException $e){
    error_log($e->getMessage());
}


四、companyName_get_data方法
define('B_GET', 	0);
define('B_POST', 	1);
define('B_REQUEST',2);
define('B_COOKIE', 	3);
function companyName_get_data($method=B_REQUEST, $name, $filter="B_RAW"){
	switch($method){
	case B_GET:
		$ret = isset($_GET[$name])? $_GET[$name] : NULL;
		break;
	case B_POST:
		$ret = isset($_POST[$name])? $_POST[$name] : NULL;
		break;
	case B_REQUEST:
		$ret = isset($_REQUEST[$name])? $_REQUEST[$name] : NULL;
		break;
	case B_COOKIE:
		$ret = isset($_COOKIE[$name])? $_COOKIE[$name] : NULL;
		break;
	default:
		$ret = NULL;
		break;
	}
	return $ret;
}

/* bool redirect_and_exit($url)
 *  this function alone for the reason to handle of done url 
 * @para : the full url (scheme :// host / path / script ? query # anchor);
 */
function redirect_and_exit($url){
	header("Location:$url");
	exit();
}



如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    Extjs4.0 ComboBox如何实现三级联动

    很多网友在问,Extjs4.0 ComboBox如何实现,好在之前用3.x实现过一个三级联动,如今用Extjs4.0来实现同样的联动效果。其中注意的一点就是,3.x中的model:’local’在Extjs4.0中用queryMode: ‘local’来表示,而且在...

    Extjs4---combobox省市区三级联动+struts2

    在这个特定的项目“Extjs4---combobox省市区三级联动+struts2”中,我们将探讨如何利用ExtJS 4的ComboBox组件实现省市区的三级联动效果,并结合Struts2框架进行数据交互。 首先,`ComboBox`是ExtJS中的一个组件,它...

    extjs+struts2省市区三级联动完整示例

    在本文中,我们将深入探讨如何使用ExtJS 4和Struts2框架实现省市区三级联动的完整示例。这个示例适用于需要在Web应用程序中实现地理区域选择功能的情况,例如用户地址输入。以下是对该技术栈及其实现方法的详细说明...

    Extjs 轻松实现下拉框联动

    最近小弟做了Extjs实现实现下拉框联动的效果,参考了好久才学会,闲下来发一个简单的例子。。呵呵

    ExtJS Combobox二级联动列子

    下面我们将详细讨论如何在ExtJS中实现Combobox的二级联动。 一、基础概念 1. Combobox:ExtJS中的Combobox是FormPanel的一个字段,它结合了文本输入框和下拉列表,提供了一种选择或输入数据的方式。 2. 二级联动:...

    JSP页面下拉框三级联动

    其中,JSP(JavaServer Pages)页面中的下拉框三级联动功能,是一种常见的需求,用于处理多级分类数据的选择,如国家-省份-城市的选择。本文将深入解析如何在JSP页面中实现下拉框的三级联动功能,以及其背后的实现...

    地区选择插件——三级联动

    NULL 博文链接:https://ruohanfly.iteye.com/blog/2183068

    ExtJs学习例子:多级联动下拉菜单演示例子

    一共3个文件: ...getData.asp data.mdb 前台采用ExtJs 2.2.1编写(由于库文件比较大,考虑到大家本机都有了,所以在此没有上传,大家直接改一下路径即可),后台采用asp+access...本例子演示的4级联动菜单:州+国家+城市+地区

    ExtJS5树形菜单

    在ExtJS5中,树形菜单(Tree Menu)是一种常见的UI组件,它允许用户以层次结构的方式展示数据,非常适合用于目录浏览、文件系统导航或者复杂的组织结构展示。在本篇文章中,我们将深入探讨ExtJS5树形菜单的使用方法...

    extjs的ComboBox 2级联动

    本文将深入探讨如何在ExtJS中实现ComboBox的二级联动。 首先,我们需要理解ExtJS中的ComboBox基本结构。ComboBox由几个关键部分组成,包括store(数据存储)、displayField(显示字段)和valueField(值字段)。...

    Extjs动态加载菜单

    动态加载菜单是ExtJS中的一个关键特性,它允许在用户交互过程中动态地创建、修改和加载菜单项,提供了更灵活的用户界面设计。在“Extjs动态加载菜单”这个主题中,我们将深入探讨这一功能的实现方式以及相关技术。 ...

    基于vs2010的省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs) 示例源代码

    它提供了在Visual Studio 2010环境下,使用ASP.NET、jQuery和ExtJS三种不同JavaScript框架实现省市区三级联动的DropDownList控件,并通过Ajax技术进行异步数据加载的示例。 首先,ASP.NET是Microsoft提供的一个强大...

    EXTJS4 菜单栏

    EXTJS4的菜单栏设计灵活,可自定义程度高,支持多级菜单、图标、分隔符等元素,为开发者提供了丰富的API和配置选项。 菜单栏在EXTJS4中的实现主要基于`Ext.menu.Menu`类。这个类提供了一个容器,可以容纳多个菜单项...

    extjs4.2 desktop 拓展

    总结来说,ExtJS 4.2 Desktop 拓展是一个集成了多种桌面特性并优化了基础框架的解决方案,它提供了图标换行、窗口拖动、多级开始菜单等功能,使得开发复杂的Web应用变得更加简单和直观。通过下载提供的LinBDesk4.2...

    Extjs3+MySQL后台数据库实现省份城市二级联动

    本文将深入探讨如何使用ExtJS 3结合MySQL来实现一个省份城市二级联动的前端与后台系统。 首先,ExtJS 3提供了丰富的组件和API,使得开发者可以轻松创建各种复杂的用户界面,如下拉菜单、表格、表单等。在这个案例中...

    extjs4 导航菜单实例

    这篇博客文章“extjs4 导航菜单实例”将深入探讨如何在ExtJS 4中创建和使用导航菜单,这对于构建具有层次结构和动态功能的用户界面至关重要。 在ExtJS中,导航菜单通常通过`Ext.menu.Menu`类来实现,这是一个可弹出...

    WPF首页框架(仿extjs左菜单、联动Tab主页)

    2仿Extjs的左菜单,可动态绑定数据集,采用fontawesome作为图片; 3左菜单联动的中间部分的Tab控件,Tab页可关闭。 补充:该项目用vs2012运行。 准备修改积分的,原代码找不到了,麻烦管理员将这个资源删除,...

Global site tag (gtag.js) - Google Analytics