Ver código fonte

下载文件提示详细错误信息

zhangjie 3 anos atrás
pai
commit
f4ae1180f3

+ 6 - 8
src/modules/customer/views/CustomerCard.vue

@@ -289,15 +289,13 @@ export default {
       this.loading = true;
       const res = await downloadByApi(() => {
         return customerPaperExport({ ids: this.multipleSelection });
-      }, `${randomCode()}.zip`).catch(() => {});
-
-      this.loading = false;
+      }, `${randomCode()}.zip`).catch(e => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
 
-      if (res) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      if (!res) return;
+      this.$message.success("下载成功!");
     },
     toEdit(row) {
       this.$ls.set("prepareTcPCard", {

+ 6 - 8
src/modules/exam/components/PaperApproveTable.vue

@@ -325,15 +325,13 @@ export default {
       };
       const res = await downloadByApi(() => {
         return downloadExamTaskApproveForm(datas);
-      }, `${this.instance.courseName}-试卷审批表.pdf`).catch(() => {});
-
-      this.loading = false;
+      }, `${this.instance.courseName}-试卷审批表.pdf`).catch(e => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
 
-      if (res) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      if (!res) return;
+      this.$message.success("下载成功!");
     }
   }
 };

+ 2 - 6
src/modules/exam/views/DownloadManage.vue

@@ -197,15 +197,11 @@ export default {
       const res = await downloadByApi(() => {
         return dataDownloadDetail(row.id);
       }).catch(e => {
-        console.log(e);
+        this.$message.error(e || "下载失败,请重新尝试!");
       });
       this.downloading = false;
 
-      if (!res) {
-        this.$message.error("下载失败,请重新尝试!");
-        return;
-      }
-
+      if (!res) return;
       this.$message.success("下载成功!");
     }
   }

+ 6 - 8
src/modules/exam/views/TaskPaperManage.vue

@@ -347,15 +347,13 @@ export default {
       this.loading = true;
       const res = await downloadByApi(() => {
         return downloadPaper(row.id);
-      }, `${row.paperNumber}-${Date.now()}.zip`).catch(() => {});
-
-      this.loading = false;
+      }, `${row.paperNumber}-${Date.now()}.zip`).catch(e => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
 
-      if (res) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      if (!res) return;
+      this.$message.success("下载成功!");
     },
     async toBatchExport() {
       // 异步导出

+ 6 - 8
src/modules/print/views/BusinessDataExport.vue

@@ -319,15 +319,13 @@ export default {
       this.loading = true;
       const res = await downloadByApi(() => {
         return businessTemplateDownload();
-      }, `考务数据模板.xlsx`).catch(() => {});
-
-      this.loading = false;
+      }, `考务数据模板.xlsx`).catch(e => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
 
-      if (res) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      if (!res) return;
+      this.$message.success("下载成功!");
     },
     toPreview(row) {
       this.curRow = { ...row };

+ 2 - 6
src/modules/stmms/views/ScoreArchive.vue

@@ -225,15 +225,11 @@ export default {
       const res = await downloadByApi(() => {
         return scoreDownload(row.id);
       }).catch(e => {
-        console.log(e);
+        this.$message.error(e || "下载失败,请重新尝试!");
       });
       this.downloading = false;
 
-      if (!res) {
-        this.$message.error("下载失败,请重新尝试!");
-        return;
-      }
-
+      if (!res) return;
       this.$message.success("下载成功!");
     },
     // img view

+ 2 - 0
src/plugins/axios.js

@@ -142,6 +142,8 @@ const errorCallback = error => {
  * @param {Object} response Response信息
  */
 const errorDataCallback = response => {
+  if (objTypeOf(response.data) === "blob") return response.data;
+
   const error = response.data;
   let message = error.message || error.error || "请求错误";
   const unauthCodes = [401, 403];

+ 20 - 12
src/plugins/download.js

@@ -1,3 +1,5 @@
+import { objTypeOf, blobToText } from "./utils";
+
 function parseDownloadFilename(dispositionInfo) {
   const strs = dispositionInfo.split(";");
   let filename = "";
@@ -17,18 +19,24 @@ function parseDownloadFilename(dispositionInfo) {
  * @param {String}} fileName 文件名
  * @returns Promise<Boolean>
  */
-export function downloadByApi(fetchFunc, fileName) {
-  return fetchFunc()
-    .then(res => {
-      const filename =
-        fileName || parseDownloadFilename(res.headers["content-disposition"]);
-      console.log(filename);
-      downloadByBlob(new Blob([res.data]), filename);
-      return true;
-    })
-    .catch(e => {
-      return Promise.reject(e);
-    });
+export async function downloadByApi(fetchFunc, fileName) {
+  let errorInfo = null;
+  const res = await fetchFunc().catch(e => {
+    errorInfo = e;
+  });
+
+  // 展示后台错误信息
+  if (errorInfo && objTypeOf(errorInfo) === "blob") {
+    const res = await blobToText(errorInfo).catch(() => {});
+    if (!res) return Promise.reject("下载失败!");
+    const resJson = JSON.parse(res);
+    return Promise.reject(resJson.message);
+  }
+
+  const filename =
+    fileName || parseDownloadFilename(res.headers["content-disposition"]);
+  downloadByBlob(new Blob([res.data]), filename);
+  return true;
 }
 
 /**

+ 15 - 1
src/plugins/utils.js

@@ -16,7 +16,8 @@ export function objTypeOf(obj) {
     "[object RegExp]": "regExp",
     "[object Undefined]": "undefined",
     "[object Null]": "null",
-    "[object Object]": "object"
+    "[object Object]": "object",
+    "[object Blob]": "blob"
   };
   return map[toString.call(obj)];
 }
@@ -383,3 +384,16 @@ export function autoSubmitForm(url, params) {
   document.body.appendChild(form);
   form.submit();
 }
+
+export function blobToText(blob) {
+  return new Promise((resolve, reject) => {
+    const reader = new FileReader();
+    reader.readAsText(blob, "utf-8");
+    reader.onload = function() {
+      resolve(reader.result);
+    };
+    reader.onerror = function() {
+      reject();
+    };
+  });
+}