1.在模态框中输入需要打印或导出的起始页数,配合后台的分页实现打印和导出相关页数的数据
2.用到ajax递归,promise
好啦,上代码
1,js部分
function Work(){
// // 导出
// $(".importTable").click(function(){openimportpagemodal()});
// // 打印
// $(".printTable").click(function(){openPageModal()})
// // 打印模态框确定
// $("#selectPrintPage .modal-footer .confirm").click(function(){getprintpage(this)});
// // 导出模态框确定
// $("#selectImportPage .modal-footer .confirm").click(function(){getprintpage(this,99)});
// 打开打印的模态框
function openPageModal() {
$("#selectPrintPage").find(".input-group").find("input").val("");
$("#selectPrintPage").modal("show");
}
// 打开导出模态框
function openimportpagemodal(){
// 清空數據
$("#selectImportPage").find(".input-group").find("input").val("");
$("#selectImportPage").modal("show");
}
// 根据页数获取数据
function getprintpage(e, type) {
// var href = work.showWindowHref();
var startcount = $(e).parent().prev().find("#startcount").val() - 0;
var endcount = $(e).parent().prev().find("#endcount").val() - 0;
// var page = (endcount - startcount) + 1;
var url = sjData();
var postData={};
postData.orderBy = "createTime ASC";
postData.pageNum = startcount;
postData.pageSize = 14;
if (type) {
// var tablehtml = $("#dayinTable").html();
queryAllTableData(url, postData, startcount, endcount, type);
} else {
queryAllTableData(url, postData, startcount, endcount);
}
}
// 查询表格数据
function queryAllTableData(url, postData, startcount, endcount, type) {
function queryData() {
var ajaxArr = [];
function recurrenceajax(url, postData) {
var retDataa = [];
$.ajax({
type: "post",
url: url,
data: postData,
async: false,
success: function (retData) {
if (retData.code == 0) {
retDataa = retData.data.result;
return retDataa;
}
},
error: function (retData) {
console.log(retData.msg);
}
})
return retDataa;
}
for (let i = startcount; i <= endcount; i++) {
postData.pageNum = i;
$.each(recurrenceajax(url, postData), function (k, v) {ajaxArr.push(v);})
}
return new Promise(function (resolve, reject) {
resolve(ajaxArr);
})
}
queryData().then(function (ajaxArr) {
// var href = work.showWindowHref();
var responsearr = ajaxArr;
var page =((endcount - startcount) + 1) * postData.pageSize;
if (responsearr.length <= page && responsearr.length > 0) {
function createTablee(data,url,num,type){
var html = `
<tr>
<th style="text-align:center;font-size:14px;">序号</th>
<th style="text-align:center;min-width:86px;font-size:14px;">机构名称</th>
<th style="text-align:center;min-width:86px;font-size:14px;">所属区域</th>
<th style="text-align:center;min-width:86px;font-size:14px;">状态</th>
<th style="text-align:center;min-width:86px;font-size:14px;">联系人</th>
<th style="text-align:center;min-width:86px;font-size:14px;">联系电话</th>
<th style="text-align:center;min-width:86px;font-size:14px;">机构地址</th>
</tr>
`
for(let i=0;i<data.length;i++){
html += `
<tr>
<td style="text-align:center;font-size:14px;">${i + 1}</td>
<td style="text-align:center;font-size:14px;">${data[i].orgname}</td>
<td style="text-align:center;font-size:14px;">${data[i].area}</td>
<td style="text-align:center;font-size:14px;">${data[i].orgstatus == 1 ? "启用" : "停用"}</td>
<td style="text-align:center;font-size:14px;">${data[i].orgcontact}</td>
<td style="text-align:center;font-size:14px;">${data[i].contactphone}</td>
<td style="text-align:center;font-size:14px;">${data[i].orgaddress}</td>
</tr>
`
}
$("#dayinTable").html(html);
return new Promise(function(resolve,reject){
resolve();
})
}
createTablee(responsearr, "", "", 99).then(function (data) {
/**
* type物質為打印,優質為導出
*/
if (!type) {
$("#selectPrintPage").modal("hide");
bdhtml = $("#dayincontent").html();
//alert(bdhtml);
sprnstr = "<!--startprint-->"; //开始打印标识字符串有17个字符
eprnstr = "<!--endprint-->"; //结束打印标识字符串
prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17); //从开始打印标识之后的内容
prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));//截取开始标识和结束标识之间的内容
var iframe = null;
iframe = document.getElementById("iframe1")
var iwindow = null;
var iwindow = iframe.contentWindow;//获取iframe的window对象
iwindow.document.close();
iwindow.document.write(prnhtml);
iwindow.print(); //调用浏览器的打印功能打印指定区域
} else {
$("#selectImportPage").modal("hide");
var tableId = document.getElementById('dayinTable');
var tableToExcel = (function () {
var uri = 'data:application/vnd.ms-excel;base64,',
template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta charset="UTF-8"></head><body><table>{table}</table></body></html>',
base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) },
format = function (s, c) {
return s.replace(/{(\w+)}/g,
function (m, p) { return c[p]; })
};
return function (table, name, filename, downloadid) {
if (!table.nodeType) table = document.getElementById(table);
var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML };
// window.location.href = uri + base64(format(template, ctx));
var a = document.createElement("a");
a.href = uri + base64(format(template, ctx));;
a.download = filename;
a.click();
}
})();
var name ="索杰机构管理列表";
tableToExcel(tableId, "", name);
}
})
}
})
}
}
$(function(){
work=new Work();
})
2.html部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="bootstrap.css">
<link rel="stylesheet" href="test.less">
</head>
<body>
<p class="pull-right button importTable">导出</p>
<p class="pull-right button printTable">打印</p>
<!-- border="1" cellpadding="0" cellspacing = "0" -->
<div id="dayin" style="display: none">
<div id="dayincontent">
<!--startprint-->
<table id="dayinTable" border="1" cellpadding="0" cellspacing="0"></table>
<!--endprint-->
</div>
<iframe id="iframe1"></iframe>
</div>
<!-- 選擇打印頁數莫太寬 -->
<div class="modal fade" tabindex="-1" role="dialog" id="selectPrintPage" data-backdrop="static">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true"><img src="../../img/customer/closeWorkOrder.png"
alt="" /></span></button>
<h4 class="modal-title">表格打印</h4>
</div>
<div class="modal-body">
<div class="form-group has-feedback count">
<!-- <label class="control-label col-md-2" for="count">打印页数:</label> -->
<div class="input-group col-md-10">
<div class="startCount">
<label>起始打印页数 : </label>
<div class="startDateGroup">
<input type="text" name="" id="startcount" />
</div>
</div>
<hr class="connect" />
<div class="endCount">
<label>结束打印页数 : </label>
<div class="endDateGroup">
<input type="text" name="" id="endcount" />
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<!-- onclick="getprintpage(this)" -->
<a type="button" class="btn btn-primary confirm">确定</a>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div>
</div>
</div>
</div>
<!-- 選擇導出頁數莫太寬 -->
<div class="modal fade" tabindex="-1" role="dialog" id="selectImportPage" data-backdrop="static">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true"><img src="../../img/customer/closeWorkOrder.png"
alt="" /></span></button>
<h4 class="modal-title">表格导出</h4>
</div>
<div class="modal-body">
<div class="form-group has-feedback count">
<!-- <label class="control-label col-md-2" for="count">打印页数:</label> -->
<div class="input-group col-md-10">
<div class="startCount">
<label>起始导出页数</label>
<div class="startCountGroup">
<input type="text" name="" id="startcount" />
</div>
</div>
<hr class="connect" />
<div class="endCount">
<label>结束导出页数</label>
<div class="endCountGroup">
<input type="text" name="" id="endcount" />
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<!-- onclick="getprintpage(this,99)" -->
<a class="btn btn-primary confirm" id="download">确定</a>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="jquery-3.1.1.js"></script>
<script type="text/javascript" src="bootstrap.min.js" type="text/javascript"
charset="utf-8"></script>
<script src="less.min.js"></script>
<script src="test.js"></script>
</body>
</html>
3.less部分
// 打印表格的樣式
#selectPrintPage,#selectImportPage{
.modal-dialog {
width: 495px;
height: 167px;
margin-top: 320px;
.modal-content {
width: 495px;
height: 167px;
.modal-header {
width: 100%;
height: 42px;
background:linear-gradient(90deg,rgba(47,172,203,1),rgba(74,190,145,1));
border-radius:2px;
padding: 11px;
h4 {
color: #fff;
font-size: 13px;
}
img{
width: 12px;
}
}
.modal-body {
width: 100%;
height: 76px;
padding: 20px 0 0 53px;
.count {
width: 100%;
label {
height: 38px;
text-align: left;
line-height: 38px;
color: #5C7191;
font-size: 12px;
padding: 0;
}
div {
height: 38px;
.startCount,.endCount{
float: left;
width: 145px;
height: 38px;
& > label{
float: left;
width: 101px;
height: 38px;
text-align: center;
line-height: 38px;
}
& > div{
float: left;
width: 42px;
height: 38px;
background: #ffffff;
border: 1px solid #cedbe1;
border-radius: 5px;
padding: 2px;
input{
width: 100%;
height: 100%;
text-align: center;
line-height: 38px;
padding: 0;
border: none;
outline: none;
}
}
}
.connect{
float: left;
width: 15px;
height: 2px;
margin: 19px 12px 0 22px;
background: #CEDBE1;
clear: none;
}
}
}
}
.modal-footer {
width: 100%;
height: 51px;
border: none;
padding: 10px;
text-align: center;
background:rgba(237,246,250,1);
border-radius:0px 0px 2px 2px;
a:nth-child(1) {
width: 58px;
height: 32px;
background:rgba(53,182,148,1);
border-radius:3px;
color: #fff;
font-size: 12px;
line-height: 20px;
border: none;
}
button:nth-child(2) {
width:58px;
height:32px;
background:rgba(53,120,182,1);
border:1px solid rgba(46,112,174,1);
border-radius:3px;
color: #EBF6F2;
font-size: 12px;
}
}
}
}
}