Commit 44f5886e09171a9f7a29f657cbc47f513fbc589b
1 parent
bfb748bf
wip: 代码提交
Showing
1 changed file
with
95 additions
and
74 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 | ||
@@ -623,8 +623,7 @@ export function fetchHTML(url) { | @@ -623,8 +623,7 @@ export function fetchHTML(url) { | ||
623 | } else { | 623 | } else { |
624 | return ""; | 624 | return ""; |
625 | } | 625 | } |
626 | - } | ||
627 | - catch (e) { | 626 | + } catch (e) { |
628 | return ""; | 627 | return ""; |
629 | } | 628 | } |
630 | } | 629 | } |
@@ -907,11 +906,17 @@ export function paperPrint(paper) { | @@ -907,11 +906,17 @@ export function paperPrint(paper) { | ||
907 | if (windowParams.navigator.userAgent.indexOf("Trident") > -1) { | 906 | if (windowParams.navigator.userAgent.indexOf("Trident") > -1) { |
908 | return "Trident"; // IE | 907 | return "Trident"; // IE |
909 | } | 908 | } |
910 | - if (/Chrome/.test(windowParams.navigator.userAgent) && /Google Inc/.test(windowParams.navigator.vendor)) { | ||
911 | - return 'Google Chrome'; | 909 | + if ( |
910 | + /Chrome/.test(windowParams.navigator.userAgent) && | ||
911 | + /Google Inc/.test(windowParams.navigator.vendor) | ||
912 | + ) { | ||
913 | + return "Google Chrome"; | ||
912 | } | 914 | } |
913 | - if (/360/.test(windowParams.navigator.userAgent) || /QIHU/.test(windowParams.navigator.userAgent)) { | ||
914 | - return '360 Browser'; | 915 | + if ( |
916 | + /360/.test(windowParams.navigator.userAgent) || | ||
917 | + /QIHU/.test(windowParams.navigator.userAgent) | ||
918 | + ) { | ||
919 | + return "360 Browser"; | ||
915 | } | 920 | } |
916 | return "Blink"; // Assume it's Chrome, Safari, or an alternative Blink-based browser | 921 | return "Blink"; // Assume it's Chrome, Safari, or an alternative Blink-based browser |
917 | } | 922 | } |
@@ -920,15 +925,26 @@ export function paperPrint(paper) { | @@ -920,15 +925,26 @@ export function paperPrint(paper) { | ||
920 | windowParams.close(); | 925 | windowParams.close(); |
921 | } | 926 | } |
922 | function numberToChinese(num) { | 927 | function numberToChinese(num) { |
923 | - const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; | 928 | + const chineseDigits = [ |
929 | + "零", | ||
930 | + "一", | ||
931 | + "二", | ||
932 | + "三", | ||
933 | + "四", | ||
934 | + "五", | ||
935 | + "六", | ||
936 | + "七", | ||
937 | + "八", | ||
938 | + "九", | ||
939 | + ]; | ||
924 | const chineseUnits = ["", "十", "百", "千", "万", "亿"]; | 940 | const chineseUnits = ["", "十", "百", "千", "万", "亿"]; |
925 | 941 | ||
926 | - let result = ''; | ||
927 | - let unitPos = 0; // 单位的位置 | ||
928 | - let zeroFlag = false; // 是否出现过零 | 942 | + let result = ""; |
943 | + let unitPos = 0; // 单位的位置 | ||
944 | + let zeroFlag = false; // 是否出现过零 | ||
929 | 945 | ||
930 | if (num === 0) { | 946 | if (num === 0) { |
931 | - return chineseDigits[0]; // 特殊情况,0 返回 "零" | 947 | + return chineseDigits[0]; // 特殊情况,0 返回 "零" |
932 | } | 948 | } |
933 | 949 | ||
934 | // 处理数字,每次取一位并加上单位 | 950 | // 处理数字,每次取一位并加上单位 |
@@ -949,34 +965,34 @@ export function paperPrint(paper) { | @@ -949,34 +965,34 @@ export function paperPrint(paper) { | ||
949 | } | 965 | } |
950 | 966 | ||
951 | // 处理 '一十' 和 '一百' 等情况 | 967 | // 处理 '一十' 和 '一百' 等情况 |
952 | - if (result.startsWith('一十')) { | 968 | + if (result.startsWith("一十")) { |
953 | result = result.substring(1); // 去掉 '一',例如 '一十' -> '十' | 969 | result = result.substring(1); // 去掉 '一',例如 '一十' -> '十' |
954 | } | 970 | } |
955 | 971 | ||
956 | return result; | 972 | return result; |
957 | } | 973 | } |
958 | function htmlParseDom(html, getStyleScripts) { | 974 | function htmlParseDom(html, getStyleScripts) { |
959 | - var tempDom = document.createElement('div'); | 975 | + var tempDom = document.createElement("div"); |
960 | tempDom.innerHTML = html; | 976 | tempDom.innerHTML = html; |
961 | - var doms = tempDom.querySelectorAll('p'); | 977 | + var doms = tempDom.querySelectorAll("p"); |
962 | if (getStyleScripts == true) { | 978 | if (getStyleScripts == true) { |
963 | - var styleDoms = tempDom.querySelectorAll('style'); | ||
964 | - var scriptDoms = tempDom.querySelectorAll('script'); | 979 | + var styleDoms = tempDom.querySelectorAll("style"); |
980 | + var scriptDoms = tempDom.querySelectorAll("script"); | ||
965 | return { | 981 | return { |
966 | doms: doms, | 982 | doms: doms, |
967 | styles: styleDoms, | 983 | styles: styleDoms, |
968 | - scripts: scriptDoms | ||
969 | - } | 984 | + scripts: scriptDoms, |
985 | + }; | ||
970 | } | 986 | } |
971 | - return { doms: doms } | 987 | + return { doms: doms }; |
972 | } | 988 | } |
973 | function generatePageParams() { | 989 | function generatePageParams() { |
974 | const totalHeightPx = Math.max( | 990 | const totalHeightPx = Math.max( |
975 | printWin.document.documentElement.scrollHeight, // 整个文档高度 | 991 | printWin.document.documentElement.scrollHeight, // 整个文档高度 |
976 | - printWin.document.body.scrollHeight // Body 的高度 | 992 | + printWin.document.body.scrollHeight // Body 的高度 |
977 | ); | 993 | ); |
978 | - const a4Box = printWin.document.createElement('div'); | ||
979 | - a4Box.classList.add('altA4Box'); | 994 | + const a4Box = printWin.document.createElement("div"); |
995 | + a4Box.classList.add("altA4Box"); | ||
980 | printWin.document.body.appendChild(a4Box); | 996 | printWin.document.body.appendChild(a4Box); |
981 | const a4BoxHeightPx = a4Box.offsetHeight; | 997 | const a4BoxHeightPx = a4Box.offsetHeight; |
982 | if (a4BoxHeightPx > 0) { | 998 | if (a4BoxHeightPx > 0) { |
@@ -984,18 +1000,20 @@ export function paperPrint(paper) { | @@ -984,18 +1000,20 @@ export function paperPrint(paper) { | ||
984 | var pages = Math.ceil(totalHeightPx / a4BoxHeightPx); | 1000 | var pages = Math.ceil(totalHeightPx / a4BoxHeightPx); |
985 | if (pages > 2) pages += 1; | 1001 | if (pages > 2) pages += 1; |
986 | for (var page = 0; page < pages; page++) { | 1002 | for (var page = 0; page < pages; page++) { |
987 | - var pageFooteDiv = printWin.document.createElement('div'); | ||
988 | - pageFooteDiv.classList.add('page-footer'); | ||
989 | - pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${page + 1}页(共${pages}页)`; | ||
990 | - pageFooteDiv.style.top = (page + 1) * a4BoxHeightPx + (page * 25) + 'px'; | 1003 | + var pageFooteDiv = printWin.document.createElement("div"); |
1004 | + pageFooteDiv.classList.add("page-footer"); | ||
1005 | + pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${ | ||
1006 | + page + 1 | ||
1007 | + }页(共${pages}页)`; | ||
1008 | + pageFooteDiv.style.top = (page + 1) * a4BoxHeightPx + page * 25 + "px"; | ||
991 | printWin.document.body.appendChild(pageFooteDiv); | 1009 | printWin.document.body.appendChild(pageFooteDiv); |
992 | } | 1010 | } |
993 | } | 1011 | } |
994 | } | 1012 | } |
995 | - // size: A4 portrait; | 1013 | + // size: A4 portrait; |
996 | // size: A3 landscape; | 1014 | // size: A3 landscape; |
997 | 1015 | ||
998 | - const style = printWin.document.createElement('style'); | 1016 | + const style = printWin.document.createElement("style"); |
999 | style.innerHTML = ` | 1017 | style.innerHTML = ` |
1000 | @media print | 1018 | @media print |
1001 | { | 1019 | { |
@@ -1112,56 +1130,58 @@ export function paperPrint(paper) { | @@ -1112,56 +1130,58 @@ export function paperPrint(paper) { | ||
1112 | 1130 | ||
1113 | printWin.document.head.appendChild(style); | 1131 | printWin.document.head.appendChild(style); |
1114 | 1132 | ||
1115 | - const bodyBoxDom = printWin.document.createElement('div'); | ||
1116 | - bodyBoxDom.classList.add('bodyBox'); | 1133 | + const bodyBoxDom = printWin.document.createElement("div"); |
1134 | + bodyBoxDom.classList.add("bodyBox"); | ||
1117 | 1135 | ||
1118 | - const titleBoxDom = printWin.document.createElement('div'); | ||
1119 | - titleBoxDom.classList.add('title-header'); | ||
1120 | - const titleDom = printWin.document.createElement('h3'); | 1136 | + const titleBoxDom = printWin.document.createElement("div"); |
1137 | + titleBoxDom.classList.add("title-header"); | ||
1138 | + const titleDom = printWin.document.createElement("h3"); | ||
1121 | titleDom.innerText = paperTitle; | 1139 | titleDom.innerText = paperTitle; |
1122 | - titleDom.classList.add('title-content'); | ||
1123 | - const subjectDom = printWin.document.createElement('h2'); | 1140 | + titleDom.classList.add("title-content"); |
1141 | + const subjectDom = printWin.document.createElement("h2"); | ||
1124 | subjectDom.innerText = subjectName; | 1142 | subjectDom.innerText = subjectName; |
1125 | - subjectDom.classList.add('title-content'); | 1143 | + subjectDom.classList.add("title-content"); |
1126 | titleBoxDom.appendChild(titleDom); | 1144 | titleBoxDom.appendChild(titleDom); |
1127 | titleBoxDom.appendChild(subjectDom); | 1145 | titleBoxDom.appendChild(subjectDom); |
1128 | bodyBoxDom.appendChild(titleBoxDom); | 1146 | bodyBoxDom.appendChild(titleBoxDom); |
1129 | 1147 | ||
1130 | - const studentInputBoxDom = printWin.document.createElement('div'); | ||
1131 | - studentInputBoxDom.classList.add('student-input'); | ||
1132 | - const studentClassInputDom = printWin.document.createElement('span'); | ||
1133 | - studentClassInputDom.innerHTML = '班级:________________'; | ||
1134 | - const studentNameInputDom = printWin.document.createElement('span'); | ||
1135 | - studentNameInputDom.innerHTML = '姓名:________________'; | ||
1136 | - const studentNoInputDom = printWin.document.createElement('span'); | ||
1137 | - studentNoInputDom.innerHTML = '学号:________________'; | 1148 | + const studentInputBoxDom = printWin.document.createElement("div"); |
1149 | + studentInputBoxDom.classList.add("student-input"); | ||
1150 | + const studentClassInputDom = printWin.document.createElement("span"); | ||
1151 | + studentClassInputDom.innerHTML = "班级:________________"; | ||
1152 | + const studentNameInputDom = printWin.document.createElement("span"); | ||
1153 | + studentNameInputDom.innerHTML = "姓名:________________"; | ||
1154 | + const studentNoInputDom = printWin.document.createElement("span"); | ||
1155 | + studentNoInputDom.innerHTML = "学号:________________"; | ||
1138 | studentInputBoxDom.appendChild(studentClassInputDom); | 1156 | studentInputBoxDom.appendChild(studentClassInputDom); |
1139 | studentInputBoxDom.appendChild(studentNameInputDom); | 1157 | studentInputBoxDom.appendChild(studentNameInputDom); |
1140 | studentInputBoxDom.appendChild(studentNoInputDom); | 1158 | studentInputBoxDom.appendChild(studentNoInputDom); |
1141 | bodyBoxDom.appendChild(studentInputBoxDom); | 1159 | bodyBoxDom.appendChild(studentInputBoxDom); |
1142 | 1160 | ||
1143 | - const tableDom = printWin.document.createElement('table'); | ||
1144 | - const theadDom = printWin.document.createElement('thead'); | ||
1145 | - const theadTrDom = printWin.document.createElement('tr'); | ||
1146 | - theadTrDom.appendChild(printWin.document.createElement('th')); | ||
1147 | - theadTrDom.appendChild(printWin.document.createElement('th')); | ||
1148 | - theadTrDom.appendChild(printWin.document.createElement('th')); | 1161 | + const tableDom = printWin.document.createElement("table"); |
1162 | + const theadDom = printWin.document.createElement("thead"); | ||
1163 | + const theadTrDom = printWin.document.createElement("tr"); | ||
1164 | + theadTrDom.appendChild(printWin.document.createElement("th")); | ||
1165 | + theadTrDom.appendChild(printWin.document.createElement("th")); | ||
1166 | + theadTrDom.appendChild(printWin.document.createElement("th")); | ||
1149 | theadDom.appendChild(theadTrDom); | 1167 | theadDom.appendChild(theadTrDom); |
1150 | tableDom.appendChild(theadDom); | 1168 | tableDom.appendChild(theadDom); |
1151 | 1169 | ||
1152 | - const tbodyDom = printWin.document.createElement('tbody'); | 1170 | + const tbodyDom = printWin.document.createElement("tbody"); |
1153 | 1171 | ||
1154 | for (var iof = 0; iof < paperQuestions.length; iof++) { | 1172 | for (var iof = 0; iof < paperQuestions.length; iof++) { |
1155 | var item = paperQuestions[iof]; | 1173 | var item = paperQuestions[iof]; |
1156 | if (!item || !item.subQuestions) continue; | 1174 | if (!item || !item.subQuestions) continue; |
1157 | 1175 | ||
1158 | - const tbodyTrDom = printWin.document.createElement('tr'); | ||
1159 | - const tbodyLeftAltTdDom = printWin.document.createElement('td'); | ||
1160 | - const tbodyContentTdDom = printWin.document.createElement('td'); | ||
1161 | - const tbodyRightAltTdDom = printWin.document.createElement('td'); | 1176 | + const tbodyTrDom = printWin.document.createElement("tr"); |
1177 | + const tbodyLeftAltTdDom = printWin.document.createElement("td"); | ||
1178 | + const tbodyContentTdDom = printWin.document.createElement("td"); | ||
1179 | + const tbodyRightAltTdDom = printWin.document.createElement("td"); | ||
1162 | 1180 | ||
1163 | - const questionTitleDom = printWin.document.createElement('div'); | ||
1164 | - questionTitleDom.innerText = `${numberToChinese(iof + 1)}、${item.questionTitle}(本节共${item.subQuestions.length}小题,共${item.score}分)`; | 1181 | + const questionTitleDom = printWin.document.createElement("div"); |
1182 | + questionTitleDom.innerText = `${numberToChinese(iof + 1)}、${ | ||
1183 | + item.questionTitle | ||
1184 | + }(本节共${item.subQuestions.length}小题,共${item.score}分)`; | ||
1165 | 1185 | ||
1166 | tbodyContentTdDom.appendChild(questionTitleDom); | 1186 | tbodyContentTdDom.appendChild(questionTitleDom); |
1167 | tbodyTrDom.appendChild(tbodyLeftAltTdDom); | 1187 | tbodyTrDom.appendChild(tbodyLeftAltTdDom); |
@@ -1170,12 +1190,12 @@ export function paperPrint(paper) { | @@ -1170,12 +1190,12 @@ export function paperPrint(paper) { | ||
1170 | tbodyDom.appendChild(tbodyTrDom); | 1190 | tbodyDom.appendChild(tbodyTrDom); |
1171 | 1191 | ||
1172 | for (var idof = 0; idof < item.subQuestions.length; idof++) { | 1192 | for (var idof = 0; idof < item.subQuestions.length; idof++) { |
1173 | - const qTbodyTrDom = printWin.document.createElement('tr'); | ||
1174 | - const qTbodyLeftAltTdDom = printWin.document.createElement('td'); | ||
1175 | - const qTbodyContentTdDom = printWin.document.createElement('td'); | ||
1176 | - const qTbodyRightAltTdDom = printWin.document.createElement('td'); | 1193 | + const qTbodyTrDom = printWin.document.createElement("tr"); |
1194 | + const qTbodyLeftAltTdDom = printWin.document.createElement("td"); | ||
1195 | + const qTbodyContentTdDom = printWin.document.createElement("td"); | ||
1196 | + const qTbodyRightAltTdDom = printWin.document.createElement("td"); | ||
1177 | 1197 | ||
1178 | - const questionDom = printWin.document.createElement('div'); | 1198 | + const questionDom = printWin.document.createElement("div"); |
1179 | var subItem = item.subQuestions[idof]; | 1199 | var subItem = item.subQuestions[idof]; |
1180 | var screenshotHtml = fetchHTML(subItem.screenshot); | 1200 | var screenshotHtml = fetchHTML(subItem.screenshot); |
1181 | var getStyleScripts = iof == 0 && idof == 0; | 1201 | var getStyleScripts = iof == 0 && idof == 0; |
@@ -1196,16 +1216,16 @@ export function paperPrint(paper) { | @@ -1196,16 +1216,16 @@ export function paperPrint(paper) { | ||
1196 | tableDom.appendChild(tbodyDom); | 1216 | tableDom.appendChild(tbodyDom); |
1197 | bodyBoxDom.appendChild(tableDom); | 1217 | bodyBoxDom.appendChild(tableDom); |
1198 | 1218 | ||
1199 | - const tfootDom = printWin.document.createElement('tfoot'); | ||
1200 | - const tfootTrDom = printWin.document.createElement('tr'); | ||
1201 | - tfootTrDom.appendChild(printWin.document.createElement('td')); | ||
1202 | - tfootTrDom.appendChild(printWin.document.createElement('td')); | ||
1203 | - tfootTrDom.appendChild(printWin.document.createElement('td')); | 1219 | + const tfootDom = printWin.document.createElement("tfoot"); |
1220 | + const tfootTrDom = printWin.document.createElement("tr"); | ||
1221 | + tfootTrDom.appendChild(printWin.document.createElement("td")); | ||
1222 | + tfootTrDom.appendChild(printWin.document.createElement("td")); | ||
1223 | + tfootTrDom.appendChild(printWin.document.createElement("td")); | ||
1204 | tfootDom.appendChild(tfootTrDom); | 1224 | tfootDom.appendChild(tfootTrDom); |
1205 | tableDom.appendChild(tfootDom); | 1225 | tableDom.appendChild(tfootDom); |
1206 | printWin.document.body.appendChild(bodyBoxDom); | 1226 | printWin.document.body.appendChild(bodyBoxDom); |
1207 | // generatePageParams(); | 1227 | // generatePageParams(); |
1208 | - const lastImage = printWin.document.querySelector('img:last-child'); | 1228 | + const lastImage = printWin.document.querySelector("img:last-child"); |
1209 | if (lastImage) { | 1229 | if (lastImage) { |
1210 | if (lastImage.complete) windowPrint(printWin); | 1230 | if (lastImage.complete) windowPrint(printWin); |
1211 | lastImage.onload = () => windowPrint(printWin); | 1231 | lastImage.onload = () => windowPrint(printWin); |
@@ -1225,9 +1245,7 @@ export function tablePrint(options) { | @@ -1225,9 +1245,7 @@ export function tablePrint(options) { | ||
1225 | var diffStNumber = options.diffStNumber ?? 0; | 1245 | var diffStNumber = options.diffStNumber ?? 0; |
1226 | let divs = document.getElementById(id); | 1246 | let divs = document.getElementById(id); |
1227 | let awin = window.open("中天易教", "_blank", ""); | 1247 | let awin = window.open("中天易教", "_blank", ""); |
1228 | - awin.document.getElementsByTagName( | ||
1229 | - "head" | ||
1230 | - )[0].innerHTML = `<style> | 1248 | + awin.document.getElementsByTagName("head")[0].innerHTML = `<style> |
1231 | @media print { | 1249 | @media print { |
1232 | @page { | 1250 | @page { |
1233 | size: A4 portrait; | 1251 | size: A4 portrait; |
@@ -1659,8 +1677,11 @@ function getDateRange() { | @@ -1659,8 +1677,11 @@ function getDateRange() { | ||
1659 | const currentMonth = currentDate.getMonth() + 1; // getMonth() 返回的是 0-11 | 1677 | const currentMonth = currentDate.getMonth() + 1; // getMonth() 返回的是 0-11 |
1660 | 1678 | ||
1661 | let startDate, endDate; | 1679 | let startDate, endDate; |
1662 | - | ||
1663 | - if (currentMonth >= 2 && currentMonth <= 7) { | 1680 | + if (currentMonth == 1) { |
1681 | + // 如果是1月直接重新返回 | ||
1682 | + startDate = `${currentYear - 1}-08-01`; | ||
1683 | + endDate = `${currentYear}-01-31`; // 下一年的 1 月 31 日 | ||
1684 | + } else if (currentMonth >= 2 && currentMonth <= 7) { | ||
1664 | // 在 2 月到 7 月之间 | 1685 | // 在 2 月到 7 月之间 |
1665 | startDate = `${currentYear}-02-01`; | 1686 | startDate = `${currentYear}-02-01`; |
1666 | endDate = `${currentYear}-07-31`; | 1687 | endDate = `${currentYear}-07-31`; |