历史版本6 :JS 实现选中内容批量打印/导出 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 问题描述编辑

有些时候在进行批量导出或者批量打印时,只想实现对勾选选中的部分行进行打印,并且选中行的内容传递给新的模板,进行打印,不同行传递的模板不一样。那么该如何实现呢?

222

2. 示例编辑

2.1 数据准备

新建一个数据查询ds1:SELECT * FROM 订单 where 1=1 ${if(len(p1) == 0,"","and 订单ID in ('" + p1 + "')")} limit 10

2.2 报表设计

主报表设计

222

C1、C2单元格设置为按钮控件,C1单元格的按钮名称为批量打印,C2单元格的按钮名称为批量导出。

B4单元格设置为复选框控件。

将ds1中的订单ID,货主名称,是否已付拖入到单元格C4、D4、E4中。

参数界面设置:

222

给下拉复选框控件绑定数据字典,类型设置为数据查询,实际值和显示值都是订单ID。

将报表另存为test.cpt

子报表设置

222

将此子报表另存为test10001.cpt,用于接收test.cpt传过来的参数。

222

将此子报表另存为test10002.cpt,用于接收test.cpt传过来的参数。

2.3 添加批量打印JS事件

右击C1单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:

image.png

批量打印JS代码如下:

var printurl="http://localhost:8075/webroot/decision/view/report";
var names = [];
var paths = [];
var singlepaths = [];    
var url = "ReportServer?reportlets=(";
var $span = $('.fr-checkbox-checkon');  //获取选中的复选框  
var $tds = $("td").has($span);     //定义选中复选框的单元格   
var $trs = $("tr").has($tds);   
var p=[]; 
for(var i=0; i<$trs.length;i++){   
    var name = $("td:eq(2)",$($trs[i])).html();  //获取选中的C4单元格的值  
    var a =  $("td:eq(3)",$($trs[i])).html();
    var b = $("td:eq(4)",$($trs[i])).html();    //
    names.push(name);     //将选中的值放到数组中 
    var cptpath ="test"+ name+".cpt";
    var urlstring = "{reportlet:" +"'"+FR.cjkEncode(cptpath)+"'"+",p1:"+"'"+name+"'"+",p2:"+"'"+a+"'"+",p3:"+"'"+b+"'"+"}"; 
    debugger;
    paths.push(urlstring);      
    debugger;
}  
if(paths.length>0){
var rpaths=paths.join(","); 
var reportlets="["+rpaths+"]";  
var config = {
url : printurl,                    
isPopUp : false,                  
data : {reportlets:reportlets}            
};    
}          
debugger; 
FR.doURLPDFPrint(config);

2.4 添加批量导出JS事件

右击C2单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:

image.png

批量导出JS代码如下:

var paths = [];    
var url = "report?reportlets=[";
var $span = $('.fr-checkbox-checkon');  //获取选中的复选框  
var $tds = $("td").has($span);     //定义选中复选框的单元格   
var $trs = $("tr").has($tds);    
for(var i=0; i<$trs.length;i++){    
    var name = $("td:eq(2)",$($trs[i])).html();   //获取选中的C3单元格的值 
    var a = $("td:eq(3)",$($trs[i])).html();  
    var b = $("td:eq(4)",$($trs[i])).html();
    var urlstring = "{reportlet:\"/test"+name+".cpt\",p1:\""+name+"\",p2:\""+a+"\",p3:\""+b+"\"}"; 
    paths.push(urlstring);       
 }
    url = url + paths +"]&format=word&__filename__=Xname";
    window.open(encodeURI(url));


2.5 效果预览

PC端

保存后,点击填报预览,即可对选中行的数据根据不同模板打印或导出。

移动端编辑

移动端不支持各种打印和导出方式

3.模板下载编辑