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 276 })
277 277 .join("")
278 278 );
279   - } catch (e) { }
  279 + } catch (e) {}
280 280 return uni;
281 281 }
282 282  
... ... @@ -623,8 +623,7 @@ export function fetchHTML(url) {
623 623 } else {
624 624 return "";
625 625 }
626   - }
627   - catch (e) {
  626 + } catch (e) {
628 627 return "";
629 628 }
630 629 }
... ... @@ -907,11 +906,17 @@ export function paperPrint(paper) {
907 906 if (windowParams.navigator.userAgent.indexOf("Trident") > -1) {
908 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 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 925 windowParams.close();
921 926 }
922 927 function numberToChinese(num) {
923   - const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
  928 + const chineseDigits = [
  929 + "零",
  930 + "一",
  931 + "二",
  932 + "三",
  933 + "四",
  934 + "五",
  935 + "六",
  936 + "七",
  937 + "八",
  938 + "九",
  939 + ];
924 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 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 965 }
950 966  
951 967 // 处理 '一十' 和 '一百' 等情况
952   - if (result.startsWith('一十')) {
  968 + if (result.startsWith("一十")) {
953 969 result = result.substring(1); // 去掉 '一',例如 '一十' -> '十'
954 970 }
955 971  
956 972 return result;
957 973 }
958 974 function htmlParseDom(html, getStyleScripts) {
959   - var tempDom = document.createElement('div');
  975 + var tempDom = document.createElement("div");
960 976 tempDom.innerHTML = html;
961   - var doms = tempDom.querySelectorAll('p');
  977 + var doms = tempDom.querySelectorAll("p");
962 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 981 return {
966 982 doms: doms,
967 983 styles: styleDoms,
968   - scripts: scriptDoms
969   - }
  984 + scripts: scriptDoms,
  985 + };
970 986 }
971   - return { doms: doms }
  987 + return { doms: doms };
972 988 }
973 989 function generatePageParams() {
974 990 const totalHeightPx = Math.max(
975 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 996 printWin.document.body.appendChild(a4Box);
981 997 const a4BoxHeightPx = a4Box.offsetHeight;
982 998 if (a4BoxHeightPx > 0) {
... ... @@ -984,18 +1000,20 @@ export function paperPrint(paper) {
984 1000 var pages = Math.ceil(totalHeightPx / a4BoxHeightPx);
985 1001 if (pages > 2) pages += 1;
986 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 1009 printWin.document.body.appendChild(pageFooteDiv);
992 1010 }
993 1011 }
994 1012 }
995   - // size: A4 portrait;
  1013 + // size: A4 portrait;
996 1014 // size: A3 landscape;
997 1015  
998   - const style = printWin.document.createElement('style');
  1016 + const style = printWin.document.createElement("style");
999 1017 style.innerHTML = `
1000 1018 @media print
1001 1019 {
... ... @@ -1112,56 +1130,58 @@ export function paperPrint(paper) {
1112 1130  
1113 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 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 1142 subjectDom.innerText = subjectName;
1125   - subjectDom.classList.add('title-content');
  1143 + subjectDom.classList.add("title-content");
1126 1144 titleBoxDom.appendChild(titleDom);
1127 1145 titleBoxDom.appendChild(subjectDom);
1128 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 1156 studentInputBoxDom.appendChild(studentClassInputDom);
1139 1157 studentInputBoxDom.appendChild(studentNameInputDom);
1140 1158 studentInputBoxDom.appendChild(studentNoInputDom);
1141 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 1167 theadDom.appendChild(theadTrDom);
1150 1168 tableDom.appendChild(theadDom);
1151 1169  
1152   - const tbodyDom = printWin.document.createElement('tbody');
  1170 + const tbodyDom = printWin.document.createElement("tbody");
1153 1171  
1154 1172 for (var iof = 0; iof < paperQuestions.length; iof++) {
1155 1173 var item = paperQuestions[iof];
1156 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 1186 tbodyContentTdDom.appendChild(questionTitleDom);
1167 1187 tbodyTrDom.appendChild(tbodyLeftAltTdDom);
... ... @@ -1170,12 +1190,12 @@ export function paperPrint(paper) {
1170 1190 tbodyDom.appendChild(tbodyTrDom);
1171 1191  
1172 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 1199 var subItem = item.subQuestions[idof];
1180 1200 var screenshotHtml = fetchHTML(subItem.screenshot);
1181 1201 var getStyleScripts = iof == 0 && idof == 0;
... ... @@ -1196,16 +1216,16 @@ export function paperPrint(paper) {
1196 1216 tableDom.appendChild(tbodyDom);
1197 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 1224 tfootDom.appendChild(tfootTrDom);
1205 1225 tableDom.appendChild(tfootDom);
1206 1226 printWin.document.body.appendChild(bodyBoxDom);
1207 1227 // generatePageParams();
1208   - const lastImage = printWin.document.querySelector('img:last-child');
  1228 + const lastImage = printWin.document.querySelector("img:last-child");
1209 1229 if (lastImage) {
1210 1230 if (lastImage.complete) windowPrint(printWin);
1211 1231 lastImage.onload = () => windowPrint(printWin);
... ... @@ -1225,9 +1245,7 @@ export function tablePrint(options) {
1225 1245 var diffStNumber = options.diffStNumber ?? 0;
1226 1246 let divs = document.getElementById(id);
1227 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 1249 @media print {
1232 1250 @page {
1233 1251 size: A4 portrait;
... ... @@ -1659,8 +1677,11 @@ function getDateRange() {
1659 1677 const currentMonth = currentDate.getMonth() + 1; // getMonth() 返回的是 0-11
1660 1678  
1661 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 1685 // 在 2 月到 7 月之间
1665 1686 startDate = `${currentYear}-02-01`;
1666 1687 endDate = `${currentYear}-07-31`;
... ...