Răsfoiți Sursa

上传失败处理

liqiuying 2 luni în urmă
părinte
comite
e89998032d
2 a modificat fișierele cu 40 adăugiri și 15 ștergeri
  1. 38 13
      entrypoints/popup/pages/DesignPic.tsx
  2. 2 2
      entrypoints/popup/pages/utils.ts

+ 38 - 13
entrypoints/popup/pages/DesignPic.tsx

@@ -12,6 +12,7 @@ export default function DesignPic() {
   const [isPage, setIsPage] = useState(true);
   const [btnLoading, setBtnLoading] = useState(false);
   const [isPreImg, setIsPreImg] = useState(-1)
+  const [errImgDatas, setErrImgDatas] = useState<any[]>([])
 
 
   useEffect(() => {
@@ -108,13 +109,15 @@ export default function DesignPic() {
   // 删除操作渲染函数
   const option_render = (value: any, index: number, record: any) => {
     return (
-      record.is_upload ? <p className='text-green-600'>上传成功</p> :
+      record.is_upload ? <p className='text-green-600'>上传成功</p> : <div className='flex justify-between' style={{ alignItems: 'center' }}>
         <a
           className='text-red-600 cursor-pointer'
           onClick={() => handleDelete(index, record)}
         >
           删除
         </a>
+        {record.is_error && <p className='text-gray-600' style={{ marginBottom: 0 }}>上传失败</p>}
+      </div>
     );
   };
 
@@ -400,6 +403,7 @@ export default function DesignPic() {
               }
             })
             console.log(pic_text_arr1, "pic_text_arr1aaa", img_values1)
+            // console.log(table_data, "table_data")
             setTableData(table_data)
           }
 
@@ -528,6 +532,9 @@ export default function DesignPic() {
             setLoading(true)
             urlToFile(queImgs[queImgsCindex]?.design_pic, `${new Date().getTime()}.png`).then(file => {
               if (!file) {
+                // 图片转化二进制失败
+                errImgDatas.push(queImgs[queImgsCindex])
+                setErrImgDatas(errImgDatas);
                 queImgsCindex++
                 imgUpdate()
                 return
@@ -636,32 +643,50 @@ export default function DesignPic() {
                 CustomMessage.error(item.design_pic)
               })
             }
-            arr_index++
-            if (arr_index < table_params.length) {
-              // tableData循环出备货单相同的数据,修改表格操作数据 is_upload
-              let tableData1 = tableData.map(item => {
-                if (item.order_no == params.order_no) {
-                  // console.log(item.order_no, "item.order_no", params)
-                  item.is_upload = true
+            // tableData循环出备货单相同的数据,修改表格操作数据 is_upload
+            let tableData1 = tableData.map(item => {
+              if (item.order_no == params.order_no) {
+                // console.log(item.order_no, "item.order_no", params)
+                item.is_upload = true
+              }
+              // console.log(errImgDatas, "errImgDatas")
+              errImgDatas.forEach((items) => {
+                // 定制图上传失败
+                if (items.design_pic == item.design_pic) {
+                  // 429错误
+                  item.is_upload = false
+                  item.is_error = true
                 }
-                return item
+                // 预览图上传失败 概率小速度慢暂时不做处理
+                // if (isPreImg == 1) {
+                //   if (items.design_pic == item.pre_info.pre_pic) {
+                //     item.is_upload = false
+                //     item.is_error = true
+                //   }
+                // }
               })
+              return item
+            })
+            setTableData(tableData1)
+            arr_index++
+            if (arr_index < table_params.length) {
               // console.log(tableData1,"tableData111")
-              setTableData(tableData1)
               FetchFun(table_params[arr_index])
             } else {
               setLoading(false)
-              setTableData([])
+              setTableData(tableData.filter(item => !item.is_upload))
+              setErrImgDatas([])
               CustomMessage.success("图片上传结束")
             }
           }).catch(err => {
-            console.log(err, "err")
+            // console.log(err, "err")
             arr_index++
             if (arr_index < table_params.length) {
               FetchFun(table_params[arr_index])
             } else {
               setLoading(false)
-              setTableData([])
+              setTableData(tableData.filter(item => !item.is_upload))
+              setErrImgDatas([])
               CustomMessage.success("图片上传结束")
             }
           })

+ 2 - 2
entrypoints/popup/pages/utils.ts

@@ -1,7 +1,7 @@
 // utils.ts
 
 // 带重试机制的 fetch 封装
-const fetchWithRetry = async (url: string, options: RequestInit, maxRetries = 3, delay = 1000): Promise<Response> => {
+const fetchWithRetry = async (url: string, options: RequestInit, maxRetries = 4, delay = 1000): Promise<Response> => {
     let lastError: Error;
 
     for (let i = 0; i <= maxRetries; i++) {
@@ -37,7 +37,7 @@ export const urlToBlob = async (url: string): Promise<Blob> => {
             headers: {
                 "accept": 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'
             }
-        }, 3, 2000); // 最多重试3次,基础延迟2秒
+        }, 4, 2000); // 最多重试4次,基础延迟2秒
 
         return await response.blob();
     } catch (error) {