SouchTouch JS 报表显示分页、锁定左侧列

最近公司移动端app项目需要做一个报表

技术需求:涉及extjs和souchTouch,主要使用Ext.grid.GridView和Ext.grid.plugin.SummaryRowView实现

功能设计:

  1. 无需查询条件,在移动端上新增一个报表菜单,欠费报表
  2. 欠费统计表列:小区、楼、单元、室、客户名称、客户类型、联系电话、用热状态、采暖面积、年数、总金额、xxxx-xxxx(2017-2016)欠,xxxx-xxxx欠.......、黑名单性质、催缴记录
     3.需要合计统计列,按每列分开统计,统计列:欠费总金额、xxxx-xxxx欠,xxxx-xxxx欠......

开发接口调用: xxxxxxx.java中的processQueryOweUncalledCustomer

代码实现:

1.view部分

Ext.define('app.arrearStatistics.arrearsReportView', {
	extend : 'Ext.Container',
	id : 'arrearsReportView',
	xtype : 'arrearsReportView',	
	requires : ['app.arrearStatistics.arrearsReportLeftGrid','app.arrearStatistics.arrearsReportRightGrid'],
	config : {
		layout : 'hbox',
		title : '欠费报表',
		store : 'arrearsReportStore',
		items : [{
			xtype : "panel",
			layout : 'hbox',
			flex : 1,
			items : [{
				xtype : "arrearsReportLeftGrid",
				width : '100px',
				zIndex : 1
			}, {
				xtype : "arrearsReportRightGrid",
				flex : 1
			}]
		}]
	}
});
2.store部分

Ext.define('app.arrearStatistics.arrearsReportStore', {
	extend : 'app.lib.ext.zoomkey.listStore',
	config : {
		sorters : [{
			property : 'id',
			direction : 'ASC'
		}],
		pageSize : 10,//每页显示的条数
		storeId : 'arrearsReportStore',
		fields : ["areaName", 'buildingNo', "houseNo", "roomNo","cusName","cusTypeName","mobile","heatStatus","heatingArea","yearSum","oweMoneySum","blackType" , "2016-2017_", "2015-2016_", "2014-2015_", "2013-2014_","2012-2013_", "2011-2012_", "2010-2011_"],
		proxy : getProxy('/app.ao?method=processQueryOweUncalledCustomer')
	}
});
3.LeftGrid、RightGrid

Ext.define('app.arrearStatistics.arrearsReportLeftGrid', {
	extend : 'Ext.grid.Grid',
	xtype : 'arrearsReportLeftGrid',
	id : 'arrearsReportLeftGrid',
	config : {
		titleBar : false,
		store : 'arrearsReportStore',
		isHideMask : true,
		plugins : [{
			xclass : 'Ext.grid.plugin.SummaryRow',
			docked : 'bottom'
		}
		,{//更多页加载
			loadMoreText : '显示更多',
			noMoreRecordsText : '没有更多',
			autoPaging : true,
			xclass : 'Ext.plugin.ListPaging'
		}
		],
		scrollable : {
			// 滚动效果动量大小
			momentumEasing : {
				// 动量设置
				momentum : {
					acceleration : 30,
					friction : 0.5
				},
				// 反弹效果
				bounce : {
					acceleration : 0.0001,
					springTension : 0.9999
				}
			},
			// 滚动超出页面范围
			outOfBoundRestrictFactor : 0,
			// 隐藏滚动条样式
			indicators : false
		},
		listeners : {
			initialize : function() {
				var leftScroller = Ext.getCmp('arrearsReportLeftGrid').getScrollable().getScroller();
				leftScroller.on({
					scroll : function(scoll, x, y) {
						// 滚动右边的滚动条
						var rightList = Ext.getCmp('arrearsReportRightGrid');
						var rightListScroll = rightList.getScrollable().getScroller();
						// 屏蔽右侧grid的x轴滚动
						rightListScroll.scrollTo(null, y);
					},
					scope : this
				});
			},
			itemtap : function(dataView, index) {
				var rightList = Ext.getCmp('arrearsReportRightGrid');
				rightList.select(index);
			}
		},
		columns : [{
			id : 'arrearsReportLeftColumn',
			text : '客户名称',
			sortable : false,
			dataIndex :'cusName',
//			xtype : 'templatecolumn',
			summaryType : 'sum',
			width : 100,
			summaryRenderer : function(value) {
				return '合计';
			}
		}]
	}
});

