打印预览页面,增加可选择式打印选择。类似的功能之前做过一个,那个是在打印预览之前就弹出窗口进行选择打印内容,再根据选择的内容将html传到打印预览页面,其中还涉及部分无法直接通过html传递的内容,还需要重新生成。那个功能的场景是,已有数据页面,没有打印预览页面,要对若干项数据页面进行可选择式打印。详情请看 可选择式前端打印,window.print() 。而本次的功能场景不同,已有打印预览页面了,只是其中内容非常多,针对不同的用户,需要打印的内容不同,根据需要选择部分内容进行打印。
一、场景需求
打印内容包含若干项,标题,基础信息,标准要求表,回归检查表,检查内容填写表,并且检查内容填写表中有很多科室,科室也可以选择。
二、效果展示
选择打印内容界面
选择指定内容后的打印预览界面
三、实现方式
1、思路
a、给需要进行区分的项目的DIV添加id。如标题,基本信息,标准要求,回归检查,检查内容填写。
b、给检查内容填写表的科室td添加样式,deptName,deptNameHide。一个用于获取选择项的显示。进行内容处理时,两个都需要用到。
c、调用打印时,生成可选择项内容,并添加选择事件处理。此处使用到了semantic ui的复选框,有全选功能设置,以及回归检查复选框和科室复选框的逻辑控制。检查内容表未选时,科室不可选。检查内容表选中时,默认选中全部的科室。
d、操作选项时,生成临时数组用于记录选中项。
e、确认打印时,先给全部选项,包括科室,添加打印不显示样式。再根据临时数组,判断,给需要显示的项目去除掉打印不显示的样式。
f、添加表格线条样式,调用window.print()打印。
g、打印窗口关闭,恢复表格线条样式。
2、@media print的使用
@media print {
.noprint,.noprint1{
display: none !important;
}
}在@media print中的样式,只有在调用window.print()打印时,才会生效。所以可以使用该样式灵活控制打印内容,而不需要删除html代码,或添加其他样式影响正常预览界面显示效果。
3、源码
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<#include "./common.html" />
<style type="text/css">
@media print {
.noprint,.noprint1{
display: none !important;
}
}
.tableLine{
border-top: 1px solid #000000 !important;
border-right:1px solid #000000 !important;
border-collapse:collapse !important;
}
.tdLine{
border-left: 1px solid #000000 !important;
border-bottom:1px solid #000000 !important;
border-collapse:collapse !important;
}
.layui-table-cell {
min-height: 28px;
height: initial;
}
.layui-table-cell, .layui-table-tool-panel li {
white-space: initial;
}
.layui-table-view .layui-table {width:100%}
</style>
</head>
<body>
<!-- 标题 -->
<h1 style="text-align: center;margin-bottom: 10px" id="H1title"></h1>
<div style="width: 98%;margin: 5px auto" id="checkContenttable">
<!-- 基本信息 -->
<div id="checkInfo"></div>
<!-- 检查标准要求部分 -->
<div id="checkRequireDiv">
<div class="inline fields" id="checkContentDiv">
<div style="width:100%">
<div style="display: inline-block;font-weight: 1000;">检查内容表:</div>
</div>
</div>
<table class="ui selectable celled compact table" style="width: 100%" id="my-table">
<thead>
<tr>
<th>项目</th>
<th id="show2">分值</th>
<th style="width:45%">检查内容</th>
<th style="width:30%">备注</th>
<th id="show3">各项得分</th>
</tr>
</thead>
<tbody class="ui mini form" id="tbody"></tbody>
</table>
</div>
<!-- 回归问题部分 -->
<div id="regressionDiv">
<!-- 添加循环问题 -->
<div class="inline fields" style="display:none" id="checkTitleDiv">
<div style="width:100%">
<div style="display: inline-block;font-weight: 700;">PDCA回归检查项目表:</div>
</div>
</div>
<table class="ui selectable celled compact table" style="width: 100%" id="regressionCheckTable">
<thead>
<tr>
<th>序号</th>
<th>科室</th>
<th>检查项目</th>
<th>检查标准</th>
<th>上次检查整改问题说明</th>
<th>检查结果</th>
</tr>
</thead>
<tbody class="ui mini form" id="tbody3"></tbody>
</table>
</div>
</div>
<!-- 检查内容部分 -->
<div style="width: 98%;margin: 0 auto;margin-bottom:60px;" id="checkInfotable" >
<h3 style="text-align: center;margin-bottom: 10px" id="h12"></h3>
<table class="ui selectable celled compact table" style="width: 100%">
<thead>
<tr>
<th style="width: 100px">科室</th>
<th id="itemTh" style="display:none;width:12%">项目</th>
<th >存在问题</th>
<th id="scoreTh" style="display:none;width:10%">分值</th>
<th style="width: 110px">值班护士签名</th>
</tr>
</thead>
<tbody class="ui mini form" id="tbody2"></tbody>
</table>
</div>
<!-- 打印按钮 -->
<div class="bottomFixButton noprint1">
<a class="ui tiny orange button" onclick="selectPrintContent()" >打印</a>
<a class="ui tiny button" id="cancleBtn">关闭</a>
</div>
</body>
<script type="text/javascript">
function point(){
$("td").addClass("tdLine");
$("table").addClass("tableLine");
$("th").addClass("tdLine");
window.print();
$("td").removeClass("tdLine");
$("table").removeClass("tableLine");
$("th").removeClass("tdLine");
}
/**
* 选择打印内容
*/
function selectPrintContent(){
var deptNameList=new Array();
$("#checkInfotable #tbody2 td.deptName").each(function(){
deptNameList.push($(this).html());
});
//生成列表选项卡
var htmlContent='<div class="ui form mini" style="margin:5px 5px 10px 5px;">';
htmlContent+= '<div class="wide field">';
htmlContent+= '<label style="font-size:16px">打印选项</label>';
htmlContent+= '<div class="ui checkbox" name="optionContent" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionContentInput" tabindex="0" value="title" checked class="hidden">';
htmlContent+= '<label>标题项</label>';
htmlContent+= '</div>';
htmlContent+= '<div class="ui checkbox" name="optionContent" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionContentInput" tabindex="0" value="base" checked class="hidden">';
htmlContent+= '<label>基本信息表</label>';
htmlContent+= '</div>';
htmlContent+= '<div class="ui checkbox" name="optionContent" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionContentInput" tabindex="0" value="require" checked class="hidden">';
htmlContent+= '<label>检查标准要求表</label>';
htmlContent+= '</div>';
htmlContent+= '<div class="ui checkbox" name="optionContent" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionContentInput" tabindex="0" value="regression" checked class="hidden">';
htmlContent+= '<label>回归检查表</label>';
htmlContent+= '</div>';
htmlContent+= '<div class="ui checkbox" name="optionContent" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionContentInput" tabindex="0" value="check" checked class="hidden">';
htmlContent+= '<label>检查内容填写表</label>';
htmlContent+= '</div>';
htmlContent+= '</div>';
htmlContent+= '<div class="wide field" style="">';
htmlContent+= '<label style="font-size:16px">打印科室</label>';
htmlContent+= '<div class="ui checkbox deptNameSelectAll" style="margin-top:10px;margin-left:20px;font-weight:600"><input type="checkbox" name="deptNameSelectAll" tabindex="0" checked class="hidden"><label>全选</label></div><br/>';
for(var i=0;i<deptNameList.length;i++){
htmlContent+= '<div class="ui checkbox" name="optionDeptName" style="margin-top:10px;margin-left:20px;">';
htmlContent+=' <input type="checkbox" name="optionDeptNameInput" tabindex="0" value="'+deptNameList[i]+'" checked class="hidden">';
htmlContent+= '<label>'+deptNameList[i]+'</label>';
htmlContent+= '</div>';
}
htmlContent+= '</div>';
htmlContent+='</div>';
var infoSelectArray=new Array();
var deptNameSelectArray=new Array();
parent.layer.confirm(htmlContent, {
title:'请选择打印内容',
skin:"qualityCheckImplementPrintLayer",
btn: ['确定','取消'], //按钮
success: function(layero, index){
$(".ui.checkbox[name='optionDeptName']",window.parent.document).each(function(){
deptNameSelectArray.push($(this).children().eq(0).val());
});
$(".ui.checkbox[name='optionContent']",window.parent.document).each(function(){
infoSelectArray.push($(this).children().eq(0).val());
});
$(".ui.checkbox",window.parent.document).checkbox({
onChange: function() {
infoSelectArray=[];
deptNameSelectArray=[];
//选项数组
$(".ui.checkbox[name='optionContent']",window.parent.document).each(function() {
var classStr=$(this).attr("class");
if($(this).checkbox('is checked') ) {
infoSelectArray.push($(this).children().eq(0).val());
}
}
);
//如果当前点击的是检查内容填写表
if($(this).val()=="check"){
$(".ui.checkbox[name='optionDeptName']",window.parent.document).checkbox('set unchecked');
if(($(this).parent().checkbox('is checked') && !$(".ui.checkbox.deptNameSelectAll",window.parent.document).checkbox('is checked'))
|| (!$(this).parent().checkbox('is checked') && $(".ui.checkbox.deptNameSelectAll",window.parent.document).checkbox('is checked'))
){
//触发点击
$(".ui.checkbox.deptNameSelectAll",window.parent.document).click();
}
}
//如果当前选择的是科室 当前是勾选状态,并且当前未勾选检查内容填写表
if($(this).attr("name")=="optionDeptNameInput" && !$($(".ui.checkbox[name='optionContent']",window.parent.document)[4]).checkbox('is checked') && $(this).parent().checkbox('is checked')){
//设置取消勾选
$(this).parent().checkbox('set unchecked');
}
var $checkbox = $(".ui.checkbox[name='optionDeptName']",window.parent.document);
var dept_count=0;
var dept_names="";
var dept_ids="";
if($(this).attr("name")=='deptNameSelectAll'&&$(this).parent().checkbox('is checked')){
$checkbox.each(function() {
$(this).checkbox('set checked');
})
}else if($(this).attr("name")=='deptNameSelectAll'&&!$(this).parent().checkbox('is checked')){
$checkbox.each(function() {
$(this).checkbox('set unchecked');
});
}
var flag=true;
$checkbox.each(function() {
var classStr=$(this).attr("class");
if($(this).checkbox('is checked') ) {
deptNameSelectArray.push($(this).children().eq(0).val());
}else{
flag=false;
}
});
if(flag){
$(".deptNameSelectAll",window.parent.document).checkbox('set checked');
}else{
$(".deptNameSelectAll",window.parent.document).checkbox('set unchecked');
}
},
});
}
}, function(){
//首先给全部内容添加打印不显示
//标题项
$("#H1title").addClass("noprint");
//基本信息
$("#checkInfo").addClass("noprint");
//标准要求
$("#checkRequireDiv").addClass("noprint");
//回归检查
$("#regressionDiv").addClass("noprint");
//检查内容表
$("#checkInfotable").addClass("noprint");
//科室项
$("#tbody2 tr").addClass("noprint");
//再根据选择项去除显示项的打印不显示
for(var i=0;i<infoSelectArray.length;i++){
var info=infoSelectArray[i];
if("title"==info){
$("#H1title").removeClass("noprint");
}else if("base"==info){
$("#checkInfo").removeClass("noprint");
}else if("require"==info){
$("#checkRequireDiv").removeClass("noprint");
}else if("regression"==info){
$("#regressionDiv").removeClass("noprint");
}else if("check"==info){
$("#checkInfotable").removeClass("noprint");
}
}
//去除科室的打印不显示
for(var i=0;i<deptNameSelectArray.length;i++){
var deptName=deptNameSelectArray[i];
$("#tbody2 .deptName[deptname='"+deptName+"']").parent().removeClass("noprint");
$("#tbody2 .deptNameHide[deptname='"+deptName+"']").parent().removeClass("noprint");
}
point();
})
}
/**
* 加载回归检查重点表格
*/
function loadRegressionCheckTable(curPlanId){
$.ajax({
url:basePath +"/qualityCheckPlan/loadRegressionPoints.do",
data:{
curPlanId:curPlanId
},
success:function(msg){
var context = "";
//map项目数据 list
var CheckRegressionList =msg.list;
//表格数据
//mapToplist 遍历项目数据list
for ( var i = 0; i < CheckRegressionList.length; i++) {
var deptName = CheckRegressionList[i].deptName;//科室名称
var checkItem = CheckRegressionList[i].checkItem;//项目名称
var itemRequire = CheckRegressionList[i].itemRequire;//检查标准
var checkInfo = CheckRegressionList[i].checkInfo;//上一次检查整改问题说明
var curMeasureResult = "";//检查结果(自己手填)
context += "<tr><td style='text-align: center'>"+(i+1)+"</td>";
context += "<td style='text-align: center'>"+deptName+"</td>";
context += "<td style='text-align: center'>"+checkItem+"</td>";
context += "<td style='text-align: left'>"+itemRequire+"</td>";
context += "<td style='text-align: left'>"+checkInfo+"</td>";
context += "<td style='text-align: left'>"+curMeasureResult+"</td></tr>";
}
$("#tbody3").html(context);
if(CheckRegressionList.length>0){
//有回归检查问题的数据就显示表格
$("#regressionCheckTable").show();
$("#checkTitleDiv").show();
}else{
//没有回归检查问题的数据就隐藏表格
$("#regressionCheckTable").hide();
$("#checkTitleDiv").hide();
}
}
})
}
function getQueryVariable(variable){
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
$.ajax({
url:basePath +"/quality/prewviewInfoData.do",
data:{
plan_id:getQueryVariable("plan_id")
},
success:function(msg){
$("#H1title").html(msg.list.projectTemplateInfo.template_name);
//$("#h12").html(msg.list.projectTemplateInfo.template_name);
$("#h12").html("检查内容填写表");
var formType = msg.list.formType;
//加载表格(直接加载循环问题的表格)
var plainid = getQueryVariable("plan_id");
//加载表格数据
loadRegressionCheckTable(plainid);
if(formType=="1"){
$("#show1").show();
$("#show2").show();
$("#show3").show();
}else{
$("#show1").hide();
$("#show2").hide();
$("#show3").hide();
}
var context = "";
//map项目数据 list
var mapTop =msg.list.mapToplist;
//mapToplist 遍历项目数据list
for ( var i = 0; i < mapTop.length; i++) {
var item_baseName = mapTop[i].itemBaseInfo.item_name;//项目名称
var item_targetscore = mapTop[i].itemVersion.target_score;//项目目标分数
//要求数据、评分数据
var maplist=mapTop[i].maplist;
var itemContext="";
var index=0;
for ( var j = 0; j < maplist.length; j++) {
var remark=maplist[j].itemRequires.remark;
if(!remark){
remark="";
}
//评分数据
if (j==0) {
itemContext+="<td style=\"text-align: left\">"+maplist[j].itemRequires.require_info+"</td>";
itemContext+="<td>"+remark+"</td>";
if(formType=="1"){
itemContext+="<td>"+maplist[j].itemRequires.score+"</td>";
}
}else{
itemContext+="<tr>";
itemContext+="<td style='display:none'>"+item_baseName+"</td>";
if(formType=="1"){
itemContext+="<td style='display:none'>"+item_targetscore+"</td>";
}
itemContext+="<td style=\"text-align: left\">"+maplist[j].itemRequires.require_info+"</td>";
itemContext+="<td>"+remark+"</td>";
if(formType=="1"){
itemContext+="<td>"+maplist[j].itemRequires.score+"</td>";
}
itemContext+="</tr>";
}
}
index=Number(maplist.length);
context+="<tr>";
context+= "<td rowspan=\""+index+"\">"+item_baseName+"</td>";
if(formType=="1"){
context+= "<td rowspan=\""+index+"\">"+item_targetscore+"</td>";
}
context+= itemContext;
context+= "</tr>";
}
$("#tbody").html(context);
}
})
$.ajax({
url:basePath +"/qualityCheckImplement/checkContentPrintPersonInfo.do",
data:{
planid:getQueryVariable("plan_id")
},
success:function(msg){
var html = "";
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">计划时间:</label>';
html+='<div style="float: left">'+msg.data.plan_begin_time+"至"+msg.data.plan_end_time+'</div>';
html+=' </div>';
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">计划检查日期:</label>';
if(!msg.data.planCheckDate2 && msg.data.planCheckDate){
//如果结束时间为空,开始时间不为空 默认取开始时间 兼容老数据
html+='<div style="float: left">'+msg.data.planCheckDate+'至'+msg.data.planCheckDate+'</div>';
}else if(msg.data.planCheckDate && msg.data.planCheckDate2){
//都有数据时
html+='<div style="float: left">'+msg.data.planCheckDate+'至'+msg.data.planCheckDate2+'</div>';
}
html+=' </div>';
if(msg.data.checkEndTime && msg.data.checkStartTime){
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">检查时间范围:</label>';
html+='<div style="float: left">'+msg.data.checkStartTime+"-"+msg.data.checkEndTime+'</div>'
html+=' </div>';
}
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">检查组长:</label>';
html+='<div style="float: left">'+msg.data.leader_name+'</div>'
html+=' </div>';
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">检查成员:</label>';
html+='<div style="float: left">'+msg.data.member_name+'</div>'
html+=' </div>';
html+='<div style="width: 100%;height: 24px">';
html+='<label style="font-weight: 700;float: left;padding-right: 10px">检查重点:</label>';
html+='<div style="float: left">'+msg.data.important+'</div>'
html+=' </div>';
$("#checkInfo").html(html);
}
})
/* $(".item").click(function(){
$(".item").removeClass("active");
$(this).addClass("active")
if($(this).attr("data-type")=="1"){
$("#checkContenttable").show();
$("#checkInfotable").hide();
}else{
$("#checkInfotable").show();
$("#checkContenttable").hide();
}
}) */
$.ajax({
type: "POST",
dataType: "json",
url: basePath + "/qualityCheckImplement/refreshDeptImplement.do",
data: {
planId:getQueryVariable("plan_id")
},
success: function (msg) {
//科室项目map
var itemMap=msg.itemMap;
//表单类型 1打分制 2填空制
var formType=msg.formType;
if(1==formType){
$("#scoreTh").show();
$("#itemTh").show();
}else{
$("#scoreTh").hide();
$("#itemTh").hide();
}
var html ="";
if(msg.mapList.alreadyCheck!=null){
html=createHtml(msg.mapList.alreadyCheck,formType,itemMap);
}
if(msg.mapList.waitCheck!=null){
html=createHtml(msg.mapList.waitCheck,formType,itemMap);
}
if(msg.mapList.draftCheck!=null){
html=createHtml(msg.mapList.draftCheck,formType,itemMap);
}
$("#tbody2").html(html)
}
})
//创建html
function createHtml(data,formType,itemMap){
var html="";
if(data){
for(i=0;i<data.length;i++){
//打分制
if(1==formType){
var itemCount=0;
for(var m in itemMap){
itemCount++;
}
var index=0;
//根据项目数遍历
for(var m in itemMap){
index++
//第一条时,增加rowspan值设置
if(index==1){
html+='<tr style="height: 50px">';
html+='<td align="center" rowspan="'+itemCount+'" class="deptName" deptName="'+data[i].dept_name+'">'+data[i].dept_name+'</td>'
html+='<td>'+itemMap[m]+'</td>';
html+='<td></td>';
html+='<td></td>';
html+='<td rowspan="'+itemCount+'"></td>';
html+='</tr>';
}else{
//其他数据,隐藏合并行列
html+='<tr style="height: 50px">';
html+='<td style="display:none" class="deptNameHide" deptName="'+data[i].dept_name+'">'+data[i].dept_name+'</td>'
html+='<td>'+itemMap[m]+'</td>';
html+='<td></td>';
html+='<td></td>';
html+='<td style="display:none"></td>';
html+='</tr>';
}
}
//填空制
}else{
html+='<tr style="height: 50px">';
html+='<td align="center" class="deptName" deptName="'+data[i].dept_name+'">'+data[i].dept_name+'</td>'
html+='<td></td>';
html+='<td></td>';
html+='</tr>';
}
}
}
return html;
}
//取消
$("#cancleBtn").on('click', function() {
var varindex=parent.layer.getFrameIndex(window.name);
parent.layer.close(varindex);
});
</script>
</html>




还没有评论,来说两句吧...