fix: 参考答案图片存完整 data URL (含 mime),修复无图时提示词顺序一致化

This commit is contained in:
2026-07-16 10:16:03 +08:00
parent 25b8cfb787
commit ba7aff17d7
3 changed files with 25 additions and 19 deletions
+23 -17
View File
@@ -280,13 +280,16 @@ export function setupIpc(win: BrowserWindow): void {
log.info(`rubric:getData: ${rows.length} rows`) log.info(`rubric:getData: ${rows.length} rows`)
if (rows.length) { if (rows.length) {
return { return {
questions: rows.map(r => ({ questions: rows.map(r => {
questionTitle: r.question_title, const img = r.reference_answer_image
maxScore: r.max_score, return {
referenceAnswer: r.reference_answer, questionTitle: r.question_title,
rubric: r.rubric, maxScore: r.max_score,
referenceAnswerImage: r.reference_answer_image || undefined referenceAnswer: r.reference_answer,
})), rubric: r.rubric,
referenceAnswerImage: img && !img.startsWith('data:') ? `data:image/png;base64,${img}` : (img || undefined)
}
}),
currentIndex: 0 currentIndex: 0
} }
} }
@@ -297,13 +300,16 @@ export function setupIpc(win: BrowserWindow): void {
const d = getDb() const d = getDb()
const rows: any[] = d.prepare('SELECT * FROM rubric ORDER BY sort_order').all() const rows: any[] = d.prepare('SELECT * FROM rubric ORDER BY sort_order').all()
if (!rows.length) throw new Error('暂无评分标准可导出') if (!rows.length) throw new Error('暂无评分标准可导出')
const questions = rows.map(r => ({ const questions = rows.map(r => {
questionTitle: r.question_title, const img = r.reference_answer_image
maxScore: r.max_score, return {
referenceAnswer: r.reference_answer, questionTitle: r.question_title,
rubric: r.rubric, maxScore: r.max_score,
referenceAnswerImage: r.reference_answer_image || undefined referenceAnswer: r.reference_answer,
})) rubric: r.rubric,
referenceAnswerImage: img && !img.startsWith('data:') ? `data:image/png;base64,${img}` : (img || undefined)
}
})
const result = await dialogBox.showSaveDialog({ const result = await dialogBox.showSaveDialog({
defaultPath: '评分标准.json', defaultPath: '评分标准.json',
filters: [{ name: 'JSON', extensions: ['json'] }] filters: [{ name: 'JSON', extensions: ['json'] }]
@@ -418,11 +424,11 @@ ${extras?.maxScore ?? 100}
? [ ? [
{ type: 'text', text: prompt }, { 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,${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`, { const response = await axios.post(`${config.baseUrl}/chat/completions`, {
+1 -1
View File
@@ -28,7 +28,7 @@
<div class="result-section" v-if="currentQuestion.referenceAnswer"> <div class="result-section" v-if="currentQuestion.referenceAnswer">
<div class="section-title">参考答案</div> <div class="section-title">参考答案</div>
<div class="reference-text">{{ currentQuestion.referenceAnswer }}</div> <div class="reference-text">{{ currentQuestion.referenceAnswer }}</div>
<img v-if="currentQuestion.referenceAnswerImage" class="ref-image" :src="'data:image/png;base64,' + currentQuestion.referenceAnswerImage" /> <img v-if="currentQuestion.referenceAnswerImage" class="ref-image" :src="currentQuestion.referenceAnswerImage" />
</div> </div>
<div class="result-score"> <div class="result-score">
+1 -1
View File
@@ -142,7 +142,7 @@ async function uploadRefImage(idx: number) {
if (!window.electronAPI) return if (!window.electronAPI) return
const data = await window.electronAPI.dialog.openImage() const data = await window.electronAPI.dialog.openImage()
if (data) { if (data) {
questions.value[idx].referenceAnswerImage = data.base64 questions.value[idx].referenceAnswerImage = `data:${data.mime};base64,${data.base64}`
} }
} }