Ext.define('app.arrearStatistics.arrearsReportRightGrid', {
	extend : 'Ext.grid.Grid',
	xtype : 'arrearsReportRightGrid',
	id : 'arrearsReportRightGrid',
	config : {
		titleBar : false,
		store : 'arrearsReportStore',
		isHideMask : true,
		plugins : [{
			xclass : 'Ext.grid.plugin.SummaryRow',
			docked : 'bottom'
		}
		,{
			xclass : 'Ext.plugin.ListPaging'
				,
				loadMoreText : '',
				noMoreRecordsText : ''
					,
				autoPaging : true
		}
		],
		scrollable : {
			// 滚动效果动量大小
			momentumEasing : {
				// 动量设置
				momentum : {
					acceleration : 30,
					friction : 0.5
				},
				// 反弹效果
				bounce : {
					acceleration : 0.0001,
					springTension : 0.9999
				}
			},
			// 滚动超出页面范围
			outOfBoundRestrictFactor : 0
		},
		listeners : {
			initialize : function() {
				var rightScroller = Ext.getCmp('arrearsReportRightGrid').getScrollable().getScroller();
				rightScroller.on({
					scroll : function(scoll, x, y) {
						// 滚动左边的滚动条
						var leftList = Ext.getCmp('arrearsReportLeftGrid');
						var leftListScroll = leftList.getScrollable().getScroller();
						// 同步左侧grid的y轴滚动,屏蔽x轴滚动
						leftListScroll.scrollTo(null, y);
					},
					scope : this
				});
			},
			itemtap : function(dataView, index) {
				var leftList = Ext.getCmp('arrearsReportLeftGrid');
				leftList.select(index);
			}},
			columns : [{
				text: '小区',
				dataIndex: 'areaName',
				width :100
			},{
				text: '楼',
				dataIndex: 'buildingNo',
				width : 100
			},{
				text: '单元',
				dataIndex: 'houseNo',
				width : 100
			},{
				text: '室',
				dataIndex: 'roomNo',
				width : 100
			},{
				text: '客户类型',
				dataIndex: 'cusTypeName',
				width : 100
			},{
				text: '联系电话',
				dataIndex: 'mobile',
				width : 150
			},{
				text: '用热状态',
				dataIndex: 'heatStatus',
				width : 100
			},{
				text: '采暖面积',
				dataIndex: 'heatingArea',
				width : 150
			},{
				text: '年数',
				dataIndex: 'yearSum',
				width : 100
			},{
				text: '总额',
				dataIndex: 'oweMoneySum',
				width : 150,
				summaryType : 'sum',
				summaryRenderer : function(value) {
				return zeroFormat(value);
			},
			renderer : function(value) {
				return zeroFormat(value);
			}
			},{
				text: '黑名单',
				dataIndex: 'blackType',
				width : 150
			},{
				text: '2016-2017欠',
				dataIndex: '2016-2017_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			},{
				text: '2015-2016欠',
				dataIndex: '2015-2016_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			},{
				text: '2014-2015欠',
				dataIndex: '2014-2015_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			},{
				text: '2013-2014欠',
				dataIndex: '2013-2014_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			},{
				text: '2012-2013欠',
				dataIndex: '2012-2013_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			},{
				text: '2011-2012欠',
				dataIndex: '2011-2012_',
				summaryType : 'sum',
				width : 150,
			summaryRenderer : function(value) {
			return zeroFormat(value);
		},
		renderer : function(value) {
			return zeroFormat(value);
		}
			}
			]
	}
});

4.app.js文件中记得注册声明

'Ext.grid.plugin.SummaryRow'
'app.arrearStatistics.arrearsReportView'
'app.arrearStatistics.arrearsReportStore'

5.数据处理:保留2位小数,0或者undefined显示“-”

function zeroFormat(value){
	var valueTwo;
	if(value == 0 || value == undefined){
		valueTwo = '-';
	}else{
		valueTwo = value.toFixed(2);
	}
	return valueTwo;
}
6.效果图




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
锁定表头及固定左边,原生JS原创代码 需要注意的问题: 1.表格的宽度以及表格每一的宽度需要固定(特殊情况除外:当表格数少并且表格总宽度明显小于表格父容器的宽度时,也就是表格不存在自动换行的问题) 2.表格父容器尺寸大小改变时,需要调用 setBoxSize 方法,目的是判断父容器是否出现滚动条 1.1 修正了对IE6、IE7的兼容问题 1.2 修正了固定行、的样式问题 1.3 IE6/IE7浏览器 不启用该功能 1.4 增加了拆分线, 修正了重复生成锁定的问题以及生成错位的问题, 修正了行、事件无法复制的问题, 增加了IE6/IE7/IE8 启用设置参数(ieLowVersionEnabled: true|false) ,默认不启用, 注:IE6/7/8锁定表头 由于兼容性问题,有些情况下会有一些错位的问题 1.5 增加了 显示/隐藏功能,修正了非IE浏览器下宽错位问题 1.6 修正了当有合并单元格时,锁定单元格错位的问题,修正了表格行数较多时的性能问题 1.7 表格单元格可以不指定宽度(锁定时,取实际的单元格宽度),当单元格的左右两边的borderWidth不一样时,会有一些错位 若单元格宽度是固定的,可以在第3个参数(config)中指定 isFixedSize:true 修正表头锁定的Bug 1.8 修正表格含有thead时的样式丢失问题,以及行数设置问题,修正thead/tbody行归属问题 1.9 移除tbTopLeft的边框线 修正表格cellpadding/cellspacing的设置问题 修复Firefox下的padding导致的错位问题 修复thead复制没有底部分割线的问题 修复thead复制时无背景色的问题 增加复选框同步功能(如果是JS代码设置复选框选中,需要调用 .setCheckBoxSync()方法) .setCheckBoxSync 方法参数说明:4种参数 1) 复选框控件(html object)数组 2) 复选框控件(html object) 3) 复选框控件ID (string) 4) 空参数(尽量不用空参数)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值