You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head th:replace="~{fragments/modules/base/head :: head}"> <style>
#AttendanceDatatable td { vertical-align: middle !important; }
#AttendanceDatatable td:last-child { text-align: center; }
.mark-present, .mark-absent { width: 90px; } </style></head><body>
<div class="wrapper"> <!-- header top menu Start --> <header th:replace="~{fragments/modules/base/header :: header}"></header> <!-- header top menu end --> <div class="page-wrap"> <!--=============== Left Menu side Start ================--> <div th:replace="~{fragments/modules/base/menu :: menu}"></div> <!--=============== Left side End ================--> <div class="main-content"> <div class="container-fluid">
<div class="row mt-1"> <div class="col-md-12"> <div class="card mt-2"> <div class="card-header" style="font-weight: bold;"> Download Second Order Copy </div> <div class="card-body d-flex align-items-end">
<!-- SL No --> <div class="col-sm-3"> <label for="slNoInput">Search by Unique No</label> <input type="text" id="slNoInput" class="form-control" placeholder="Enter Unique No"> </div>
<!--<div class="col-md-1 col-sm-12 text-center pt-4">
<span style="font-weight: bold;">OR</span> </div>-->
<!-- Mobile Number --><!-- <div class="col-sm-3">--><!-- <label for="mobileInput">Search by Mobile No</label>--><!-- <input type="text" id="mobileInput" class="form-control"--><!-- placeholder="Enter Mobile Number" maxlength="10">--><!-- </div>-->
<!-- Button (hidden initially) --> <div class="col-sm-4 d-flex align-items-end"> <button id="searchBtn" class="btn btn-success mr-2"> Search </button> <button id="clearSearchBtn" class="btn btn-danger"> Clear </button> </div>
</div>
</div> </div> </div>
</div> </div> <div id="pageLoader" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); z-index: 9999; text-align: center;"> <div style="position: relative; top: 50%; transform: translateY(-50%);"> <div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"> <span class="sr-only">Loading...</span> </div> <!-- Add the 'Please wait' text below the spinner --> <p style="margin-top: 1rem; font-size: 1.2rem; color: #007bff;">Please wait...</p> </div> </div>
<div th:replace="~{fragments/modules/base/app_module_menu_box :: div}"></div>
<footer th:replace="~{fragments/modules/base/footer :: footer}"></footer> </div></div>
<script th:replace="~{fragments/modules/base/script :: script}"></script>
<script>
$('#searchBtn').click(function () {
let slNo = $('#slNoInput').val().trim();
if (slNo === '' ) { Swal.fire('Missing Input', 'Please enter SL No ', 'warning'); return; }
let url = '/election/api/mobile/second-order?';
if (slNo !== '') { url += 'slNo=' + slNo; }
$('#pageLoader').show();
fetch(url) .then(response => {
if (response.status === 404) { throw new Error("No data found for given input"); }
if (response.status === 400) { throw new Error("Invalid input"); }
if (!response.ok) { throw new Error("Something went wrong"); }
// ✅ Extract filename BEFORE converting to blob const disposition = response.headers.get("Content-Disposition");
let fileName = "SecondOrder.pdf";
if (disposition && disposition.includes("filename=")) { fileName = disposition .split("filename=")[1] .replace(/"/g, "") .trim(); }
// ✅ Return BOTH blob + filename return response.blob().then(blob => ({ blob, fileName })); }) .then(({ blob, fileName }) => {
let downloadUrl = window.URL.createObjectURL(blob);
let a = document.createElement("a"); a.href = downloadUrl; a.download = fileName; // ✅ filename from backend document.body.appendChild(a); a.click(); a.remove();
window.URL.revokeObjectURL(downloadUrl); // ✅ cleanup }) .catch(err => { Swal.fire({ icon: 'warning', title: 'No data', text: err.message, allowOutsideClick: false, allowEscapeKey: false, allowEnterKey: false }); }) .finally(() => { $('#pageLoader').hide(); }); });
$('#clearSearchBtn').click(function () {
// Clear input fields $('#slNoInput').val(''); //$('#mobileInput').val('');
// Optional: hide loader if visible $('#pageLoader').hide(); });</script>
</body></html>
|