fix(KYC页面): 新增检测功能,修复获取重复图片的问题
This commit is contained in:
parent
626a63f311
commit
f7b4cfe1c3
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user