根据输入的起始页数打印和导出相应的内容

本文介绍了一种使用模态框输入页数,通过后台分页实现数据批量打印和导出的方法。利用Ajax递归和Promise,实现了从指定页数获取数据并呈现的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}

}

}

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值