(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=''; if (opts.hasPage) { tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; tableStr+=''; if(expbtn.indexOf('NEW')!=-1){ tableStr+=''; } } tableStr+='
'+opts.beforePageText+'
新增一行
'; 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);