diff --git a/src/utils/uploadFiles.js b/src/utils/uploadFiles.js index 9da62bf..b1a9e3e 100644 --- a/src/utils/uploadFiles.js +++ b/src/utils/uploadFiles.js @@ -9,8 +9,9 @@ export function android() { /** * 上传图片 * @param {Function} renderFun 回调函数,接收APP传递的access参数 + * @param {Function} filterFun 可选的过滤函数,用于判断是否接受该数据 */ -export function uploadImgFile(renderFun) { +export function uploadImgFile(renderFun, filterFun) { // 设置全局回调函数,供原生App调用 window.renderData = renderFun // iOS平台兼容 @@ -58,14 +59,33 @@ export function uploadImgFile(renderFun) { typeof window.app.getImagePath === 'function' ) { console.debug('Flutter接口检测成功,调用 getImagePath') - // 清除定时器 - if (window._flutterCheckTimeout) { - clearTimeout(window._flutterCheckTimeout) - window._flutterCheckTimeout = null - } try { const result = window.app.getImagePath() console.debug('getImagePath 返回结果:', result) + + // 如果提供了过滤函数,则使用它来判断是否接受该数据 + if (filterFun && typeof filterFun === 'function') { + // 如果过滤函数返回false,则继续检查 + if (!filterFun(result)) { + console.debug('数据被过滤函数拒绝,继续检查...') + if (attempts < maxAttempts) { + // 保存timeout ID以便下次调用时清除 + window._flutterCheckTimeout = setTimeout(checkInterface, 100) + return + } else { + console.error('Flutter接口注入超时,使用默认数据') + const mockAccess = JSON.stringify({}) + renderFun(mockAccess) + return + } + } + } + + // 清除定时器 + if (window._flutterCheckTimeout) { + clearTimeout(window._flutterCheckTimeout) + window._flutterCheckTimeout = null + } renderFun(result) } catch (error) { console.error('调用 getImagePath 出错:', error) diff --git a/src/views/Wallet/CashOut/KYC.vue b/src/views/Wallet/CashOut/KYC.vue index 7f4235d..bd15a08 100644 --- a/src/views/Wallet/CashOut/KYC.vue +++ b/src/views/Wallet/CashOut/KYC.vue @@ -251,43 +251,78 @@ const callNativeImagePicker = async () => { // 记录当前所有已选图片路径,用于去重判断 const existingImagePaths = new Set(resImgUrls.value) + // 定义过滤函数 + const filterDuplicateImages = (access) => { + try { + // 处理空数据情况 + if (!access || access === '""' || access === '') { + return true // 空数据不过滤,让上层处理 + } + + const result = parseAccessOrigin(access) + + if (result.success && result.data) { + const file = result.data + console.log('检查图片数据:', file.path) + + // 如果是已存在的图片,返回false表示需要继续检查 + if (existingImagePaths.has(file.path)) { + console.log('检测到重复图片,继续等待新图片...') + return false + } + + // 新图片,可以接受 + return true + } + + // 其他情况接受数据 + return true + } catch (error) { + console.error('过滤图片数据时出错:', error) + return true // 出错时不过滤,让上层处理 + } + } + return new Promise((resolve, reject) => { try { - uploadImgFile(async (access) => { - try { - // 处理空数据情况 - if (!access || access === '""' || access === '') { - console.warn('接收到空的图片数据') - reject(new Error('No image selected')) - return - } - - const result = parseAccessOrigin(access) - - if (result.success && result.data) { - const file = result.data - console.log('接收到原生图片数据:', file.path) - - if (existingImagePaths.has(file.path)) { - console.log('检测到重复图片,继续等待新图片...') - // 不处理重复图片,继续等待新的图片数据 - // 这里不调用 resolve 或 reject,让 uploadImgFile 继续检查 + uploadImgFile( + async (access) => { + try { + // 处理空数据情况 + if (!access || access === '""' || access === '') { + console.warn('接收到空的图片数据') + reject(new Error('No image selected')) return } - // 生成预览图 - resImgUrls.value.push(file.path) - resolve() - } else { - const errorMsg = result.error - console.error('图片选择失败:', errorMsg) - reject(new Error(errorMsg)) + const result = parseAccessOrigin(access) + + if (result.success && result.data) { + const file = result.data + console.log('接收到原生图片数据:', file.path) + + if (existingImagePaths.has(file.path)) { + console.log('检测到重复图片,继续等待新图片...') + // 不处理重复图片,继续等待新的图片数据 + // 这里不调用 resolve 或 reject,让 uploadImgFile 继续检查 + return + } + + // 生成预览图 + resImgUrls.value.push(file.path) + resolve() + } else { + const errorMsg = result.error + console.error('图片选择失败:', errorMsg) + reject(new Error(errorMsg)) + } + } catch (error) { + console.error('处理原生图片选择结果失败:', error) + reject(error) } - } catch (error) { - console.error('处理原生图片选择结果失败:', error) - reject(error) - } - }) + }, + filterDuplicateImages // 传递过滤函数 + ) } catch (error) { console.error('调用原生图片选择器失败:', error) reject(error)