From af326f43d032a58350df77a1ad24ad993dfc2544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A4=A9=E9=AA=84?= <5307576@qq.com> Date: Thu, 18 Jun 2026 10:35:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E7=97=85=E4=BE=8B?= =?UTF-8?q?=E5=9B=9E=E5=A1=AB=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/CaseReviewView.vue | 47 ++++++++++++++++++++++++-- src/views/CasesView.vue | 64 +++++++++++++++++++++++++++++++++--- 2 files changed, 105 insertions(+), 6 deletions(-) diff --git a/src/views/CaseReviewView.vue b/src/views/CaseReviewView.vue index 1662a9ca..dec5b4c9 100644 --- a/src/views/CaseReviewView.vue +++ b/src/views/CaseReviewView.vue @@ -482,8 +482,9 @@ function fillDetailForm(row: CaseListItem, fullData: unknown) { resetReviewDetailForm() const record = getDetailRecord(fullData) - const traditional = getRecord(getFirst(record, ['traditional'])) - const teaching = getRecord(getFirst(record, ['teaching'])) + const contentSources = [record, fullData] + const traditional = findRecord(['traditional', 'traditional_case', 'traditionalCase'], contentSources) ?? {} + const teaching = findRecord(['teaching', 'teaching_case', 'teachingCase'], contentSources) ?? {} const scoringRules = getScoringRules(fullData, record) const examItems = getExamItems(fullData, record) @@ -724,6 +725,48 @@ function findArray(keys: string[], sources: unknown[]) { return undefined } +function findRecord(keys: string[], sources: unknown[]) { + for (const source of sources) { + const found = findRecordInSource(source, keys) + if (found) { + return found + } + } + + return undefined +} + +function findRecordInSource(value: unknown, keys: string[], depth = 0): Record | undefined { + if (!value || typeof value !== 'object' || Array.isArray(value) || depth > 5) { + return undefined + } + + const record = value as Record + for (const key of keys) { + const nested = record[key] + if (nested && typeof nested === 'object' && !Array.isArray(nested)) { + return nested as Record + } + } + + const preferredKeys = ['data', 'case', 'case_detail', 'caseDetail', 'case_info', 'caseInfo', 'detail', 'full', 'result', 'record', 'item'] + for (const key of preferredKeys) { + const found = findRecordInSource(record[key], keys, depth + 1) + if (found) { + return found + } + } + + for (const child of Object.values(record)) { + const found = findRecordInSource(child, keys, depth + 1) + if (found) { + return found + } + } + + return undefined +} + function findArrayInSource(value: unknown, keys: string[], depth = 0): unknown[] | undefined { if (!value || typeof value !== 'object' || Array.isArray(value) || depth > 5) { return undefined diff --git a/src/views/CasesView.vue b/src/views/CasesView.vue index 0cba02a9..f1ff4849 100644 --- a/src/views/CasesView.vue +++ b/src/views/CasesView.vue @@ -1514,8 +1514,9 @@ function fillCaseFormFromImportedPdf(result: ImportCasePdfResult) { const record = getImportRecord(result.data) const caseType = normalizeImportCaseType(getImportString(record, ['case_type', 'caseType']), result.caseType) - const traditional = getImportRecord(getImportFirst(record, ['traditional'])) - const teaching = getImportRecord(getImportFirst(record, ['teaching'])) + const contentSources = [record, result.data, result.raw] + const traditional = findImportRecord(['traditional', 'traditional_case', 'traditionalCase'], contentSources) ?? {} + const teaching = findImportRecord(['teaching', 'teaching_case', 'teachingCase'], contentSources) ?? {} const scoringRules = getImportScoringRules(result.raw, result.data, record) const examItems = getImportExamItems(result.raw, result.data, record) @@ -1565,8 +1566,9 @@ function fillDetailForm(row: CaseListItem, fullData: unknown) { resetDraftForm(detailForm) const record = getDetailRecord(fullData) - const traditional = getImportRecord(getImportFirst(record, ['traditional'])) - const teaching = getImportRecord(getImportFirst(record, ['teaching'])) + const contentSources = [record, fullData] + const traditional = findImportRecord(['traditional', 'traditional_case', 'traditionalCase'], contentSources) ?? {} + const teaching = findImportRecord(['teaching', 'teaching_case', 'teachingCase'], contentSources) ?? {} const scoringRules = getImportScoringRules(fullData, record) const examItems = getImportExamItems(fullData, record) @@ -1740,6 +1742,60 @@ function findImportArray(keys: string[], sources: unknown[]) { return undefined } +function findImportRecord(keys: string[], sources: unknown[]) { + for (const source of sources) { + const found = findImportRecordInSource(source, keys) + if (found) { + return found + } + } + + return undefined +} + +function findImportRecordInSource(value: unknown, keys: string[], depth = 0): Record | undefined { + if (!value || typeof value !== 'object' || Array.isArray(value) || depth > 5) { + return undefined + } + + const record = value as Record + for (const key of keys) { + const nested = record[key] + if (nested && typeof nested === 'object' && !Array.isArray(nested)) { + return nested as Record + } + } + + const preferredKeys = [ + 'data', + 'case', + 'case_detail', + 'caseDetail', + 'case_info', + 'caseInfo', + 'detail', + 'full', + 'result', + 'record', + 'item' + ] + for (const key of preferredKeys) { + const found = findImportRecordInSource(record[key], keys, depth + 1) + if (found) { + return found + } + } + + for (const child of Object.values(record)) { + const found = findImportRecordInSource(child, keys, depth + 1) + if (found) { + return found + } + } + + return undefined +} + function findImportArrayInSource(value: unknown, keys: string[], depth = 0): unknown[] | undefined { if (!value || typeof value !== 'object' || depth > 5) { return undefined