diff --git a/pages/upload/upload.vue b/pages/upload/upload.vue index 3abcfae..440a846 100644 --- a/pages/upload/upload.vue +++ b/pages/upload/upload.vue @@ -1142,21 +1142,44 @@ export default { // ISBN扫码 scanISBN() { - // 必须已登录孔网,否则直接弹窗不打开摄像头 + // 必须已登录孔网 if (!this.isLoggedIn) { uni.showToast({ title: '请先登录孔网账号', icon: 'none' }) return } - uni.scanCode({ - onlyFromCamera: true, - scanType: ['barcode'], + // 打开普通拍照摄像头(不带扫码框),拍照后OCR识别ISBN + uni.chooseImage({ + sourceType: ['camera'], + count: 1, success: (res) => { - this.isbn = (res.result || '').trim() - this.searchISBN() + uni.showLoading({ title: '识别中...' }) + const filePath = res.tempFilePaths[0] + uni.uploadFile({ + url: 'https://book.xcx.ocr.buzhiyushu.cn/ocr', + filePath: filePath, + name: 'file', + success: (ocrRes) => { + uni.hideLoading() + try { + const ocrData = JSON.parse(ocrRes.data) + if (ocrData && ocrData.texts && ocrData.texts.ISBN) { + this.isbn = ocrData.texts.ISBN.replace(/\D/g, '') + this.searchISBN() + } else { + uni.showToast({ title: '未识别到ISBN,请重试或手动输入', icon: 'none' }) + } + } catch (e) { + console.error('OCR解析失败:', e) + uni.showToast({ title: '识别失败', icon: 'none' }) + } + }, + fail: () => { + uni.hideLoading() + uni.showToast({ title: '识别失败', icon: 'none' }) + } + }) }, - fail: () => { - uni.showToast({ title: '扫码取消或失败', icon: 'none' }) - } + fail: () => {} }) },