From 68e72a07a82f649f6467c509d3cf0bc4af937c7b Mon Sep 17 00:00:00 2001 From: Euni4U <958079825@qq.com> Date: Tue, 25 Mar 2025 15:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=93=E6=A3=80=E5=B0=8F=E7=BB=93=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=8B=93=E5=B1=95=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/templates/report-template.html | 345 +++++++++++++++++++++++++- 1 file changed, 344 insertions(+), 1 deletion(-) diff --git a/public/templates/report-template.html b/public/templates/report-template.html index 30e1d99..4b70d39 100644 --- a/public/templates/report-template.html +++ b/public/templates/report-template.html @@ -1145,6 +1145,28 @@
第7页
+ +
@@ -1182,6 +1204,29 @@
第8页
+ + +
@@ -1218,6 +1263,29 @@
第9页
+ + +
@@ -1549,14 +1617,289 @@ }); } + // 处理尿常规内容分页 + function handleUrinePagination(urineText) { + if (!urineText || urineText === '--') { + // 如果没有尿常规内容,隐藏第二页 + document.getElementById('urine-page-2').style.display = 'none'; + document.getElementById('urine-summary-content').textContent = '--'; + // 更新页码 + updatePageNumbers(); + return; + } + + // 创建临时元素测量内容高度 + const testElement = document.createElement('div'); + testElement.className = 'summary-content'; + testElement.style.position = 'absolute'; + testElement.style.visibility = 'hidden'; + testElement.style.width = document.getElementById('urine-summary-content').offsetWidth + 'px'; + testElement.style.whiteSpace = 'pre-line'; + testElement.textContent = urineText; + document.body.appendChild(testElement); + + // 获取尿常规内容区域的可用高度 + const availableHeight = 250; // 大约可用高度,根据实际情况调整 + + if (testElement.offsetHeight <= availableHeight) { + // 内容不超过一页,隐藏第二页 + document.getElementById('urine-summary-content').textContent = urineText; + document.getElementById('urine-page-2').style.display = 'none'; + + // 更新页码 + updatePageNumbers(); + } else { + // 内容超过一页,需要分割 + // 计算每个字符占用的平均高度 + const avgCharHeight = testElement.offsetHeight / urineText.length; + // 计算第一页可容纳的字符数 + const firstPageChars = Math.floor(availableHeight / avgCharHeight); + + // 分割文本 + let firstPageText = urineText.substring(0, firstPageChars); + let secondPageText = urineText.substring(firstPageChars); + + // 尝试在更合适的位置分割,如句号或逗号 + const breakPoints = ['。', ',', ';', '\n']; + for (let i = 30; i > 0; i--) { + const checkPos = firstPageChars - i; + if (checkPos <= 0) continue; + const char = urineText.charAt(checkPos); + if (breakPoints.includes(char)) { + firstPageText = urineText.substring(0, checkPos + 1); + secondPageText = urineText.substring(checkPos + 1); + break; + } + } + + // 更新内容并显示第二页 + document.getElementById('urine-summary-content').textContent = firstPageText; + document.getElementById('urine-content-2').textContent = secondPageText; + document.getElementById('urine-page-2').style.display = 'block'; + + // 更新页码 + updatePageNumbers(); + } + + // 移除测试元素 + document.body.removeChild(testElement); + } + + // 修改updatePageNumbers函数以考虑尿常规续页 + function updatePageNumbers() { + // 获取所有页码元素 + const pageNumbers = document.querySelectorAll('.page-number'); + const summaryPage2Visible = document.getElementById('summary-page-2').style.display !== 'none'; + + // 计算实际总页数 + let totalPages = document.querySelectorAll('.report-item').length; + if (!summaryPage2Visible) { + totalPages--; // 如果汇总第二页不显示,减少总页数 + } + + // 从第1页开始计数 + let pageIndex = 1; + + pageNumbers.forEach((element) => { + // 更新页码文本 + element.textContent = `第${pageIndex}页 共${totalPages}页`; + pageIndex++; + + // 如果第二页汇总不显示,并且这是第四页的页码元素(即原本应该是汇总第二页),则跳过该元素 + if (!summaryPage2Visible && element.closest('#summary-page-2')) { + // 不增加pageIndex,因为这一页不会显示 + pageIndex--; + } + }); + } + + // 处理生化检查报告内容分页 + function handleBiochemistryPagination(biochemistryText) { + if (!biochemistryText || biochemistryText === '--') { + // 如果没有生化内容,隐藏第二页 + document.getElementById('biochemistry-page-2').style.display = 'none'; + document.getElementById('biochemistry-summary-content').textContent = '--'; + // 更新页码 + updatePageNumbers(); + return; + } + + // 创建临时元素测量内容高度 + const testElement = document.createElement('div'); + testElement.className = 'summary-content'; + testElement.style.position = 'absolute'; + testElement.style.visibility = 'hidden'; + testElement.style.width = document.getElementById('biochemistry-summary-content').offsetWidth + 'px'; + testElement.style.whiteSpace = 'pre-line'; + testElement.textContent = biochemistryText; + document.body.appendChild(testElement); + + // 获取生化内容区域的可用高度 + const availableHeight = 250; // 可用高度,与尿常规相同 + + if (testElement.offsetHeight <= availableHeight) { + // 内容不超过一页,隐藏第二页 + document.getElementById('biochemistry-summary-content').textContent = biochemistryText; + document.getElementById('biochemistry-page-2').style.display = 'none'; + + // 更新页码 + updatePageNumbers(); + } else { + // 内容超过一页,需要分割 + // 计算每个字符占用的平均高度 + const avgCharHeight = testElement.offsetHeight / biochemistryText.length; + // 计算第一页可容纳的字符数 + const firstPageChars = Math.floor(availableHeight / avgCharHeight); + + // 分割文本 + let firstPageText = biochemistryText.substring(0, firstPageChars); + let secondPageText = biochemistryText.substring(firstPageChars); + + // 尝试在更合适的位置分割,如句号或逗号 + const breakPoints = ['。', ',', ';', '\n']; + for (let i = 30; i > 0; i--) { + const checkPos = firstPageChars - i; + if (checkPos <= 0) continue; + const char = biochemistryText.charAt(checkPos); + if (breakPoints.includes(char)) { + firstPageText = biochemistryText.substring(0, checkPos + 1); + secondPageText = biochemistryText.substring(checkPos + 1); + break; + } + } + + // 更新内容并显示第二页 + document.getElementById('biochemistry-summary-content').textContent = firstPageText; + document.getElementById('biochemistry-content-2').textContent = secondPageText; + document.getElementById('biochemistry-page-2').style.display = 'block'; + + // 更新页码 + updatePageNumbers(); + } + + // 移除测试元素 + document.body.removeChild(testElement); + } + + // 处理血常规检查报告内容分页 + function handleBloodPagination(bloodText) { + if (!bloodText || bloodText === '--') { + // 如果没有血常规内容,隐藏第二页 + document.getElementById('blood-page-2').style.display = 'none'; + document.getElementById('blood-summary-content').textContent = '--'; + // 更新页码 + updatePageNumbers(); + return; + } + + // 创建临时元素测量内容高度 + const testElement = document.createElement('div'); + testElement.className = 'summary-content'; + testElement.style.position = 'absolute'; + testElement.style.visibility = 'hidden'; + testElement.style.width = document.getElementById('blood-summary-content').offsetWidth + 'px'; + testElement.style.whiteSpace = 'pre-line'; + testElement.textContent = bloodText; + document.body.appendChild(testElement); + + // 获取血常规内容区域的可用高度 + const availableHeight = 250; // 可用高度,与尿常规相同 + + if (testElement.offsetHeight <= availableHeight) { + // 内容不超过一页,隐藏第二页 + document.getElementById('blood-summary-content').textContent = bloodText; + document.getElementById('blood-page-2').style.display = 'none'; + + // 更新页码 + updatePageNumbers(); + } else { + // 内容超过一页,需要分割 + // 计算每个字符占用的平均高度 + const avgCharHeight = testElement.offsetHeight / bloodText.length; + // 计算第一页可容纳的字符数 + const firstPageChars = Math.floor(availableHeight / avgCharHeight); + + // 分割文本 + let firstPageText = bloodText.substring(0, firstPageChars); + let secondPageText = bloodText.substring(firstPageChars); + + // 尝试在更合适的位置分割,如句号或逗号 + const breakPoints = ['。', ',', ';', '\n']; + for (let i = 30; i > 0; i--) { + const checkPos = firstPageChars - i; + if (checkPos <= 0) continue; + const char = bloodText.charAt(checkPos); + if (breakPoints.includes(char)) { + firstPageText = bloodText.substring(0, checkPos + 1); + secondPageText = bloodText.substring(checkPos + 1); + break; + } + } + + // 更新内容并显示第二页 + document.getElementById('blood-summary-content').textContent = firstPageText; + document.getElementById('blood-content-2').textContent = secondPageText; + document.getElementById('blood-page-2').style.display = 'block'; + + // 更新页码 + updatePageNumbers(); + } + + // 移除测试元素 + document.body.removeChild(testElement); + } + + // 更新updatePageNumbers函数以考虑所有续页 + function updatePageNumbers() { + // 获取所有页码元素 + const pageNumbers = document.querySelectorAll('.page-number'); + const summaryPage2Visible = document.getElementById('summary-page-2').style.display !== 'none'; + const urinePage2Visible = document.getElementById('urine-page-2').style.display !== 'none'; + const biochemistryPage2Visible = document.getElementById('biochemistry-page-2').style.display !== 'none'; + const bloodPage2Visible = document.getElementById('blood-page-2').style.display !== 'none'; + + // 计算实际总页数 + let totalPages = document.querySelectorAll('.report-item').length; + if (!summaryPage2Visible) totalPages--; + if (!urinePage2Visible) totalPages--; + if (!biochemistryPage2Visible) totalPages--; + if (!bloodPage2Visible) totalPages--; + + // 从第1页开始计数 + let pageIndex = 1; + + pageNumbers.forEach((element) => { + // 更新页码文本 + element.textContent = `第${pageIndex}页 共${totalPages}页`; + pageIndex++; + + // 如果对应的报告第二页不显示,且这是该报告第二页的页码元素,则不增加pageIndex + if ((!summaryPage2Visible && element.closest('#summary-page-2')) || + (!urinePage2Visible && element.closest('#urine-page-2')) || + (!biochemistryPage2Visible && element.closest('#biochemistry-page-2')) || + (!bloodPage2Visible && element.closest('#blood-page-2'))) { + pageIndex--; + } + }); + } + // 页面加载完成后执行 document.addEventListener('DOMContentLoaded', () => { // 现有代码... - // 等待数据填充后处理汇总分页 + // 等待数据填充后处理分页 setTimeout(() => { const summaryText = document.getElementById('summary-content-1').textContent; handleSummaryPagination(summaryText); + + const urineText = document.getElementById('urine-summary-content').textContent; + handleUrinePagination(urineText); + + const biochemistryText = document.getElementById('biochemistry-summary-content').textContent; + handleBiochemistryPagination(biochemistryText); + + const bloodText = document.getElementById('blood-summary-content').textContent; + handleBloodPagination(bloodText); }, 2000); });