From 5397d128be4fb11353069eb4ea63a47e82ab43f6 Mon Sep 17 00:00:00 2001 From: kx_guo Date: Mon, 7 Sep 2026 17:49:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5OCR=E5=BD=95=E5=85=A5?= =?UTF-8?q?=E5=B9=B6=E5=AE=8C=E5=96=84=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modelConfig.ts | 17 + src/api/ocr.ts | 31 + .../assistant/AssistantComposer.vue | 6 +- src/components/assistant/AssistantWelcome.vue | 33 +- src/components/layout/AppSidebar.vue | 3 +- src/components/ocr/OcrRecognitionDialog.vue | 989 ++++++++++++++++++ src/config/features.ts | 4 + src/pages/ReviewPage.vue | 544 +++++++++- src/pages/RiskAssistantPage.vue | 9 + src/pages/RiskItemEntryPage.vue | 6 + src/stores/review.store.ts | 19 +- src/types/modelConfig.ts | 22 + src/types/ocr.ts | 61 ++ src/types/riskItem.ts | 21 +- src/utils/roles.ts | 10 + 15 files changed, 1745 insertions(+), 30 deletions(-) create mode 100644 src/api/modelConfig.ts create mode 100644 src/api/ocr.ts create mode 100644 src/components/ocr/OcrRecognitionDialog.vue create mode 100644 src/config/features.ts create mode 100644 src/types/modelConfig.ts create mode 100644 src/types/ocr.ts create mode 100644 src/utils/roles.ts diff --git a/src/api/modelConfig.ts b/src/api/modelConfig.ts new file mode 100644 index 0000000..39e955e --- /dev/null +++ b/src/api/modelConfig.ts @@ -0,0 +1,17 @@ +import { http } from "@/api/http"; +import type { ApiResponse } from "@/types/api"; +import type { + ModelWeightConfig, + ModelWeightConfigUpdate, +} from "@/types/modelConfig"; + +export function fetchModelConfig() { + return http.get>("/v1/model-config"); +} + +export function updateModelConfig(payload: ModelWeightConfigUpdate) { + return http.patch>( + "/v1/model-config", + payload, + ); +} diff --git a/src/api/ocr.ts b/src/api/ocr.ts new file mode 100644 index 0000000..24f0866 --- /dev/null +++ b/src/api/ocr.ts @@ -0,0 +1,31 @@ +import { http } from "@/api/http"; +import type { ApiResponse } from "@/types/api"; +import type { + OcrBatchResult, + OcrMeasurement, + OcrStandardJudgment, +} from "@/types/ocr"; + +export function recognizeOcrFiles(files: File[]) { + const body = new FormData(); + files.forEach((file) => body.append("files", file)); + return http.post>("/v1/ocr/recognize", body, { + timeout: 180_000, + }); +} + +export function judgeOcrMeasurements(measurements: OcrMeasurement[]) { + return http.post>("/v1/ocr/judge", { + measurements, + }); +} + +export function ocrFileUrl(fileId: string) { + return `${import.meta.env.VITE_API_BASE_URL || "/api"}/v1/ocr/files/${encodeURIComponent(fileId)}`; +} + +export function downloadOcrFile(fileId: string) { + return http.get(`/v1/ocr/files/${encodeURIComponent(fileId)}`, { + responseType: "blob", + }); +} diff --git a/src/components/assistant/AssistantComposer.vue b/src/components/assistant/AssistantComposer.vue index 3244fad..1b4edbc 100644 --- a/src/components/assistant/AssistantComposer.vue +++ b/src/components/assistant/AssistantComposer.vue @@ -11,7 +11,9 @@ import { Search, } from "@lucide/vue"; -defineProps<{ modelValue: string; loading: boolean }>(); +import { featureFlags } from "@/config/features"; + +defineProps<{ modelValue: string; loading: boolean; canUpload: boolean }>(); const emit = defineEmits<{ "update:modelValue": [value: string]; @@ -93,6 +95,7 @@ const functions: Array<{