/** * @author herong 可编辑多记录组件 */ var CFWEGlt = _FW.fCreateClass(); /** * 可编辑多记录组件API */ CFWEGlt.prototype = { fInitialize : function(options) { }, /** * 多记录列表数据显示完毕后调用自定义函数 * @param String sListID(必需) 多记录表的配置ID名称 * @param String sFunName(必需) 自定义的函数名 * @return true、false *
* 使用举例:
* CFW.oEGlt.doLoad(ListID,'myfun') ;
* function myfun(){}
* 或
* CFW.oEGlt.doLoad(ListID,CBxgx.oComm.myfun) ;
*
*/
doLoad : function (sListID, sFunName) {
if(CFW.oValid.fnIsNull(sListID,"CFW.oEGlt.doLoad 多记录表的配置ID名称")){
return false;
}
if(CFW.oValid.fnIsNull(sFunName,"CFW.oEGlt.doLoad 自定义的函数名")){
return false;
}
var target = eval('document.all.' + sListID);
var opts = null;
if (jQuery.data(target, 'fwdatagrid') != null) {
opts = jQuery.data(target, 'fwdatagrid').options;
} else {
opts = jQuery.data(target, 'fweditgrid').options;
}
var fun = window[sFunName];
if (typeof sFunName == 'function') {
fun = sFunName;
}
opts.onLoadSuccess = fun;
return true;
},
/**
* 行选择函数
* 改变选中行的颜色或是单击某行记录的任何地方进行勾选
* 主要是配合 doClick、doDblClick使用
* @param String sListID(必需) 只读多记录表单的配置ID
* @param int rowindex(必需) 行序号(从0开始)
* @param String type(必需) 应用的类型字符串例如:row=s|input=checkbox
* 其中 row 属性表示行的颜色需要改变
* 若 row=n 表示不需要改变行颜色
* 若 row=s 表示单选行只改变选中行的颜色
* 若 row=m 表示只要选中都改变颜色
* input 属性表示选择行后勾选框的勾选上
* 若 input=checkbox 表示多选框
* 若 input=radio 表示单选框
*
* 使用举例:
* 1.改变行颜色而且是单选行,若列表有勾选框不自动勾选
* var sMark='row=s'
* CFW.oEGlt.fnSelectedRows('zhcx_grjbzltest3',0,sMark);
* 2.改变行颜色,若列表有勾选框自动勾选
* var sMark='row=s|input=checkbox'
* CFW.oEGlt.fnSelectedRows('zhcx_grjbzltest3',0,sMark);
*
*/
fnSelectedRows : function(sListID,rowindex,type){
if(CFW.oValid.fnIsNull(sListID,"CFW.oEGlt.fnSelectedRows 多记录表单的配置ID")){
return ;
}
if(CFW.oValid.fnIsNull(rowindex,"CFW.oEGlt.fnSelectedRows 行序号")){
return ;
}
if(CFW.oValid.fnIsNull(type,"CFW.oEGlt.fnSelectedRows 应用的类型字符串")){
return ;
}
var grid =$('#'+sListID);
var tmp,chk,arry1,arry2,sRow='',sInput='';
var str = type.toLowerCase();
if(str==''||str==null){
str='row=s|input=checkbox';
}
arry1 = str.split('|');
for(var i=0;i
* 使用方法举例:
* var rowDatas=[
* {
* "ETEXT":"20011502","RDATE":"2111-11-02",
* "EDATE":"2211-12-12","SPBZ":"1",
* "ROWNUM_":"3","TBID":null,"RTEXT":"20111202",
* "_DIC_SPBZ":"已审批","SPBZ_CMB":"已审批"
* }
* ];
* var rstLen=CFW.oEGlt.fnAddRows('demo_api_eglt_test', rowDatas);
* alert("fnAddRows()返回结果: " + rstLen); //输出测试 打印返回结果
*
*/
fnAddRows : function(sGltID, oDatas) {
if (CFW.oValid.fnIsNull(sGltID, "CFW.oEGlt.fnAddRows 多记录表配置ID")) {
return;
}
if (CFW.oValid.fnIsNull(oDatas, "CFW.oEGlt.fnAddRows 行数据对象")) {
return;
}
var rowsData = [];
if ($.isArray(oDatas)) {
rowsData = oDatas;
} else {
rowsData = [ oDatas ];
}
// 如果没有新增数据,那么什么都不用该处理
if (rowsData.length == 0) {
return $("#" + sGltID);
}
return $("#" + sGltID)
.first()
.map(
function() {
// 获取本多记录表已经有的行数据
var opts = $.data(this, 'fweditgrid').options;
var view = $.data(this, 'fweditgrid').view;
var table = view.children('table')[0];
var data = opts.data;
var rows = data.rows || [];
var startRow = rows.length;
// 增加行数据
rows = rows.concat(rowsData);
data.rows = rows;
// 增加总计
data.total += rowsData.length;
var iPageNum = (parseInt(opts.pageNumber, 10) - 1)
* parseInt(opts.pageSize, 10);
// 逐行处理
var frag = document.createDocumentFragment();
for ( var iRow = startRow, len = rows.length; iRow < len; iRow++) {
var tr = CFW.oEGlt._fnGenOneRow(opts, opts.data.headers,
iPageNum + 1, iRow, rows);
frag.appendChild(tr);
}
table.tBodies[0].appendChild(frag);
view[0].scrollTop = view[0].scrollHeight;
// 调整底部的颜色
CFW.oEGlt._fnSetAlt(this);
return rows.length;
}).get(0);
// return $('#'+sGltID).fweditgrid('addRows',oDatas);
},
/**
* 功能描述:更新多记录表中的行数据。 功能详细说明:此处更新只是更新页面上多记录表的显示内容,并未更新实际数据。
*
* @param sGltID
* (必需) 多记录配置ID,String
* @param aDatas
* oDatas 行数据对象,可* 以不传,不传表示根据多记录表现有
* 数据刷新界面ui。如果配置了第二个参数,那么将用传入的参数替换原有数据。
*
*
* 使用方法举例:
* 使用方法:
* //要更新的行数据
* var rowDatas=[
* {
* "ETEXT":"20011502","RDATE":"2111-11-02",
* "EDATE":"2211-12-12","SPBZ":"1",
* "ROWNUM_":"3","TBID":null,
* "RTEXT":"20111202",
* "_DIC_SPBZ":"已审批","SPBZ_CMB":"已审批"
* }
* ];
* CFW.oEGlt.fnUpdateRows('demo_api_eglt_test'); 无参数
* CFW.oEGlt.fnUpdateRows('demo_api_eglt_test',rowDatas); 带参数
*
*/
fnUpdateRows : function() {
if (CFW.oValid.fnIsNull(arguments[0], "CFW.oEGlt.fnUpdateRows 多记录表配置ID")) {
return;
}
var rowsData = null;
// 获取新行的数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
// 如果参数个数不对,那么报错处理
if (arguments.length == 1) {
} else if (arguments.length == 2) {
if ($.isArray(arguments[1])) {
rowsData = arguments[1];
} else {
rowsData = [ arguments[1] ];
}
}
return $("#" + arguments[0]).each(function() {
// 获取本多记录表已经有的行数据
var opts = $.data(this, 'fweditgrid').options;
var data = opts.data;
// 如果有传入新的行数据,那么全部用新记录替换旧记录
if (rowsData) {
data.rows = rowsData;
} else {
// 没有的话,当作刷新页面数据处理
}
CFW.oEGlt._fnLoadData(this, data);
// createMsg(this);
CFW.oEGlt._fnShowInfo(this);
});
},
/**
* 按当前条件刷新列表
* @param String sListID(必需) 多记录表的配置ID名称
* @return true、false
*
* 使用举例:
* CFW.oEGlt.fnRefreshData('fw_blank_todolist') ;
*
*/
fnRefreshData : function (sListID) {
var target = eval('document.all.' + sListID);
var opts;
if (jQuery.data(target, 'fwdatagrid') != null) {
opts = jQuery.data(target, 'fwdatagrid').options;
var sWhere=opts.whereCls;
var iPageNum=opts.pageNumber;
opts.ReGetListData(target, sWhere, iPageNum);
return true;
}
if (jQuery.data(target, 'fweditgrid') != null) {
opts = jQuery.data(target, 'fweditgrid').options;
var sWhere=opts.whereCls;
var iPageNum=opts.pageNumber;
opts.ReGetListData(target, sWhere, iPageNum);
return true;
}
return true;
},
/**
* 功能描述:删除多记录表格中的行。 功能详细说明:此处删除只是删除页面上多记录表的显示内容,并未删除实际数据。
*
* @param sGltID
* (必需) 多记录配置ID,String
* @param aArrayIndex
* aArrayIndex 行索引数组,类型Array 数组;不传表示全部删除
*
*
* 使用方法举例:
* 使用方法1:调用以下方法删除第1、3行
* CFW.oEGlt.fnRemoveRows('demo_api_eglt_test',[1,3]);
* 使用方法2:全部删除:
* CFW.oEGlt.fnRemoveRows('demo_api_eglt_test');
*
*/
fnRemoveRows : function() {
if (CFW.oValid.fnIsNull(arguments[0], "CFW.oEGlt.fnRemoveRows 多记录表配置ID")) {
return;
}
var rowIndices = new Array();
// 获取删除行的索引数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
if (arguments.length == 1) {
rowIndices = null;
} else if (arguments.length == 2) {
if ($.isArray(arguments[1])) {
rowIndices = arguments[1];
} else {
rowIndices = [ arguments[1] ];
}
}
// 如果传入的是空串,那么不处理
if (rowIndices != null && rowIndices.length == 0) {
return this;
}
return $("#" + arguments[0]).each(function() {
var opts = $.data(this, 'fweditgrid').options;
var view = $.data(this, 'fweditgrid').view;
var data = opts.data;
var rows = data.rows || [];
var table = view.children('table')[0];
// 如果本来就没数据,那么什么都不做
if (!rows || rows.length == 0)
return;
// 删除行数据
// 如果是不传入行数据,那么删除所有
if (rowIndices == null) {
// 全部删除处理
rows = [];
// 删除所有行的数据
$(table.tBodies[0]).empty();
// createMsg(this);
} else {// 部分删除处理
// 根据索引删除现有数据,从后到前删除行数据
rowIndices.sort(function(a, b) {
return a - b;
}).reverse();
// 删除数据模型(由后向前删除)
for (var i=0;i< rowIndices.length;i++) {
var k = parseInt(rowIndices[i], 10);
rows.splice(k, 1);
}
// 删除ui相关的东西
for (var index=0;index
* 使用方法举例:
* 使用方法:设置多记录表demo_api_eglt_test的PSBZ(审批标志) 列只读
* fnSetItemsReadOnly('demo_api_eglt_test','SPBZ',true);
* 设置整个多记录表只读时, 不传入第二个参数:
* fnSetItemsReadOnly('demo_api_eglt_test',true);
* 取消只读只需要修改上例最后一个参数,有true改成false即可
*
*/
fnSetItemsReadOnly : function(sGltID, fields, flag) {
if (CFW.oValid.fnIsNull(sGltID, "CFW.oEGlt.fnSetItemsReadOnly 多记录表配置ID")) {
return;
}
if (CFW.oValid.fnIsNull(fields, "CFW.oEGlt.fnSetItemsReadOnly 参数boolean值")) {
return;
}
if (arguments.length == 2) {
flag = fields;
fields = true;// 传入两个表示对所有列操作
}
// 校验flag的参数类型
if (flag != true && flag != false) {
CFW.oWin.fnAlert('fnSetItemsReadOnly函数的flag参数必需是true或者false; flag:' + flag);
return this;
}
// 校验fields的参数类型
if (typeof fields == 'string') {
// 先转为数组
fields = [ fields ];
} else if (!$.isArray(fields) && !fields) {
CFW.oWin.fnAlert('fnSetItemsReadOnly函数的fields参数必需是字符串、数组或者true');
return this;
}
return $("#" + sGltID).each(function() {
// 每个多记录表单独处理
var opts = $.data(this, 'fweditgrid').options;
var grid = $.data(this, 'fweditgrid').grid;
var headers = opts.data.headers;
var v_fields;
if (fields!=null && $.isArray(fields)) {
v_fields = fields;
} else {
// true用headers替换
v_fields = headers;
}
// 数组转成map
var v_map = {};
for (var index=0;index
* 使用方法举例:
* 使用方法:以下方法获取选中复选框checkbox别名为TBID的行号数组。
* var datas=CFW.oEGlt.fnNListGetRowIndexByWhere('demo_api_eglt_test', 'TBID');
* alert(datas);
*
*/
fnNListGetRowIndexByWhere : function(sGltID, sAlias) {
if (CFW.oValid.fnIsNull(sGltID, "CFW.oEGlt.fnNListGetRowIndexByWhere 多记录表配置ID")) {
return;
}
if (CFW.oValid.fnIsNull(sAlias, "CFW.oEGlt.fnNListGetRowIndexByWhere checkbox列的列别名")) {
return;
}
return $("#" + sGltID).map(function() {
// 获取别名下所有已选checkbox
return $('[nd=' + sAlias + ']:checked', this).map(function() {
return parseInt($(this).attr("rw"), 10);
}).get();
}).get();
},
/**
* 功能描述:可编辑多记录表翻页监听函数 (‘regBeforePageFun’) 功能详细说明:
* 注册翻页前的响应函数,如果函数返回非true,那么系统不触发翻页操作。
*
* @param sGltID
* (必需) 多记录配置ID,String
* @param fnPageFun
* (必需) 响应函数对象 function
*
*
* 使用方法举例:
* function fnPageFunFalse() {
* alert("fnPageFunFalse: return false");
* return false; //不翻页
* }
* function fnPageFunTrue() {
* alert("fnPageFunTrue: return true");
* return true; //翻页
* }
* 方法1: 可编辑多记录表demo_api_eglt_test 注册翻页监听函数 fnPageFunTrue
* CFW.oEGlt.fnRegBeforePageFun('demo_api_eglt_test',fnPageFunTrue):
* 方法2: 可编辑多记录表demo_api_eglt_test 注册翻页监听函数 fnPageFunFalse
* CFW.oEGlt.fnRegBeforePageFun('demo_api_eglt_test',fnPageFunFalse):
* 方法3: 可编辑多记录表demo_api_eglt_test 取消翻页监听函数
* CFW.oEGlt.fnRegBeforePageFun('demo_api_eglt_test'):
*
*/
fnRegBeforePageFun : function() {
var sGltID=arguments[0];
var fnPageFun=arguments.length==2?arguments[1]:null;
if (CFW.oValid.fnIsNull(sGltID, "CFW.oEGlt.fnNListGetRowIndexByWhere 多记录表配置ID")) {
return;
}
if (fnPageFun != null && !$.isFunction(fnPageFun)) {
alert('fnRegBeforePageFun函数的fnPageFun入参必须是function对象');
return $("#" + sGltID);
}
return $("#" + sGltID).each(function() {
$.data(this, 'beforePage', fnPageFun);
});
},
/**
* 功能描述: 更新和获取多记录表某列的值 (‘SetItem’) 功能详细说明:可以通过行号和列号,更新或者获取指定某字段值。更新某列值时,可以设置
* sNewValue的参数,当获取某列值时,此参数可以不传入。同时,也可以通过字段名,获取 列的值。
*
* @param sGltID
* (必需) 多记录配置ID,String
* @param iRowIndex
* 行索引,int
* @param iColIndex
* 列索引,int(或字段别名, String)
* @param sNewValue
* 设置值,类型String
*
*
* 使用方法举例:
* 使用方法1:更新多记录表某列的值 通过行号和列号(或字段名),更新指定某字段或者某列的值。
* 使用方法举例:
* 使用方法1:更新多记录表指定 行索引为2,列索引为6的值为: 1
* CFW.oEGlt.fnSetItem('demo_api_eglt_test', 2, 6, {'SPBZ' : 1});
* 使用方法2:更新多记录表索引列为6的值为0
* CFW.oEGlt.fnSetItem('demo_api_eglt_test',6,{'SPBZ':0}) ;
*
*/
fnSetItem : function() {
if (CFW.oValid.fnIsNull(arguments[0], "CFW.oEGlt.fnSetItem 多记录表配置ID")) {
return;
}
if (CFW.oValid.fnIsNull(arguments[1], "CFW.oEGlt.fnSetItem 多记录表指定位置")) {
return;
}
if (CFW.oValid.fnIsNull(arguments[2], "CFW.oEGlt.fnSetItem 设置值")) {
return;
}
var rowIndices, fieldName, newValue;
var len = arguments.length;
if (len == 3) {
// 更新某列的值 .fweditgrid('field',true,'XB',{'XB':1,'_DIC_XB':'男'}
rowIndices = true;
fieldName = arguments[1];
newValue = arguments[2];
} else if (len == 4) {
// 设置指定 某行某列的值 fweditgrid('field',0,'XB',{'XB':1,'_DIC_XB':'男'}
if (!CFW.oValid.fnIsInteger(arguments[1])) {
CFW.oWin.fnAlert('iRowIndex入参有误,只能是整形数值');
return null;
}
rowIndices = arguments[1];
fieldName = arguments[2];
newValue = arguments[3];
}
// 如果 fieldName 是 列索引, 需要转换为 列名称
if (CFW.oValid.fnIsInteger(fieldName)) {
fieldName = $(
"#" + arguments[0] + " tbody tr:eq(0) td:eq(" + fieldName
+ ")").children().last().attr("nd");
}
// 写别名列处理
return $("#" + arguments[0])
.each(
function () {
var vRowIndices = null;// 存放待更新的行的行索引
var rows = $.data(this, 'fweditgrid').options.data.rows;
var dicts = $.data(this, 'fweditgrid').dicts;
var opts = $.data(this, 'fweditgrid').options;
var view = $.data(this, 'fweditgrid').view;
if (rowIndices == true
&& typeof rowIndices == 'boolean') {
// 更新所有行,那么获取所有行的行索引
vRowIndices = [];
for (var i=0; i
* CFW.oEGlt.fnGetEditGridData('gltId');
*
*/
fnGetEditGridData : function(sTableId){
var rows = $("#"+sTableId).fweditgrid("getRows");
return rows;
}
};