feat: 优化 AI 日报结果中心信息架构

This commit is contained in:
电摇小子
2026-07-14 11:07:35 +08:00
committed by 电摇小子
parent c291c94bd8
commit d28b579cb4
11 changed files with 372 additions and 102 deletions
+9 -1
View File
@@ -10,7 +10,11 @@ import { StickerService } from './sticker-service'
import { parseMessageContent } from './message-parser'
import { ImageDecryptService } from './image-decrypt-service'
import { exportGroupReport } from './group-report-service'
import { listGeneratedReports, saveGeneratedReport } from './report-history-service'
import {
deleteGeneratedReport,
listGeneratedReports,
saveGeneratedReport
} from './report-history-service'
import type { GroupReportExportRequest } from '../shared/group-report'
import type { SaveGeneratedReportRequest } from '../shared/report-history'
import { DatabaseKeyStore } from './database-key-store'
@@ -343,6 +347,10 @@ app.whenReady().then(async () => {
return saveGeneratedReport(request)
})
ipcMain.handle('report:deleteGenerated', async (_, reportId: string) => {
return deleteGeneratedReport(reportId)
})
ipcMain.handle('report:reveal', async (_, filePath: string) => {
try {
shell.showItemInFolder(filePath)
+33
View File
@@ -3,6 +3,7 @@ import { promises as fs } from 'fs'
import path from 'path'
import type {
GeneratedReportRecord,
DeleteGeneratedReportResult,
ReportAssetStatus,
ReportHistoryResult,
SaveGeneratedReportRequest,
@@ -166,3 +167,35 @@ export async function saveGeneratedReport(
return { success: false, error: error instanceof Error ? error.message : String(error) }
}
}
export async function deleteGeneratedReport(reportId: string): Promise<DeleteGeneratedReportResult> {
try {
const jsonFiles = await walkJsonFiles(getReportsRoot())
for (const jsonPath of jsonFiles) {
try {
const content = await fs.readFile(jsonPath, 'utf8')
const record = JSON.parse(content) as GeneratedReportRecord
if (record.id !== reportId) continue
const paths = [record.htmlPath, record.pngPath, jsonPath].filter(
(filePath): filePath is string => Boolean(filePath)
)
await Promise.all(
paths.map(async (filePath) => {
try {
await fs.unlink(filePath)
} catch (error) {
if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error
}
})
)
return { success: true, deletedId: reportId }
} catch (error) {
console.warn(`[ReportHistory] skip invalid report record while deleting: ${jsonPath}`, error)
}
}
return { success: false, error: '未找到要删除的日报记录' }
} catch (error) {
return { success: false, error: error instanceof Error ? error.message : String(error) }
}
}