常规功能和模块自定义系统 (cfcmms)—042模块Grid的排序和筛选

042模块Grid的排序和筛选

  一、排序

  Grid界面排序可以点击列头直接来进行,这个是很方便。但是还有二个问题需要解决:无法取消排序至默认,单字段和多字段排序不可以方便切换。为了解决这二个功能,在pagingtoolbar的前面加了一个SplitButton按钮来控制这二个操作。

  在上面的图片中可以看出,新增了一个按钮,下面有一些菜单来控制grid的排序的一些功能。并且显示当前排序的字段以及顺序。下面即是这个控件的源码,这个控件应该可以适用于任何的grid之中。并不是本系统专用。

/**
 *
 * grid 里面控制排序的一些功能,主要有 单一字段排序,多字段排序,清除排序字段
 *
 */
Ext
		.define(
				'app.module.widget.GridSortButton',
				{
					extend : 'app.ux.ButtonTransparent',
					alias : 'widget.gridsortbutton',
					iconCls : 'x-fa fa-sort-amount-asc',
					tooltip : '排序设置',
					listeners : {
						menushow : function(button, menu, eOpts) {
							var grid = button.up('grid'), store = grid.getStore();
							for (var i = menu.items.length - 1; i > 0; i--)
								if (menu.items.getAt(i).sortfield)
									menu.remove(menu.items.getAt(i), true);
							if (store.getSorters().length === 0) {
								menu.items.getAt(0).setDisabled(true);
								menu.items.getAt(4).setVisible(false);
								menu.items.getAt(5).setVisible(false);
							} else {
								menu.items.getAt(0).setDisabled(false);
								menu.items.getAt(4).setVisible(true);
								menu.items.getAt(5).setVisible(true);
								store
										.getSorters()
										.each(
												function(sort) {
													var menuText = sort.getProperty();
													Ext.each(grid.getColumns(), function(column) {
														if (column.dataIndex == sort.getProperty()) {
															menuText = column.menuText;
															return false;
														}
													});
													menu
															.add({
																text : menuText,
																iconCls : sort.getDirection() == 'ASC' ? 'x-fa fa-sort-amount-asc'
																		: 'x-fa fa-sort-amount-desc',
																sortfield : true
															})
												})
							}
						}
					},
					menu : {
						items : [ {
							text : '恢复默认排序',
							handler : function(button) {
								var store = button.up('grid').getStore();
								store.getSorters().removeAll();
								store.load();
							}
						}, '-', {
							text : '单字段排序',
							xtype : 'menucheckitem',
							checked : true,
							group : 'sorttype',
							handler : function(button) {
								var grid = button.up('grid'), store = grid.getStore();
								grid.multiColumnSort = false;
								if (grid.lockedGrid) {
									grid.lockedGrid.multiColumnSort = false;
									grid.normalGrid.multiColumnSort = false;
								}
								store.getSorters().removeAll();
							}
						}, {
							text : '多字段排序',
							xtype : 'menucheckitem',
							group : 'sorttype',
							handler : function(button) {
								var grid = button.up('grid'), store = grid.getStore();
								grid.multiColumnSort = true;
								if (grid.lockedGrid) {
									grid.lockedGrid.multiColumnSort = true;
									grid.normalGrid.multiColumnSort = true;
								}
							}
						}, '-', {
							text : '当前排序'
						} ]
					},

					initComponent : function() {
						this.callParent(arguments);
					}
				});

  二、筛选条件的显示和清除。

  Grid列头中提供了筛选条件设置的地方,但是显示和清除都不太方便,为此又做了一个按钮来管理这二个功能。

  在选择了一些筛选条件之后,会在下面的按钮里体现出来。

/**
 *
 * grid 里面控制筛选的一些功能,显示筛选条件,清除筛选条件
 *
 */
Ext.define('app.module.widget.GridFilterButton', {
	extend : 'app.ux.ButtonTransparent',
	alias : 'widget.gridfilterbutton',
	iconCls : 'x-fa fa-filter',
	tooltip : '筛选条件设置',
	listeners : {
		menushow : function(button, menu, eOpts) {
			var grid = button.up('grid'), store = grid.getStore();
			for (var i = menu.items.length - 1; i > 0; i--)
				if (menu.items.getAt(i).filterfield)
					menu.remove(menu.items.getAt(i), true);
			if (store.getFilters().length === 0) {
				menu.items.getAt(0).setDisabled(true);
				menu.items.getAt(1).setVisible(false);
				menu.items.getAt(2).setVisible(false);
			} else {
				menu.items.getAt(0).setDisabled(false);
				menu.items.getAt(1).setVisible(true);
				menu.items.getAt(2).setVisible(true);
				store.getFilters().each(
						function(filter) {
							var menuText = filter.dataIndex;
							Ext.each(grid.getColumns(), function(column) {
								if (column.dataIndex == filter.getProperty()) {
									menuText = column.menuText;
									return false;
								}
							});
							menu.add({
								text : menuText + ' '
										+ button.changeOperatorToText(filter.getOperator())
										+ ' <span style="color:blue;">' + filter.serialize().value
										+ "</span>",
								iconCls : 'x-fa fa-filter',
								filterfield : true
							})
						})
			}
		}
	},
	menu : {
		items : [ {
			text : '清除所有筛选条件',
			iconCls : 'x-fa fa-eraser',
			handler : function(button) {
				button.up('grid').filters.clearFilters()
			}
		}, '-', {
			text : '当前筛选条件'
		} ]
	},

	initComponent : function() {
		this.callParent(arguments);
	},

	changeOperatorToText : function(operator) {
		switch (operator) {
		case 'gt':
			return '大于';
		case 'lt':
			return '小于';
		case 'eq':
			return '等于';
		case 'like':
			return '包含文字';
		}
		return operator;
	}

});
时间: 2024-08-09 02:48:48

