Commit eed6f06884c6765dffa2c1fe6713ee3661e1ee11
Merge branch 'ezTeach-2.0.0.0.release' of http://120.78.57.84/baoman/Ezquiz_Plat…
…form into ezTeach-2.0.0.0.release
Showing
1 changed file
with
63 additions
and
42 deletions
src/utils/index.js
@@ -276,7 +276,7 @@ export function b64DecodeUnicode(str) { | @@ -276,7 +276,7 @@ export function b64DecodeUnicode(str) { | ||
276 | }) | 276 | }) |
277 | .join("") | 277 | .join("") |
278 | ); | 278 | ); |
279 | - } catch (e) {} | 279 | + } catch (e) { } |
280 | return uni; | 280 | return uni; |
281 | } | 281 | } |
282 | 282 | ||
@@ -885,12 +885,12 @@ export function formatGradeNameClass(data) { | @@ -885,12 +885,12 @@ export function formatGradeNameClass(data) { | ||
885 | 885 | ||
886 | ///试卷定制化打印 | 886 | ///试卷定制化打印 |
887 | export async function paperPrint(paper) { | 887 | export async function paperPrint(paper) { |
888 | - let printWin = window.open("", "_blank", "width=800,height=600,resizable=no"); | 888 | + let printWin = window.open("", "_blank", "width=800,height=600,resizable=no"); |
889 | var browser = getBrowserEngine(printWin); | 889 | var browser = getBrowserEngine(printWin); |
890 | var subjectName = paper.subjectName; | 890 | var subjectName = paper.subjectName; |
891 | var paperTitle = paper.title; | 891 | var paperTitle = paper.title; |
892 | var paperQuestions = paper.questionList; | 892 | var paperQuestions = paper.questionList; |
893 | - function getBrowserEngine(windowParams) { | 893 | + function getBrowserEngine(windowParams) { |
894 | if (windowParams.navigator.userAgent.indexOf("Edge") > -1) { | 894 | if (windowParams.navigator.userAgent.indexOf("Edge") > -1) { |
895 | return "EdgeHTML"; | 895 | return "EdgeHTML"; |
896 | } | 896 | } |
@@ -911,6 +911,10 @@ export async function paperPrint(paper) { | @@ -911,6 +911,10 @@ export async function paperPrint(paper) { | ||
911 | } | 911 | } |
912 | return "Blink"; // Assume it's Chrome, Safari, or an alternative Blink-based browser | 912 | return "Blink"; // Assume it's Chrome, Safari, or an alternative Blink-based browser |
913 | } | 913 | } |
914 | + function windowPrint(windowParams) { | ||
915 | + windowParams.print(); | ||
916 | + windowParams.close(); | ||
917 | + } | ||
914 | function numberToChinese(num) { | 918 | function numberToChinese(num) { |
915 | const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; | 919 | const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; |
916 | const chineseUnits = ["", "十", "百", "千", "万", "亿"]; | 920 | const chineseUnits = ["", "十", "百", "千", "万", "亿"]; |
@@ -967,19 +971,21 @@ export async function paperPrint(paper) { | @@ -967,19 +971,21 @@ export async function paperPrint(paper) { | ||
967 | printWin.document.documentElement.scrollHeight, // 整个文档高度 | 971 | printWin.document.documentElement.scrollHeight, // 整个文档高度 |
968 | printWin.document.body.scrollHeight // Body 的高度 | 972 | printWin.document.body.scrollHeight // Body 的高度 |
969 | ); | 973 | ); |
970 | - const totalHeightMM = totalHeightPx * 25.4 / 96; | ||
971 | - // ie浏览器高度 | ||
972 | - var A4HeightMM = 287; | ||
973 | - if (browser == "Google Chrome") { | ||
974 | - A4HeightMM = 297; | ||
975 | - } | ||
976 | - var pages = Math.ceil(totalHeightMM / A4HeightMM) + 1; | ||
977 | - for (var page = 0; page < pages; page++) { | ||
978 | - var pageFooteDiv = printWin.document.createElement('div'); | ||
979 | - pageFooteDiv.classList.add('page-footer'); | ||
980 | - pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${page + 1}页(共${pages}页)`; | ||
981 | - pageFooteDiv.style.top = (page + 1) * A4HeightMM + (page * 5.5) + 'mm'; | ||
982 | - printWin.document.body.appendChild(pageFooteDiv); | 974 | + const a4Box = printWin.document.createElement('div'); |
975 | + a4Box.classList.add('altA4Box'); | ||
976 | + printWin.document.body.appendChild(a4Box); | ||
977 | + const a4BoxHeightPx = a4Box.offsetHeight; | ||
978 | + if (a4BoxHeightPx > 0) { | ||
979 | + printWin.document.body.removeChild(a4Box); | ||
980 | + var pages = Math.ceil(totalHeightPx / a4BoxHeightPx); | ||
981 | + if (pages > 2) pages += 1; | ||
982 | + for (var page = 0; page < pages; page++) { | ||
983 | + var pageFooteDiv = printWin.document.createElement('div'); | ||
984 | + pageFooteDiv.classList.add('page-footer'); | ||
985 | + pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${page + 1}页(共${pages}页)`; | ||
986 | + pageFooteDiv.style.top = (page + 1) * a4BoxHeightPx + (page * 25) + 'px'; | ||
987 | + printWin.document.body.appendChild(pageFooteDiv); | ||
988 | + } | ||
983 | } | 989 | } |
984 | } | 990 | } |
985 | // size: A4 portrait; | 991 | // size: A4 portrait; |
@@ -991,25 +997,33 @@ export async function paperPrint(paper) { | @@ -991,25 +997,33 @@ export async function paperPrint(paper) { | ||
991 | @media print | 997 | @media print |
992 | { | 998 | { |
993 | @page { | 999 | @page { |
994 | - size: A4 portrait; | ||
995 | - height: 300mm; | ||
996 | - margin-top:5mm; | 1000 | + size: A4 portrait; |
1001 | + margin-top:0mm; | ||
997 | margin-bottom:10mm; | 1002 | margin-bottom:10mm; |
998 | - margin-left:2mm; | ||
999 | - margin-right:2mm; | 1003 | + margin-left:4mm; |
1004 | + margin-right:4mm; | ||
1000 | } | 1005 | } |
1001 | - | ||
1002 | - body { | ||
1003 | - counter-reset: page-number; /* 重置页码计数器 */ | ||
1004 | - } | ||
1005 | - | ||
1006 | - mn { | ||
1007 | - padding-top:2px; | ||
1008 | - } | ||
1009 | - } | 1006 | + .altA4Box { |
1007 | + display:none; | ||
1008 | + } | ||
1009 | + } | ||
1010 | + mn { | ||
1011 | + padding-top:2px; | ||
1012 | + } | ||
1013 | + .bodyBox { | ||
1014 | + width: 210mm; | ||
1015 | + padding-top:0mm; | ||
1016 | + padding-bottom:0mm; | ||
1017 | + padding-left:4mm; | ||
1018 | + padding-right:4mm; | ||
1019 | + } | ||
1020 | + .altA4Box { | ||
1021 | + height: 317mm; | ||
1022 | + } | ||
1010 | table tfoot { | 1023 | table tfoot { |
1011 | - height: 0px; | 1024 | + height: 30px; |
1012 | display: table-footer-group; | 1025 | display: table-footer-group; |
1026 | + | ||
1013 | } | 1027 | } |
1014 | table thead { | 1028 | table thead { |
1015 | height: 20px; | 1029 | height: 20px; |
@@ -1092,6 +1106,9 @@ export async function paperPrint(paper) { | @@ -1092,6 +1106,9 @@ export async function paperPrint(paper) { | ||
1092 | 1106 | ||
1093 | printWin.document.head.appendChild(style); | 1107 | printWin.document.head.appendChild(style); |
1094 | 1108 | ||
1109 | + const bodyBoxDom = printWin.document.createElement('div'); | ||
1110 | + bodyBoxDom.classList.add('bodyBox'); | ||
1111 | + | ||
1095 | const titleBoxDom = printWin.document.createElement('div'); | 1112 | const titleBoxDom = printWin.document.createElement('div'); |
1096 | titleBoxDom.classList.add('title-header'); | 1113 | titleBoxDom.classList.add('title-header'); |
1097 | const titleDom = printWin.document.createElement('h3'); | 1114 | const titleDom = printWin.document.createElement('h3'); |
@@ -1102,7 +1119,7 @@ export async function paperPrint(paper) { | @@ -1102,7 +1119,7 @@ export async function paperPrint(paper) { | ||
1102 | subjectDom.classList.add('title-content'); | 1119 | subjectDom.classList.add('title-content'); |
1103 | titleBoxDom.appendChild(titleDom); | 1120 | titleBoxDom.appendChild(titleDom); |
1104 | titleBoxDom.appendChild(subjectDom); | 1121 | titleBoxDom.appendChild(subjectDom); |
1105 | - printWin.document.body.appendChild(titleBoxDom); | 1122 | + bodyBoxDom.appendChild(titleBoxDom); |
1106 | 1123 | ||
1107 | const studentInputBoxDom = printWin.document.createElement('div'); | 1124 | const studentInputBoxDom = printWin.document.createElement('div'); |
1108 | studentInputBoxDom.classList.add('student-input'); | 1125 | studentInputBoxDom.classList.add('student-input'); |
@@ -1115,9 +1132,9 @@ export async function paperPrint(paper) { | @@ -1115,9 +1132,9 @@ export async function paperPrint(paper) { | ||
1115 | studentInputBoxDom.appendChild(studentClassInputDom); | 1132 | studentInputBoxDom.appendChild(studentClassInputDom); |
1116 | studentInputBoxDom.appendChild(studentNameInputDom); | 1133 | studentInputBoxDom.appendChild(studentNameInputDom); |
1117 | studentInputBoxDom.appendChild(studentNoInputDom); | 1134 | studentInputBoxDom.appendChild(studentNoInputDom); |
1118 | - printWin.document.body.appendChild(studentInputBoxDom); | 1135 | + bodyBoxDom.appendChild(studentInputBoxDom); |
1119 | 1136 | ||
1120 | - const tableDom = printWin.document.createElement('table'); | 1137 | + const tableDom = printWin.document.createElement('table'); |
1121 | const theadDom = printWin.document.createElement('thead'); | 1138 | const theadDom = printWin.document.createElement('thead'); |
1122 | const theadTrDom = printWin.document.createElement('tr'); | 1139 | const theadTrDom = printWin.document.createElement('tr'); |
1123 | theadTrDom.appendChild(printWin.document.createElement('th')); | 1140 | theadTrDom.appendChild(printWin.document.createElement('th')); |
@@ -1166,12 +1183,12 @@ export async function paperPrint(paper) { | @@ -1166,12 +1183,12 @@ export async function paperPrint(paper) { | ||
1166 | qTbodyContentTdDom.appendChild(questionDom); | 1183 | qTbodyContentTdDom.appendChild(questionDom); |
1167 | qTbodyTrDom.appendChild(qTbodyLeftAltTdDom); | 1184 | qTbodyTrDom.appendChild(qTbodyLeftAltTdDom); |
1168 | qTbodyTrDom.appendChild(qTbodyContentTdDom); | 1185 | qTbodyTrDom.appendChild(qTbodyContentTdDom); |
1169 | - qTbodyTrDom.appendChild(qTbodyRightAltTdDom); | 1186 | + qTbodyTrDom.appendChild(qTbodyRightAltTdDom); |
1170 | tbodyDom.appendChild(qTbodyTrDom); | 1187 | tbodyDom.appendChild(qTbodyTrDom); |
1171 | } | 1188 | } |
1172 | } | 1189 | } |
1173 | tableDom.appendChild(tbodyDom); | 1190 | tableDom.appendChild(tbodyDom); |
1174 | - printWin.document.body.appendChild(tableDom); | 1191 | + bodyBoxDom.appendChild(tableDom); |
1175 | 1192 | ||
1176 | const tfootDom = printWin.document.createElement('tfoot'); | 1193 | const tfootDom = printWin.document.createElement('tfoot'); |
1177 | const tfootTrDom = printWin.document.createElement('tr'); | 1194 | const tfootTrDom = printWin.document.createElement('tr'); |
@@ -1180,17 +1197,21 @@ export async function paperPrint(paper) { | @@ -1180,17 +1197,21 @@ export async function paperPrint(paper) { | ||
1180 | tfootTrDom.appendChild(printWin.document.createElement('td')); | 1197 | tfootTrDom.appendChild(printWin.document.createElement('td')); |
1181 | tfootDom.appendChild(tfootTrDom); | 1198 | tfootDom.appendChild(tfootTrDom); |
1182 | tableDom.appendChild(tfootDom); | 1199 | tableDom.appendChild(tfootDom); |
1200 | + printWin.document.body.appendChild(bodyBoxDom); | ||
1183 | // generatePageParams(); | 1201 | // generatePageParams(); |
1184 | const iamges = printWin.document.querySelectorAll('img'); | 1202 | const iamges = printWin.document.querySelectorAll('img'); |
1185 | if (iamges.length >= 1) { | 1203 | if (iamges.length >= 1) { |
1186 | - iamges[iamges.length - 1].onload = function () { | ||
1187 | - printWin.print(); | ||
1188 | - printWin.close(); | 1204 | + var lastImage = iamges[iamges.length - 1]; |
1205 | + if (lastImage.complete) { | ||
1206 | + windowPrint(printWin); | ||
1207 | + } else { | ||
1208 | + lastImage.onload = function () { | ||
1209 | + windowPrint(printWin); | ||
1210 | + } | ||
1189 | } | 1211 | } |
1190 | } else { | 1212 | } else { |
1191 | - printWin.print(); | ||
1192 | - printWin.close(); | ||
1193 | - } | 1213 | + windowPrint(printWin); |
1214 | + } | ||
1194 | } | 1215 | } |
1195 | 1216 | ||
1196 | export function tablePrint(options) { | 1217 | export function tablePrint(options) { |