Ver Fonte

bug fix

刘洋 há 11 meses atrás
pai
commit
7e9b51ab7f
3 ficheiros alterados com 28 adições e 5 exclusões
  1. 26 4
      src/features/ImageDownload/ImageDownload.vue
  2. 1 0
      src/store.ts
  3. 1 1
      src/types/index.ts

+ 26 - 4
src/features/ImageDownload/ImageDownload.vue

@@ -24,12 +24,25 @@ import { countStudents, getPackages, getStudents } from "@/api/api";
 import { httpApp } from "@/plugins/axiosApp";
 import mustache from "mustache";
 
+function millisecondsToHMS(milliseconds: number) {
+  let seconds = Math.floor((milliseconds / 1000) % 60);
+  let ms = milliseconds - seconds * 1000;
+  let minutes = Math.floor((milliseconds / (1000 * 60)) % 60);
+  let hours = Math.floor((milliseconds / (1000 * 60 * 60)) % 24);
+  return (
+    (hours ? hours + "小时 " : "") +
+    (minutes ? minutes + "分钟 " : "") +
+    (seconds + ms / 1000).toFixed(2) +
+    "秒"
+  );
+}
 let statisticTime = 0;
 
 function openSuccessDialog() {
   const modal = Modal.success({});
   modal.update({
-    title: "图片下载完成",
+    title:
+      "图片下载完成,总耗时:" + millisecondsToHMS(Date.now() - statisticTime),
     content: "完成",
     onOk: () => router.back(),
   });
@@ -98,6 +111,9 @@ const nextColor = storePassedToNodeJs.config.watermark.nextColor || "#0000ff";
 const otherColor = "#ddd";
 
 const studentHandler = async (student: any, urls: any) => {
+  if (store.downloadFailStatus) {
+    return;
+  }
   try {
     let allTags = Object.values(student.tags || {})
       .filter((x) => !!x)
@@ -173,7 +189,7 @@ const studentHandler = async (student: any, urls: any) => {
     let resultImgList: any[] = [];
     let sheetUrlsLength = (student.sheetUrls || []).length;
     for (const sheetUrl of student.sheetUrls) {
-      if (stopSignal) return;
+      if (stopSignal || store.downloadFailStatus) return;
       try {
         const index = student.sheetUrls.indexOf(sheetUrl);
         student.index = index + 1;
@@ -231,6 +247,7 @@ const studentHandler = async (student: any, urls: any) => {
         window.electron.errorLogger(student, sheetUrl, error);
         errorCount.value += 1;
         if (config.failover) {
+          store.downloadFailStatus = true;
           throw error;
         } else {
           console.log(student, error);
@@ -276,7 +293,7 @@ const studentHandler = async (student: any, urls: any) => {
         `/pdfs/${store.env.examId}/${student.subjectCode}/${pdfName}.pdf`,
       ]);
     }
-  } catch (error) {
+  } catch (error: any) {
     const modal = Modal.error({});
     console.log(error);
     modal.update({
@@ -288,11 +305,13 @@ const studentHandler = async (student: any, urls: any) => {
 };
 
 onMounted(async () => {
+  store.downloadFailStatus = false;
   // const storePassedToNodeJs = JSON.parse(JSON.stringify(store));
   // const color = storePassedToNodeJs.config.watermark.color;
   // const nextColor = storePassedToNodeJs.config.watermark.nextColor || "#0000ff";
   // // const otherColor = storePassedToNodeJs.config.watermark.otherColor;
   // const otherColor = "#ddd";
+  statisticTime = Date.now();
   try {
     if (config.type === "1") {
       // console.log("download start ", Date.now());
@@ -307,16 +326,19 @@ onMounted(async () => {
       });
       totalCount.value = res.data;
       console.log(`一共${totalCount.value}个考生`);
+
       if (totalCount.value == 0) {
         openSuccessDialog();
       }
       // let totalImageDownloadTime = 0;
-      statisticTime = Date.now();
       for (
         let pageNumber = 0;
         pageNumber * 10 < totalCount.value;
         pageNumber++
       ) {
+        if (store.downloadFailStatus) {
+          break;
+        }
         const resStudents = await getStudents(
           store.env.examId,
           pageNumber + 1,

+ 1 - 0
src/store.ts

@@ -16,6 +16,7 @@ const _store = {
   config: JSON.parse(JSON.stringify(window.electron.config)) || {},
   pageInputs: {} as Store["pageInputs"],
   syncTime: [],
+  downloadFailStatus: false,
 } as Store;
 
 // for dev

+ 1 - 1
src/types/index.ts

@@ -1,6 +1,6 @@
 export interface Store {
   globalMask: boolean;
-
+  downloadFailStatus: boolean;
   env: {
     server: Server;
     loginName: string;