常规功能和模块自定义系统 (cfcmms)—042模块Grid的排序和筛选的相关文章

常规功能和模块自定义系统 (cfcmms)—015模块自定义概述(2权限)

常规功能和模块自定义系统 (cfcmms)-015模块自定义概述(2权限) 模块的权限的自定义也是这个系统的重要部分.在本系统中现在模块的权限有三大类:模块操作权限.记录可视范围限定.附加操作权限. 模块操作权限:可以对模块进行浏览.新增.修改.删除.审核.审批等的设置.可以通过生成和隐藏相应的按钮来具体控制权限的设置.如某人无删除权限,则在该模块的操作界面上没有删除按钮.对于一般的管理系统而言这些功能基本上是够用了. 记录可视范围限定:可以在任意模块加上可视范围的限定.在某个父模块上加上可视范

常规功能和模块自定义系统 (cfcmms)—041模块附加字段和新的Grid方案设计器

041模块附加字段和新的Grid方案设计器 在整个自定义系统,模块附加字段也是有必要的.对于一个模块来说附加的字段有二种,一种是父模块中的字段,另一种是子模块中的聚合字段.在模块记录生成sql语句的时候,只是生成了该模块的所有基本字段和其直接父模块的id和name的字段.不可能将所有父模块的字段都加进去,只能指定一些必需的字段加入到sql语句中.比如在获取订单数据的时候,最基本的sql语句中只包括了目的的市和始发地市的信息,如果要在grid中显示始发地省和目的地省就需要设置一下附加字段,这是一种

常规功能和模块自定义系统 (cfcmms)—043模块导航功能的重构(1)

043模块导航功能的重构(1) 模块导航即基于grid的条件限定.可以明确在导航树中导航条件,以及在该导航条件之下当前模块的记录数.在选中某个导航记录时,grid的数据会更新为该导航所设置的条件中.(这个功能应该是一个很好的功能,为什么现在还不太流行呢.可能是我见识的软件太少了) 导航作为引导用户浏览和筛选数据的功能,由于每一个导航记录上都标有记录数,可以很好的体现模块数据的分布情况(为了完成这个目的,可以加入每个导航的记录的百分比).现在来看看现在系统中的一些已有的导航功能. 更加复杂一点的导

常规功能和模块自定义系统 (cfcmms)—044模块导航功能的重构(2)

044模块导航功能的重构(2) 经过分析,可以将一级导航的数据类型分为以下几类: 1.模块实际字段值:例如对于"省份"模块,所属区域是其一个字符串字段,里面放着各个区域的名称. 2.父模块的导航:例如对于"市"模块,可以用省来对其进行导航. 3.某个数值字段的数值区间:可以自定义数值区间来完成分组.经过配置可以完成更加复杂的分组. 4.日期字段根据年,月,日来进行分分组,再可以扩展到比如说最近半月,最近一月,最近半年等的分组. 对于数值字段和日期字段的分组,可以是基

常规功能和模块自定义系统 (cfcmms)—007Extjs的配置文件和自定义ui

常规功能和模块自定义系统 (cfcmms)-007Extjs的配置文件和自定义ui 一.在自动生成的项目中,文件 app.json 是整个前台系统的配置文件,可以在里面增加或修改配置参数来完成相应的功能.该文件的部分参数如下: { "name": "cfcmms", //项目命名空间 "version": "1.0.0.0", //项目版本号 "indexHtmlPath": "index.htm

常规功能和模块自定义系统 (cfcmms)—018自定义grid方案(2)

常规功能和模块自定义系统 (cfcmms)-018自定义grid方案(2) 下面来看看在系统中如何定义一个grid方案.当前定义grid方案也是采用对记录模块操作的方式,并没有采用所见即所得得的设计方式,以后有时间将会修改成所见即所得得方式. 上图中可以看到在进入了"模块列表方案"后,会显示所有的模块的列表方案,在导航里选择了"省份"这后,会只显示省份的2个列表方案.每个方案都有若干个字段组,选中一条记录以后,按"列表字段分组"可以看到当前方案的

常规功能和模块自定义系统 (cfcmms)—009主界面和菜单的展示和控制(1)

常规功能和模块自定义系统 (cfcmms)-009主界面和菜单的展示和控制(1) 先从主界面和菜单.主tab标签以及一些附加的设置说起. 一个比较传统的管理软件中,一般会包括一个顶部区域.底部区域.菜单条(树状菜单)和主操作区域.本系统亦是如此,只是增加了一点灵活控制的地方.首先来看看本系统中的界面布局和extjs的类之间的对应关系,extjs中的面象对象的功能已经比较完善了,现在开发b/s程序就和我以前用组件开发delphi系统差不多,建好一个个组件类,然后直接使用即可. 和主界面.菜单相关的

常规功能和模块自定义系统 (cfcmms)—008测试试用版(6.0.0)下载及使用

常规功能和模块自定义系统 (cfcmms)-008测试试用版(6.0.0)下载及使用 在经过了一些调试和优化后,现在可以下载和测试试用版(6.0.0).在这个版中本主界面和菜单改用了mvvm方式来显示和控制. 程序和数据下载地址:http://pan.baidu.com/s/1c0sIGPq 所用到的java包下载地址:http://pan.baidu.com/s/1kTF5cIN 安装说明: 程序和数据下载好后解压缩,在eclipse中导入即可.数据库采用mysql,先用命令 CREATE S

常规功能和模块自定义系统(cfcmms)—004可自定义的项目

常规功能和模块自定义系统(cfcmms)-004可自定义的项目 可以在前台浏览器里可进行的配置项目如下图: 版权声明:本文为博主原创文章,未经博主允许不得转载.