Commit 44f5886e09171a9f7a29f657cbc47f513fbc589b

Authored by 刘有才luck
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`;