|
|
@@ -92,6 +92,8 @@
|
|
|
:file-type="['image/jpeg', 'image/png', 'image/gif', 'image/webp']"
|
|
|
:border-radius="'8px'"
|
|
|
:api="singleImageUploadApi"
|
|
|
+ :on-success="handleStoreOcrAfterUpload"
|
|
|
+ :show-success-notification="false"
|
|
|
>
|
|
|
<template #tip>
|
|
|
<div class="upload-tip">上传图片 ({{ formData.singleImage ? "1" : "0" }}/1)</div>
|
|
|
@@ -113,6 +115,8 @@
|
|
|
:height="'112px'"
|
|
|
:border-radius="'8px'"
|
|
|
:api="multipleImageUploadApi"
|
|
|
+ :on-success="handleStoreOcrAfterUploadMore"
|
|
|
+ :show-success-notification="false"
|
|
|
>
|
|
|
<template #tip>
|
|
|
<div class="upload-tip">上传图片 ({{ formData.multipleImages.length }}/6)</div>
|
|
|
@@ -140,7 +144,7 @@ import { ArrowRight } from "@element-plus/icons-vue";
|
|
|
import Sortable from "sortablejs";
|
|
|
import UploadImg from "@/components/Upload/Img.vue";
|
|
|
import UploadImgs from "@/components/Upload/Imgs.vue";
|
|
|
-import { uploadImg } from "@/api/modules/newLoginApi";
|
|
|
+import { uploadImg, getStoreOcrData } from "@/api/modules/newLoginApi";
|
|
|
import { getStoreHeadImg, saveStoreHeadImg } from "@/api/modules/storeDecoration";
|
|
|
import { localGet } from "@/utils";
|
|
|
|
|
|
@@ -148,6 +152,50 @@ const loading = ref(false);
|
|
|
const singleFormRef = ref<FormInstance>();
|
|
|
const multipleFormRef = ref<FormInstance>();
|
|
|
const sortableInstance = ref<Sortable | null>(null);
|
|
|
+const handleStoreOcrAfterUploadMore = async (imageUrl: string) => {
|
|
|
+ try {
|
|
|
+ await handleStoreOcr({ imageUrl });
|
|
|
+ } catch (error) {
|
|
|
+ // OCR识别失败,移除已上传的图片
|
|
|
+ formData.multipleImages = formData.multipleImages.filter(item => item.url !== imageUrl);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+};
|
|
|
+const handleStoreOcrAfterUpload = async (imageUrl: string) => {
|
|
|
+ try {
|
|
|
+ await handleStoreOcr({ imageUrl });
|
|
|
+ } catch (error) {
|
|
|
+ // OCR识别失败,清除已上传的图片
|
|
|
+ formData.singleImage = "";
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const handleStoreOcr = async (params: { imageUrl: string }) => {
|
|
|
+ try {
|
|
|
+ const res: any = await getStoreOcrData({ imageUrl: params.imageUrl, storeUserId: localGet("geeker-user")?.userInfo.storeId });
|
|
|
+ if (res && (res.code === 200 || res.code === "200") && res.data) {
|
|
|
+ ElNotification({
|
|
|
+ title: "OCR识别成功",
|
|
|
+ message: `识别结果: ${res.data.recognizedText || "无"}`,
|
|
|
+ type: "success",
|
|
|
+ duration: 5000
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 业务逻辑错误,只在这里显示错误消息
|
|
|
+ const errorMsg = res?.msg || "未查询到OCR识别数据";
|
|
|
+ ElMessage.error(errorMsg);
|
|
|
+ const error = new Error(errorMsg);
|
|
|
+ (error as any).handled = true; // 标记错误已被处理
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ } catch (error: any) {
|
|
|
+ // 网络错误或其他异常,只在这里显示错误消息
|
|
|
+ if (!error.handled) {
|
|
|
+ }
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+};
|
|
|
|
|
|
// 模式:single 单图模式,multiple 多图模式
|
|
|
const mode = ref<"single" | "multiple">("single");
|