(function($) {
/**
* 生成一行数据。
* @param options 多记录表参数
* @param startRow 起始行号,不分页时取1,分页上页最大行号+1
* @param fixTable 固定表数据区域对象
* @param extTable 扩展表数据区域对象
* @param rowNum 行索引
* @param rowsData 行数据
*/
function genOneRow(options,headers,startRow,rowNum,rowsData){
function inputFun (input){
var rowId = rowNum + parseInt($(input).attr('rw'));
$(input).attr('rw',rowId);
if(input.type=='checkbox' || input.type=='radio'){
//处理checkbox或者radiobox的情况
//判断后台记录是否存在,有则设置对应的值,没有则清空
var value = (rowsData[rowId]||{})[$(input).attr('nd')];
if(value==null){
value = '' ;
}
if(input.name != $(input).attr('nd')){
input.name=(rowId).toString(10)+$(input).attr('nd');
}
//设置选中状态
//input.checked=(input.value == value);
$(input).val(value);
//只读设置
if(options.disableMap[$(input).attr('nd')]){
input.disabled=true;
}
}else if(/.*_CMB/.test($(input).attr('nd'))){
//处理字典控件
var value = (rowsData[rowId]||{})['_DIC_' + $(input).attr('nd').substr(0,$(input).attr('nd').length-4)];
if(value == null){
value = '';
}
$(input).val(value);
//只读设置
if(options.disableMap[$(input).attr('nd').substr(0,$(input).attr('nd').length-4)]){
input.disabled=true;
}
}else{
//处理一般控件
var value = (rowsData[rowId]||{})[$(input).attr('nd')];
if(value==null){
value = '' ;
}
$(input).val(value);
//只读设置
if(options.disableMap[$(input).attr('nd')]){
input.disabled=true;
}
}
CFW.oGt._fnObjInit(input);
}
function labelFun(label){
//判断后台记录是否存在,有则设置对应的值,没有则清空
var rowId = rowNum + parseInt($(label).attr('rw'));
var labelValue = null;
//先看看有没有对应的字典项
labelValue = (rowsData[rowId]||{})['_DIC_' + $(label).attr('nd')];
//如果没有则只用列的实际值
if(labelValue == null){
labelValue = (rowsData[rowId]||{})[$(label).attr('nd')] ;
}
if(labelValue == null){
labelValue = '';
}
var value = (rowsData[rowId]||{})[$(label).attr('nd')];
if(value == null){
value = '';
}
//label.value = value;
$(label).val(value);
$(label).attr('rw',rowId);
// label.rw = rowId;
$(label)[0].innerHTML=labelValue;
}
var tr = options.tr.cloneNode(true);
var t=document.createElement('TR');
t= tr;
//$(t).html($(tr).html());
//设置rowIndex
$(t).attr('fweditgrid-row-index',rowNum);
//设置序号列
//t.firstChild /*td*/.innerHTML = startRow+rowNum;
$(t).children().first()[0].innerHTML = startRow+rowNum;
//输入控件一个个的遍历
var set = t.getElementsByTagName('INPUT');
for ( var i = 0, len = set.length; i < len; i++) {inputFun(set[i]);}
//label控件一个个处理
set = t.getElementsByTagName('LABEL');
for ( var i = 0, len = set.length; i < len; i++) {labelFun(set[i]);}
return t;
}
/**
* 装载数据到列表中
*/
function loadData(target, data) {
var id=$(target).attr('id');
if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
}else{
$('#'+id+'_table').floatThead('destroy');
}
// var startTime = new Date();
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var view = $.data(target, 'fweditgrid').view;
var headers = data.headers;
var total = data.total;
var rows = data.rows;
var sValue ="";
var table = view.children('table')[0];
var ViewBody = table.tBodies[0];
$(ViewBody).remove();
var iPageNum = 0;
// 计算当前页的起始行号
iPageNum = (parseInt(opts.pageNumber<=0?1:opts.pageNumber, 10) - 1) * parseInt(opts.pageSize, 10);
opts.total = total;
opts.data = null;
opts.data = data;
opts.rowxh = iPageNum + 1;
var frag = document.createDocumentFragment();
// 循环每一行的数据
// var startTime = new Date();
for ( var i = 0; i < rows.length; i++) {
var tr = genOneRow(opts,headers,iPageNum+1,i,rows);
frag.appendChild(tr);
}//for
//
var tbody=document.createElement('TBODY');
tbody.appendChild(frag);
table.appendChild(tbody);
setAlt(target);
if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
}else{
$('#'+id+'_table').floatThead({
scrollContainer:function($table){
return $table.closest('.fweditgrid-view');
}
});
}
// showErrMsg('loadData:'+(new Date()-startTime),5);
}
/**
* 单击上下页时获取数据库的多记录数据
*/
function request(target,pageNumber,pageSize,callFun) {
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var pager=$.data(target, 'fweditgrid').pager;
var wrap=$.data(target, 'fweditgrid').view.parent();
var param;
var where = opts.whereCls;
var confid = opts.confid;
var dsId = opts.dsId;
var dynDictWhereCls = JSON.stringify(opts.dynDictWhereCls);
if(pageNumber==null){
pageNumber = 1;
}else if(pageNumber<=0){
if(pageNumber==-1){
pageNumber = opts.pageNumber;
}else{
pageNumber=1;
}
}
var rowstart = (pageNumber - 1) * pageSize + 1;
var pSize = pageSize;
if(_ENCRYPT_WHERE){
if(where!=null&&where!='null'&&where!=''&&where!='undefined'){
where=stringToHex(encrypt(WHEREKEY,where));
}
}
var param = $.extend({}, {
'confid' : confid,
'dynDictWhereCls' : dynDictWhereCls,
'dsId' : dsId,
'rowstart' : rowstart,
'pageSize' : pSize,
'whereCls' : where
});
if (!opts.url)return;
setLoadStatus(target, true);
var mask = $('
').css({
display : 'block',
width : wrap.width(),
height : wrap.height()
}).appendTo(wrap);
var mask_msg = $(''+opts.loadMsg+'
').appendTo(wrap);
mask_msg.css(
{display : 'block',
left : (wrap.width() - mask_msg.outerWidth()) / 2,
top : (wrap.height() - mask_msg.outerHeight()) / 2
});
$.ajax({
type : opts.method,
url : opts.url,
data : param,
dataType : 'json',
cache : false,
success : function(data) {
if(data!=null && data[headtoken]!=null){
token=data[headtoken];//更新全局变量token标志
}
if("1"!=data.FHZ){//出错了,弹出错误提醒
if("CSRF" == data.FHZ){
showMsg(data.MSG||'',3);
}else if("-1" == data.FHZ){
_FW.oFtl.fnAlert(data.MSG||'');
}
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
mask_msg.remove();
mask.remove();
return ;
}
if (callFun != null && typeof(callFun) === "function"){
callFun();
}
opts.loading = false;
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
mask.remove();
mask_msg.remove();
// var startTime = new Date();
loadData(target, data);
setProperties(target);
setSize(target);
// showErrMsg('loadData:'+(new Date()-startTime),5);
createMsg(target);
showInfo(target);
$.data(target, 'fweditgrid').view.scrollTop(0);
if (opts.onLoadSuccess) {
opts.onLoadSuccess.apply(this, arguments);
}
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
opts.loading = false;
mask.remove();
mask_msg.remove();
var tipMsg = XMLHttpRequest.responseText;
pager.find('a[icon=fweditgrid-load]')
.find('.fweditgrid-load').removeClass('fweditgrid-loading');
if (opts.onLoadError) {
opts.onLoadError.apply(this, arguments);
}else{
CFW.oWin.fnAlert("错误信息:" + tipMsg);
}
},
beforeSend:function(XMLHttpRequest ){
var cToken = $.cookie(headtoken) || token;XMLHttpRequest.setRequestHeader(headtoken,cToken);
}
});
}
function createMsg(target) {
/*
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var rows = opts.data.rows;
$('.fweditgrid-mask', grid).remove();
$('.fweditgrid-mask-msg2', grid).remove();
if (rows.length == 0) {
var wrap = $('.fweditgrid-wrap', grid);
$('').css({
display : 'block',
width : wrap.width(),
height : wrap.height()
}).appendTo(wrap);
$('').html(opts.tipMsg).appendTo(wrap).css({
display : 'block',
left : (wrap.width() - $('.fweditgrid-mask-msg2', grid).outerWidth()) / 2,
top : (wrap.height() - $('.fweditgrid-mask-msg2', grid).outerHeight()) / 2
});
}
*/
}
// 设置分页栏的信息
function buildPage(target) {
var opts = $.data(target, 'fweditgrid').options;
var grid = $.data(target, 'fweditgrid').grid;
var pager =$.data(target, 'fweditgrid').pager;
var expbtn = opts.expbtn;
if (!opts.hasPage && $.trim(expbtn).length == 0) {
return true;
}
if(opts.data.total>1){opts.total = opts.data.total;}
var tableStr='';
pager[0].innerHTML=tableStr+''+'';
$("a[icon^=fweditgrid]", pager).linkbutton({
plain : true
});
// var startTime = new Date();
if (opts.hasPage) {
showInfo(target);
pager.find('a[class=fweditgrid-new]').bind('click.fweditgrid', function(){
$(target).fweditgrid("addRows",{});
});
pager.find('a[icon=fweditgrid-first]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
if (opts.pageNumber > 1)selectPage(target, 1);
});
pager.find('a[icon=fweditgrid-prev]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
if (opts.pageNumber > 1)selectPage(target, opts.pageNumber - 1);
});
pager.find('a[icon=fweditgrid-next]').unbind('.fweditgrid').bind('click.fweditgrid', function() {
var pageCount = Math.ceil(opts.total / opts.pageSize);
if (opts.pageNumber < pageCount) selectPage(target, opts.pageNumber + 1);
});
pager.find('a[icon=fweditgrid-last]').unbind('.fweditgrid').bind('click.fweditgrid', function(){
var pageCount = Math.ceil(opts.total / opts.pageSize);
if (opts.pageNumber < pageCount)selectPage(target, pageCount);
});
pager.find('a[icon=fweditgrid-load]').unbind('.fweditgrid').bind('click.fweditgrid', function(){
selectPage(target, opts.pageNumber);
});
pager.find('input.fweditgrid-num').unbind('.fweditgrid').bind('keydown.fweditgrid',function(e) {
if (event.keyCode == 8 || event.keyCode == 9
|| event.keyCode == 46) {
return true;
}
if (e.keyCode == 13) {
var pageNumber = parseInt($(this).val()) || 1;
selectPage(target, pageNumber);
}
// 小键盘的数字区
if (e.keyCode >= 96 && e.keyCode <= 105) {
return true;
}
// 键盘的数字区
if ((e.keyCode >= 48 && e.keyCode <= 57
&& e.ctrlKey == false && e.shiftKey == false)) {
return true;
}
return false;
});
pager.find('.fweditgrid-page-list').unbind('.fweditgrid').bind('keydown',function(e) {
if (event.keyCode == 8 || event.keyCode == 9
|| event.keyCode == 46) {
return true;
}
// 小键盘的数字区
if (e.keyCode >= 96 && e.keyCode <= 105) {
return true;
}
// 键盘的数字区
if ((e.keyCode >= 48 && e.keyCode <= 57
&& e.ctrlKey == false && e.shiftKey == false)) {
return true;
}
return false;
});
$('.fweditgrid-page-list', pager).each(function() {
this.value = opts.pageSize;
});
pager.find('.fweditgrid-page-list').unbind('.fweditgrid').bind(
'change.fweditgrid', function() {
if($(this).val()>200){
CFW.oWin.fnAlert("每页显示的行数不能大于200!");
return true;
}
opts.pageSize = $(this).val();
if (opts.pageSize == 0) {
opts.pageSize = 1;
this.value = 1;
}
// 这里处理的目的是当列表的表头和表尾都有分页栏时,同步两个分页栏的框显示一致。
$('.fweditgrid-page-list', pager).each(function() {
this.value = opts.pageSize;
});
var pageCount = Math.ceil(opts.total / opts.pageSize);
selectPage(target, opts.pageNumber);
});
}
// showErrMsg('buildPage:'+(new Date()-startTime),5);
}
// 显示页码
function showInfo(target) {
var opts = $.data(target, 'fweditgrid').options;
var pager = $.data(target, 'fweditgrid').pager;
var total = parseInt(opts.total, 10); // 总共的行数
var pageCount = Math.ceil(opts.total / opts.pageSize);
var num = pager.find('input.fweditgrid-num');
num.val(opts.pageNumber);
num.parent().next().find('span').html(opts.afterPageText.replace(/{pages}/, pageCount));
var pinfo = opts.displayMsg;
pinfo = pinfo.replace(/{from}/, opts.pageSize * (opts.pageNumber - 1) + 1);
pinfo = pinfo.replace(/{to}/, Math.min(opts.pageSize * (opts.pageNumber), opts.total));
pinfo = pinfo.replace(/{total}/, opts.total);
pager.find('div.fweditgrid-info').html(pinfo);
$('a[icon=fweditgrid-first],a[icon=fweditgrid-prev]', pager).linkbutton({
disabled : (opts.pageNumber == 1)
});
$('a[icon=fweditgrid-next],a[icon=fweditgrid-last]', pager).linkbutton({
disabled : (opts.pageNumber >= pageCount)
});
if (opts.loading) {
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').addClass('fweditgrid-loading');
} else {
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
}
}
function setLoadStatus(target, loading) {
var opts = $.data(target, 'fweditgrid').options;
var grid = $.data(target, 'fweditgrid').grid;
var pager = $.data(target, 'fweditgrid').pager;
if (!opts.hasPage) {
return true;
}
opts.loading = loading;
if (opts.loading) {
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').addClass('fweditgrid-loading');
} else {
pager.find('a[icon=fweditgrid-load]').find('.fweditgrid-load').removeClass('fweditgrid-loading');
}
return true;
}
// 选择一页
function selectPage(target, page) {
//取响应的函数。
var beforePageFun = $.data(target,'beforePage');
if (beforePageFun != null && $.isFunction(beforePageFun)
&& !beforePageFun.call(target)) {
//响应函数如果返回非true,那么不处理翻页
return;
}
var opts = $.data(target, 'fweditgrid').options;
var pageCount = Math.ceil(opts.total / opts.pageSize);
var pageNumber = page;
if(pageCount ==0){
pageCount = 1;
}
if (page < 1)
pageNumber = 1;
if (page > pageCount)
pageNumber = pageCount;
request(target,pageNumber,opts.pageSize,function(){
opts.pageNumber = pageNumber;
});
}
/**
* 获取固定区和扩展区中的行各列的对齐和高度
*/
function getHeaderStyle(target) {
var opts = $.data(target, 'fweditgrid').options;
return $('.fweditgrid-view table', target).find('td[lastRowIndex]')
.map(function(){
return {
'style' : this.parentNode['_al'],
'width' : $(this).outerWidth()
};
}).get();
}
/**
* 设置大小 列宽等
*/
// 设置大小 列宽等
function setSize(target) {
// var startTime = new Date();
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var qView = $.data(target, 'fweditgrid').view;
qView.width(20);
if (opts.fit == true) {
var p = grid.parent();
opts.width = p.width();
opts.height = p.height();
}
var tmp = opts.width + '';
var iPos = tmp.indexOf('%');
if (iPos != -1) {
opts.width = 'auto';
}
if (opts.width != 'auto') {
opts.width = parseInt(opts.width, 10);
}
var gridWidth = opts.width;
if (gridWidth == 'auto') {
if($.browser.msie){
gridWidth = qView.closest('.fweditgrid').outerWidth();
}else{
gridWidth = qView.closest('.fweditgrid').outerWidth()-2;
}
}
var innerWidth = gridWidth - grid.outerWidth() + grid.width();
//修复:每次单击分页栏的刷新按钮时框体会自动撑大一点的问题
if( innerWidth - qView.width() < 20){
innerWidth = qView.width();
}
var containWidth=qView.parent().parent().width();
if( innerWidth < containWidth){
innerWidth=containWidth;
}
qView.width(innerWidth)//div.fwdatagrid-view
.parent().width(innerWidth);//div.fwdatagrid-wrap
var tmp = opts.height + '';
var iPos = tmp.indexOf('%');
// 凡是包含有100%的都设成自动高度否则会报错
if (iPos != -1) {
opts.height = 'auto';
}
if (opts.height != 'auto') {
opts.height = parseInt(opts.height, 10);
}
qView.height(opts.height);
if(opts.height=='auto'){
var table=$('table',qView);
if(table.width()>=qView.width()){
qView.css({'overflow-y':'hidden','overflow-x':'auto','height':table.height()+18});
}else{
qView.css({'overflow-x':'hidden','height':table.height()});//隐藏横向滚动条 避免滚动条遮住最后一行
}
}
}
/**
*初始化多记录表表头的checkbox事件
*/
function initHeaderCheckbox(target){
var grid = $.data(target, 'fweditgrid').grid;
var view = $.data(target, 'fweditgrid').view;
//定义响应函数
var checkFun = function(){
//取得本checkbox所代表的列的索引
var index = parseInt($(this).parent().attr('lastRowIndex'))-1;
//取得列别名
var opts = $.data(target, 'fweditgrid').options;
var alias = opts.data.headers[index];
var inputs = target.getElementsByTagName('input');
for(var i=0;i0){
$(headCheck).attr("checked",false);
}
}
/**
* set the common properties
*/
function setProperties(target) {
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var view = $.data(target, 'fweditgrid').view;
var data = opts.data;
var headers = data.headers;
var icol = 1;
setAlt(target);
var body = view.children('table')[0];
if (opts.nowrap == false) {
$(body[0]).find('td').css('white-space','normal');
}
// var startTime = new Date();
// showErrMsg('nowrap:'+(new Date()-startTime),5);
initHeaderCheckbox(target);
}
/**
* 设置间隔行的不同颜色
*/
function setAlt(target){
var opts = $.data(target, 'fweditgrid').options;
var grid = $.data(target, 'fweditgrid').grid;
var view = $.data(target, 'fweditgrid').view;
var trs = view.children('table')[0].getElementsByTagName('TBODY')[0].getElementsByTagName('TR');
//生成各行不同颜色的效果
for ( var i = 0, l = trs.length; i < l; i++ ) {
var thisTr = trs[i];
if(thisTr['fweditgrid-row-index']==undefined){
continue;
}
var className = ' '+thisTr.className+' ';
var pair=[' fweditgrid-row-alt ',' fweditgrid-row '];
if(parseInt(thisTr['fweditgrid-row-index'])%2!=0){
pair=[' fweditgrid-row ',' fweditgrid-row-alt '];
}
//删除可能的class
className = className.replace(pair[0],' ');
//添加新的class
if(className.indexOf(pair[1])<0){
className+=pair[1];
}
thisTr.className=$.trim(className);
}
// var startTime = new Date();
// showErrMsg('thisInput:'+(new Date()-startTime),5);
}
/**
* 键盘单击上键时移动 下拉框的选项
*/
function selectPrev(target,input,combox){
var panelbody = $('.gltcombox-panel-body',combox);
var item = panelbody.find('div.gltcombox-item-selected');
if (item.length){
var prev = item.prev(':visible');
if (prev.length){
item = prev;
}else{
item = panelbody.find('div.gltcombox-item:visible:last');
}
} else {
item = panelbody.find('div.gltcombox-item:visible:last');
}
var value = item.attr('value');
var tx = item.attr('text');
setValue(target,combox,input,$.trim(tx),value);
if (item.position().top <= 0){
var h = panelbody.scrollTop() + item.position().top;
panelbody.scrollTop(h);
} else if (item.position().top + item.outerHeight() > panelbody.height()){
var h = panelbody.scrollTop() + item.position().top + item.outerHeight() - panelbody.height();
panelbody.scrollTop(h);
}
}
/**
* 键盘单击下键时移动 下拉框的选项
*/
function selectNext(target,input,combox){
var panelbody = $('.gltcombox-panel-body',combox);
var item = panelbody.find('div.gltcombox-item-selected');
if (item.length){
var next = item.next(':visible');
if (next.length){
item = next;
}else{
item = panelbody.find('div.gltcombox-item:visible:first');
}
} else {
item = panelbody.find('div.gltcombox-item:visible:first');
}
var value = item.attr('value');
var tx = item.attr('text');
setValue(target,combox,input,$.trim(tx),value);
if (item.position().top <= 0){
var h = $(combox).scrollTop() + item.position().top;
panelbody.scrollTop(h);
} else if (item.position().top + item.outerHeight() > panelbody.height()){
var h = panelbody.scrollTop() + item.position().top + item.outerHeight() - panelbody.height();
panelbody.scrollTop(h);
}
}
function selectCur(target,input,combox){
var panelbody = $('.gltcombox-panel-body',combox);
var item = panelbody.find('div.gltcombox-item-selected');
//没有选项就不处理
if(item.length==0)return;
var value = item.attr('value');
var tx = item.attr('text');
setValue(target,combox,input,$.trim(tx),value,true);
}
/**
* 设置该值 HIDDEN input 保存字典值
*/
function setValue(target,combox,input,text,value,confirm){
var panelbody = $('.gltcombox-panel-body',combox);
panelbody.find('div.gltcombox-item-selected').removeClass('gltcombox-item-selected');
panelbody.find('div.gltcombox-item[value=' + value + ']').addClass('gltcombox-item-selected');
if(confirm){
var obj=getComHidden(target,input);
$(input).val(text);
$(obj).val(value);
var fun = window[input.doselect];
if(fun){
fun(input,{AAA102:value,AAA103:text});
}
}
}
/**
* 获取下拉字典项保存字典值的HIDDEN input 对象
*/
function getComHidden(target,input){
var obj;
var nd = $(input).attr('nd').replace(/_CMB/gi, "");;
var rw =$(input).attr('rw');
$('input[nd='+nd+'][rw='+rw+'][class^=gltcom]',target).each(function(){
obj = this;
return false;
});
return obj;
}
/**
* 初始化下拉框
* @param input 录入控件
* @param comname 下拉字典的名称
* @return 无
*/
function setComBox(target,combox,input){
var panel = $('.gltcombox-panel-body',combox);
$('.gltcombox-item', panel).unbind('hover');
$('.gltcombox-item', panel).unbind('click');
$('.gltcombox-item', panel).hover(
function(){$(this).addClass('gltcombox-item-hover');},
function(){$(this).removeClass('gltcombox-item-hover');}
).click(function(){
var item = $(this);
$(combox).css({
display:'none'
});
setValue(target,combox,input,$.trim(item.attr('text')),item.attr('value'),true);
});
panel.find('div.gltcombox-item').each(function(){
var item = $(this);
item.show();
});
//鼠标点击其他地方就隐藏列表
$(document).bind('mousedown', function(e){
var hidden=getComHidden(target,input);
if(hidden!=null&&hidden.value==''){
setValue(target,combox,input,'','',true)
}
if(e.target!=input){
$(combox).hide();
}else{
$(combox).show();
}
});
//鼠标移动到上面屏蔽掉
panel.bind('mousedown', function(e){
return false;
});
jQuery(input).bind('mousedown', function(e){
return true;
});
//当录入框第一次获取录入焦点,初始话该控件的事件
if($.data(input, 'input') == null){
$(input).data('input', {});
//单击ENTER键失去焦点时
$(input).bind('keydown',function(e){
if(e.keyCode==13||e.keyCode==9){
$(combox).css({
display:'none'
});
selectCur(target,input,combox);
}
});
//按上下左右键时选择下拉框的内容
$(input).bind('keyup', function(e){
switch(e.keyCode){
case 37: // left
case 38: // up
selectPrev(target,input,combox);
break;
case 39: // right
case 40: // down
selectNext(target,input,combox);
break;
case 16://shift
return true;
break;
case 17://ctrl
return true;
break;
case 18://atl
return true;
break;
case 32://空格
return true;
break;
default:
if(!input.readOnly){
setTimeout(function(){
filter(target,combox,input);
},1000*0.3); //延迟两秒处理
}
}
});
}
}
/**
* 过滤下拉框的内容
*/
function filter(target,combox,input){
var query = input.value;
var panel = $('div.gltcombox-panel-body',combox);
var hidden = getComHidden(target,input);
hidden.value =""; //原来的值
panel.find('div.gltcombox-item').each(function(){
var item = $(this);
if (item.text().indexOf(query) == 0){
item.show();
if (item.text() == query){
item.addClass('gltcombox-item-selected');
hidden.value = item.attr('value');
}
}else if(item.attr('text').indexOf(query) == 0){//若是跟下拉列表内比较不成功,则跟隐藏的比较
if(item.attr('text') == query){
item.addClass('gltcombox-item-selected');
hidden.value = item.attr('value');
}
}else{
item.hide();
}
});
}
/**
* 生成下拉框的DIV
*/
function iniDicts(target){
var opts = $.data(target, 'fweditgrid').options;
var dicts = opts.data.dicts;
var confid = opts.confid;
var div ="";
var dt;
for(key in dicts){
var dts = dicts[key];
var div = "";
div += "
";
for(ky in dts){
div += "
"+ky+"-"+dts[ky]+"
";
}
div += "
";
div += "
";
div += "
";
$(div).appendTo('body');
}
}
/**
* 生成下拉框的DIV
*/
function reSetDict(target,dname,dictdata){
var opts = $.data(target, 'fweditgrid').options;
var dicts = opts.data.dicts;
dicts[dname]=dictdata;
var confid = opts.confid;
var div ="";
var dt;
$('#'+confid+'_'+dname).remove();
var dts = dictdata;
div = "";
div += "
";
for(ky in dts){
div += "
"+ky+"-"+dts[ky]+"
";
}
div += "
";
div += "
";
div += "
";
$(div).appendTo('body');
}
/**
*修改行号以及序号等
*因为每次删除后 行号以及序号等都会发生变化
*/
function modifyRowAttr(target){
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var view = $.data(target, 'fweditgrid').view;
var table = view.children('table')[0];
var xh =parseInt(opts.rowxh,10);
$.each(table.tBodies[0].rows,function(indexInArray){
this['fweditgrid-row-index']=indexInArray;
$('input',this).each(function(){this['rw']=indexInArray;});
this.cells[0].innerHTML=xh+indexInArray;
});
}
function storeRow(target){
var grid = $.data(target, 'fweditgrid').grid;
var opts = $.data(target, 'fweditgrid').options;
var view = $.data(target, 'fweditgrid').view;
var table = view.children('table')[0];
if(table.tBodies[0].rows.length==0)return;
opts.tr = table.tBodies[0].rows[0].cloneNode(true);
//如果没数据,那么删除掉模板行,如果还没初始化,那么先不删除
var rows = $.data(target, 'fweditgrid').options.data.rows;
if((!rows||rows.length==0)){
var row = table.tBodies[0].removeChild(table.tBodies[0].rows[0]);
}
opts.rowxh = 1;
}
/**
* 重新刷新记录表的内容
* 修改了WHERE条件后,重新执行查询
*/
function ReLoadData(target, where, pageNum) {
var opts = $.data(target, 'fweditgrid').options;
opts.whereCls = where;
request(target,pageNum,opts.pageSize,function(){
if(pageNum==null){
opts.pageNumber = 1;
}else if(pageNum!=-1){
opts.pageNumber = pageNum;
}
});
}
/**
* 多记录表的成员函数
*/
var methods = {
/**
* 设置并获取某行某列的值
* @param rowIndices
* 指定更新的列,可以有三个类型true,整形和整形数组。
* 表示更新多记录表所有的行中的数据,
* 单个整形值表示更新多记录表中某行的对应别名中的值,
* 整形数组表示更新多记录表中指定行中对应别名的值
* @param fieldName
* 字段别名
* @param newValue 新的值,可以是当个值,也可以是值数组。
* 不设置该值时表示获取列操作,设置值时表示设置列操作。
* 每个值需要{fieldName:fieldValue}格式,如果是字典项,
* 需要增加'_DIC_'+fieldName这个属性,传入对应的字典中文值
* 可能的使用情况:
* $.fweditgrid('field',true,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',true,'XB',{'XB':1,'_DIC_XB':'男'})
* 设置多记录表中所有行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
* $.fweditgrid('field',true,String) return Array 例子$('#test_glt').fweditgrid('field',true,'XB')
* 获取多记录表中所有行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
* 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'},{'XB':1,'_DIC_XB':'男'}]
*
* $.fweditgrid('field',Integer,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',0,'XB',{'XB':1,'_DIC_XB':'男'})
* 设置多记录表中第一行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
* $.fweditgrid('field',Integer,String) return Array 例子$('#test_glt').fweditgrid('field',0,'XB')
* 获取多记录表中第一行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
* 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'}]
*
* $.fweditgrid('field',Array,String,Object) return jQuery例子$('#test_glt').fweditgrid('field',[0,1],'XB',{'XB':1,'_DIC_XB':'男'})
* 设置多记录表中第1、2行中性别列的值,代码值为1,中文显示为“男”,返回原jQuery集合对象
* $.fweditgrid('field',Array,String) return Array 例子$('#test_glt').fweditgrid('field',[0,1],'XB')
* 获取多记录表中第1、2行中性别列的值,返回数组,数组中包含每行对应列中别名为'XB'对应的值,
* 如果值是字典列,那么同时返回中文,可能的结果是:[{'XB':1,'_DIC_XB':'男'},{'XB':1,'_DIC_XB':'男'}]
*
* $.fweditgrid('field',Array,String,Array) return jQuery例子$('#test_glt').fweditgrid('field',[0,1],'XB',[{'XB':1,'_DIC_XB':'男'},{'XB':2,'_DIC_XB':'女'])
* 分别设置多记录表中第1、2行中性别列的值,第一行代码值为1,中文显示为“男”,第二行代码值为1,中文显示为“女”,返回原jQuery集合对象
*
*/
field:function(rowIndices,fieldName,newValue){
//入参校验,rowIndices必须为true,整形数值,或者整形数组
if (rowIndices == undefined || rowIndices == null
|| (typeof rowIndices != 'boolean'
&& typeof rowIndices != 'number'
&& !$.isArray(rowIndices))) {
CFW.oWin.fnAlert('rowIndices入参有误,只能是true,整形数值,或者整形数组');
return null;
}
if(newValue==undefined){
//读别名列处理
return this.map(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;i2) {
CFW.oWin.fnAlert('disable函数,要求传入一个或两个参数');
return this;
}else if(arguments.length==1){
flag = fields;
fields=true;//传入两个表示对所有列操作
}
//校验flag的参数类型
if(flag!=true&&flag!=false){
CFW.oWin.fnAlert('disable函数的flag参数必需是true或者false');
return this;
}
//校验fields的参数类型
if(typeof fields == 'string'){
//先转为数组
fields = [fields];
}else if(!$.isArray(fields)&&fields!==true){
CFW.oWin.fnAlert('disable函数的fields参数必需是字符串、数组或者true');
return this;
}
return this.each(function(){
//每个多记录表单独处理
var opts = $.data(this, 'fweditgrid').options;
var grid = $.data(this, 'fweditgrid').grid;
var headers = opts.data.headers;
var v_fields;
if (fields == true) {
// true用headers替换
v_fields = headers;
} else {
v_fields = fields;
}
// 数组转成map
var v_map = {};
for (var index=0;index=rows.length){
return;
}
rows[this.rw][this.nd]=this.value;
}).end()
.not(':checkbox,:radio').each(function(){
if(parseInt(this.rw)>=rows.length){
return;
}
rows[this.rw][this.nd]=this.value;
});
opts.data.rows = rows;
var rows2= $.extend(true,[],rows);
return rows2;
}).get();
},
/**
* 增加一行或多行的行数据(只作用于jQuery集合中的第一个多记录表)
* @param newRows 新的一行或多行数据,可以是object单行数据或array多行数据
* @returns int 添加后当前页面的总行数
*/
addRows: function(newRows){
var rowsData = [];
// 获取新增行的数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
// 如果参数个数不对,那么报错处理
if (arguments.length == 0) {
$.error('addRows函数,要求传入一个参数');
} else if (arguments.length == 1) {
if ($.isArray(newRows)) {
rowsData = newRows;
} else {
rowsData = [ newRows ];
}
} else {
$.error('addRows函数,要求传入一个参数');
}
// 如果没有新增数据,那么什么都不用该处理
if (rowsData.length == 0) {
return this;
}
return this.first().map(function(){
var target=this;
var id=$(target).attr('id');
if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
}else{
$('#'+id+'_table').floatThead('destroy');
}
// 获取本多记录表已经有的行数据
var opts = $.data(this, 'fweditgrid').options;
var view = $.data(this, 'fweditgrid').view;
var table = view.children('table')[0];
var grid = $.data(this, 'fweditgrid').grid;
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;iRow0){
//保持同样的滚动偏移量
view.scrollTop(view.scrollTop());
}
}
data.rows = rows;
// 减少总计
data.total = rows.length;
createMsg(this);
});
},
/**
* 更新行数据
*
* @param options
* 可选,如果不传任何数据,默认表示刷新本多记录表,如果传入新的列表数据
* ,那么直接替换原来的多记录表的数据,同时刷新界面展示
* @returns jQuery
*/
updateRows : function(options) {
var rowsData = null;
// 获取新行的数据,如果是单值,那么用数组包装,如果是数组那个直接赋值
// 如果参数个数不对,那么报错处理
if (arguments.length == 0) {
} else if (arguments.length == 1) {
if ($.isArray(options)) {
rowsData = options;
} else {
rowsData = [ options ];
}
} else {
$.error('updateRows函数,要求传入一个参数');
}
return this.each(function() {
// 获取本多记录表已经有的行数据
var opts = $.data(this, 'fweditgrid').options;
var data = opts.data;
var rows = data.rows || [];
// 如果有传入新的行数据,那么全部用新记录替换旧记录
if (rowsData) {
data.rows = rowsData;
} else {
// 没有的话,当作刷新页面数据处理
}
loadData(this, data);
createMsg(this);
showInfo(this);
});
},
/**
* 显示下拉框
* @param input 录入控件
* @param comname 下拉字典的名称
* @returns 无
*/
showComBox : function(input,comname){
return this.each(function(){
var opts = $.data(this, 'fweditgrid').options;
var zIndex = opts.zIndex;
var iLeft = $(input).offset().left;
var iTop = $(input).offset().top + 20;
var combox = $('#'+comname);
var comobj;
comobj=eval('document.all.'+comname);
setComBox(this,comobj,input);
var hidden = getComHidden(this,input);
$(comobj).css("width",$(input).width());//div宽度建议跟多记录表中对应列宽度一致
var panel = $(comobj).find('div.gltcombox-panel-body');
panel.find('div.gltcombox-item-selected').removeClass('gltcombox-item-selected');
panel.find('div.gltcombox-item[value=' + hidden.value + ']').addClass('gltcombox-item-selected');
var ind = parseInt(combox.css('zIndex'),10);
if(isNaN(ind)){
ind=0;
}
if(zIndex>ind){
ind = zIndex;
};
//下拉框在fwwindow内需要根据当前input的zindex重置panel的index保证下拉框在最前
var inputZIndex = 0;
$(input).parents().each(function(){
inputZIndex+=parseInt($(this).css('z-index'));
});
if(inputZIndex>ind){
ind=inputZIndex+1;
}
combox.css({
display:'block',
left:iLeft,
top:iTop,
zIndex:ind
});
});
},
reSetDict:function(dictname,dictdata){
return this.each(function(){
reSetDict(this,dictname,dictdata);
});
},
/**
* 初始化可编辑多记录表单
*/
init : function(options) {
options = options || {};
return this.each(function() {
var state = $.data(this, 'fweditgrid');
var opts;
if (state) {
opts = $.extend(state.options, options);
state.options = opts;
} else {
opts = $.extend({}, $.fn.fweditgrid.defaults, {fit:$(this).attr('fit') == 'true'}, options);
$(this).css('width', null).css('height', null)
.addClass('fwresize').bind('fwresize',function(){setSize(this);});
var view = $(this).children().children().children('.fweditgrid-view');//主数据区域
var pager = view.siblings('.fweditgrid-pager');//分页区
var bodyTable = view.children('table');
$.data(this,'fweditgrid', {
options:opts,
grid:$(this),
dicts:opts.data.dicts,
view :view,
pager:pager
});
var state = $.data(this, 'fweditgrid');
var target = this;
var id= $(target).attr('id');
var b = false;
//检查该多记录的上层是否是弹出窗口(window)
$(this).parents('.window').each(function(){
b=true;
return false;
});
if(!b){
//检查该多记录的上层是否是TAB页(window)
$(this).parents('[myclass=fwtab]').each(function(){
b=true;
state.options.fwtab = true;
return false;
});
}
//TAB页必须先处理 WINDOW则不用奇怪,要不然显示有问题
//if(state.options.fwtab){
//setSize(this);
//}
var grid = $.data(target, 'fweditgrid').grid;
$(window).resize(function(){
if($.browser.msie&&(document.documentMode==null||document.documentMode=='5')){
}else{
if(!$(grid).is(':visible')){//当窗口不可见时,不能根据外框改变grid大小
return true;
}
}
if (opts.width == 'auto') {
// 先修改成初始值
$('div.fweditgrid-view', grid).width(50);
$('div.fweditgrid-wrap', grid).width(50);
$('div.fweditgrid', grid).width(50);
grid.width(50);
// 再调整
var iWd = grid.parent().outerWidth();
$('div.fweditgrid-view', grid).width(iWd);
$('div.fweditgrid-wrap', grid).width(iWd);
$('div.fweditgrid', grid).width(iWd);
grid.width(iWd);
}
});
//先保存模板行数据,预防没初始化就开始操作多记录表,而这时还没初始化,导致出错
storeRow(target);
//处理目的:多记录包含在弹出窗口内时不初始化
if(!b&&$(target).is(':visible')){
// var startTime = new Date();
setSize(this);
buildPage(this);
setProperties(target);
state.options.mywin = true;
iniDicts(target);
//控件初始化
var inputs = bodyTable[0].getElementsByTagName('INPUT');
for(var i =0,len=inputs.length;i=rows.length){
return;
}
rows[this.rw][this.nd]=this.value;
}).end()
.not(':checkbox,:radio').each(function(){
if(parseInt(this.rw)>=rows.length){
return;
}
rows[this.rw][this.nd]=this.value;
});
$('[nd='+alias+']:checked',this).each(function (){
var i= parseInt(this.rw,10);
NewRows.push(rows[i]);
});
return NewRows;
}).get();
},
/**
* 注册翻页前的响应函数。
* 如果函数返回非true,那么系统不触发翻页操作。
* @param pageFun 自定义的响应函数,可以为空,空表示取消之前注册的函数。
*/
beforePage:function(pageFun){
if(pageFun!=null&&!$.isFunction(pageFun)){
alert('beforePage函数的唯一入参必须是function对象');
return this;
}
return this.each(function(){
$.data(this,'beforePage',pageFun);
});
}
};
$.fn.fweditgrid = function(options) {
if (methods[options]) {
return methods[options].apply(this, Array.prototype.slice.call(
arguments, 1));
} else if (typeof options === 'object' || !options) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + options + ' does not exist on fweditgrid');
}
};
$.fn.fweditgrid.defaults = {
title : null,
iconCls : null,
border : true,
width : 'auto',
height : 'auto',
frozenColumns : null,
columns : null,
striped : true,
method : 'post',
nowrap : true,
idField : null,
expbtn : null,
url : null,
whereCls : null,
confid : null,
dsId : null,
dynDictWhereCls : null,
subTotalAlign : 'bottom',
loadMsg : '正在处理中 ...',
tipMsg : '没有相关的数据!',
hasPage : true,// 是否显示标题
rownumbers : false,
singleSelect : false,
fit : false,
queryParams : {},
sortName : null,
sortOrder : 'asc',
data : null,
beforePageText : '页码',
afterPageText : '共 {pages} 页',
displayMsg : '第 {from} 到 {to} 行 共 {total} 行',
total : 1,
pageSize : 20,
pageNumber : 1,
loading : false,
buttons : null,
mywin:false,//用于判断是否已经被弹出窗口初始化过详见 fwwindow: setEditGird
zIndex:0,
tr:null,
rowxh:1,
fwtab:false,
showRefresh : true,
disableMap:{},
ReGetListData : function(target, where, pageNum) {
ReLoadData(target, where, pageNum);
},
onLoadSuccess : function() {
},
onLoadError : function() {
}
};
})(jQuery);