From 4cb3300cf5a4effbda2ee050b117ba7679fbbd5a Mon Sep 17 00:00:00 2001 From: yy2205 <2238220225@qq.com> Date: Wed, 18 Jun 2025 09:58:42 +0800 Subject: [PATCH] =?UTF-8?q?222=E7=89=88,=E9=80=82=E5=BA=94=E7=AD=BE?= =?UTF-8?q?=E5=90=8Dsdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/ukey.ts | 66 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/src/utils/ukey.ts b/src/utils/ukey.ts index 67807cca..a60d074f 100644 --- a/src/utils/ukey.ts +++ b/src/utils/ukey.ts @@ -1,21 +1,51 @@ import axios from 'axios' + +// 类型声明 +declare global { + interface Window { + QysUKeySdk: any + } +} + // 动态加载 SDK export const loadUKeySdk = () => { return new Promise((resolve, reject) => { + // 如果已经加载过,直接返回 + if (window.QysUKeySdk) { + resolve() + return + } + const script = document.createElement('script') script.src = '/sdk.min.v1.0.0.js' script.type = 'text/javascript' - // 确保 window 对象已准备好 - script.onload = () => { + let retryCount = 0 + const maxRetries = 10 + const checkInterval = 100 // 100ms 检查一次 + + const checkSDK = () => { if (window.QysUKeySdk) { + console.log('SDK 加载成功') resolve() + } else if (retryCount < maxRetries) { + retryCount++ + console.log(`等待 SDK 初始化... (${retryCount}/${maxRetries})`) + setTimeout(checkSDK, checkInterval) } else { - reject(new Error('SDK 加载失败:QysUKeySdk 未定义')) + reject(new Error('SDK 加载失败:QysUKeySdk 未定义,请检查 SDK 文件是否正确')) } } + + script.onload = () => { + console.log('SDK 脚本加载完成,开始检查初始化状态') + // 脚本加载完成后,给一点时间让 SDK 初始化 + setTimeout(checkSDK, 50) + } + script.onerror = (error) => { - reject(new Error('SDK 加载失败:' + error)) + console.error('SDK 脚本加载失败:', error) + reject(new Error('SDK 脚本加载失败:' + error)) } document.head.appendChild(script) @@ -45,7 +75,7 @@ const uploadPdf = async (byteArray: number[], filename: string = 'signed.pdf') = formData.append('fileStream', fileStream); formData.append('filename', filename); formData.append('fileType', 'pdf'); - formData.append('savePath', 'D:/陕西省咸阳市礼泉县心电图FTP/ecgimage/imgOcrAndProcess/'); + formData.append('savePath', 'F:/陕西省咸阳市礼泉县心电图FTP/ecgimage/imgOcrAndProcess/'); const response = await fetch('https://zzxmc.gw12320.com/uploadFile', { method: 'POST', @@ -63,17 +93,23 @@ const uploadPdf = async (byteArray: number[], filename: string = 'signed.pdf') = // 获取 SDK 实例 export const getUKeySdk = () => { if (window.QysUKeySdk) { - const sdk = new window.QysUKeySdk({ - signCb: async function(file) { - try { - uploadPdf(file[0].rawFileData) - console.log('签署完成,文件已上传到服务器',file); - } catch (error) { - console.error('文件处理失败:', error) + try { + const sdk = new window.QysUKeySdk({ + signCb: async function(file) { + try { + await uploadPdf(file[0].rawFileData) + console.log('签署完成,文件已上传到服务器', file); + } catch (error) { + console.error('文件处理失败:', error) + } } - } - }) - return sdk + }) + return sdk + } catch (error) { + console.error('创建 SDK 实例失败:', error) + return null + } } return null } +