打印预览页面,增加可选择式打印选择。类似的功能之前做过一个,那个是在打印预览之前就弹出窗口进行选择打印内容,再根据选择的内容将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>




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