zhangjie 1 жил өмнө
parent
commit
15fa31da47

+ 33 - 26
src/components/import-dialog/index.vue

@@ -59,6 +59,12 @@
             <svg-icon name="icon-delete"></svg-icon>
           </template>
         </a-upload>
+        <p
+          v-if="result.message && !result.success"
+          class="tips-info tips-error"
+        >
+          {{ result.message }}
+        </p>
       </div>
     </div>
 
@@ -83,7 +89,7 @@
     RequestOption,
     UploadRequest,
   } from '@arco-design/web-vue';
-  import axios from 'axios';
+  import axios, { AxiosError } from 'axios';
 
   import useModal from '@/hooks/modal';
 
@@ -213,6 +219,14 @@
     return true;
   }
 
+  interface UploadResultType {
+    hasError: boolean;
+    failRecords: Array<{
+      msg: string;
+      lineNum: number;
+    }>;
+  }
+
   function customRequest(option: RequestOption): UploadRequest {
     const { onProgress, onError, onSuccess, fileItem, data } = option;
 
@@ -225,19 +239,30 @@
     emit('uploading');
     const uploadController = new AbortController();
 
-    axios
-      .post(option.action as string, formData, {
+    (
+      axios.post(option.action as string, formData, {
         headers: option.headers,
         signal: uploadController.signal,
         onUploadProgress: ({ loaded, total }) => {
           onProgress(Math.floor((100 * loaded) / total));
         },
-      })
+      }) as Promise<UploadResultType>
+    )
       .then((res) => {
+        // 所有excel导入的特殊处理
+        if (res.hasError) {
+          const failRecords = res.failRecords;
+          const message = failRecords
+            .map((item) => `第${item.lineNum}行:${item.msg}`)
+            .join('。');
+
+          onError({ data: { message } });
+          return;
+        }
         onSuccess(res);
       })
-      .catch((error: Error) => {
-        onError(error);
+      .catch((error: AxiosError) => {
+        onError(error.response);
       });
 
     return {
@@ -245,36 +270,18 @@
     };
   }
 
-  function handleError() {
+  function handleError(fileItem: FileItem) {
     canUpload.value = false;
     loading.value = false;
     result.value = {
       success: false,
-      message: '上传失败',
+      message: fileItem.response.data?.message || '上传错误',
     };
     emit('uploadError', result.value);
   }
   function handleSuccess(fileItem: FileItem) {
     canUpload.value = false;
     loading.value = false;
-
-    // 所有excel导入的特殊处理
-    if (fileItem.response.hasError) {
-      const failRecords = fileItem.response.failRecords as Array<{
-        msg: string;
-        lineNum: number;
-      }>;
-      const msg = failRecords
-        .map((item) => `第${item.lineNum}行:${item.msg}`)
-        .join('。');
-      result.value = {
-        success: false,
-        message: msg,
-      };
-      emit('uploadError', result.value);
-      return;
-    }
-
     result.value = {
       success: true,
       message: '上传成功!',