diff --git a/electron/main/ipc.ts b/electron/main/ipc.ts index 5c277e7..0e4665f 100644 --- a/electron/main/ipc.ts +++ b/electron/main/ipc.ts @@ -280,13 +280,16 @@ export function setupIpc(win: BrowserWindow): void { log.info(`rubric:getData: ${rows.length} rows`) if (rows.length) { return { - questions: rows.map(r => ({ - questionTitle: r.question_title, - maxScore: r.max_score, - referenceAnswer: r.reference_answer, - rubric: r.rubric, - referenceAnswerImage: r.reference_answer_image || undefined - })), + questions: rows.map(r => { + const img = r.reference_answer_image + return { + questionTitle: r.question_title, + maxScore: r.max_score, + referenceAnswer: r.reference_answer, + rubric: r.rubric, + referenceAnswerImage: img && !img.startsWith('data:') ? `data:image/png;base64,${img}` : (img || undefined) + } + }), currentIndex: 0 } } @@ -297,13 +300,16 @@ export function setupIpc(win: BrowserWindow): void { const d = getDb() const rows: any[] = d.prepare('SELECT * FROM rubric ORDER BY sort_order').all() if (!rows.length) throw new Error('暂无评分标准可导出') - const questions = rows.map(r => ({ - questionTitle: r.question_title, - maxScore: r.max_score, - referenceAnswer: r.reference_answer, - rubric: r.rubric, - referenceAnswerImage: r.reference_answer_image || undefined - })) + const questions = rows.map(r => { + const img = r.reference_answer_image + return { + questionTitle: r.question_title, + maxScore: r.max_score, + referenceAnswer: r.reference_answer, + rubric: r.rubric, + referenceAnswerImage: img && !img.startsWith('data:') ? `data:image/png;base64,${img}` : (img || undefined) + } + }) const result = await dialogBox.showSaveDialog({ defaultPath: '评分标准.json', filters: [{ name: 'JSON', extensions: ['json'] }] @@ -418,11 +424,11 @@ ${extras?.maxScore ?? 100} ? [ { type: 'text', text: prompt }, { type: 'image_url', image_url: { url: `data:image/png;base64,${imageBase64}` } }, - { type: 'image_url', image_url: { url: `data:image/png;base64,${extras!.referenceAnswerImage}` } } + { type: 'image_url', image_url: { url: extras!.referenceAnswerImage } } ] : [ - { type: 'image_url', image_url: { url: `data:image/png;base64,${imageBase64}` } }, - { type: 'text', text: prompt } + { type: 'text', text: prompt }, + { type: 'image_url', image_url: { url: `data:image/png;base64,${imageBase64}` } } ] const response = await axios.post(`${config.baseUrl}/chat/completions`, { diff --git a/src/components/ResultDrawer.vue b/src/components/ResultDrawer.vue index 694da93..282212b 100644 --- a/src/components/ResultDrawer.vue +++ b/src/components/ResultDrawer.vue @@ -28,7 +28,7 @@
参考答案
{{ currentQuestion.referenceAnswer }}
- +
diff --git a/src/components/RubricEditor.vue b/src/components/RubricEditor.vue index ae24450..d8ff8fc 100644 --- a/src/components/RubricEditor.vue +++ b/src/components/RubricEditor.vue @@ -142,7 +142,7 @@ async function uploadRefImage(idx: number) { if (!window.electronAPI) return const data = await window.electronAPI.dialog.openImage() if (data) { - questions.value[idx].referenceAnswerImage = data.base64 + questions.value[idx].referenceAnswerImage = `data:${data.mime};base64,${data.base64}` } }