diff --git a/src/composables/useTeachingBook.ts b/src/composables/useTeachingBook.ts index 9d9541c..8e1e593 100644 --- a/src/composables/useTeachingBook.ts +++ b/src/composables/useTeachingBook.ts @@ -28,6 +28,7 @@ export interface ImportResult { export interface TeachingBookStore { book: Ref + bookName: Ref loadStatus: Ref loadError: Ref saveStatus: Ref @@ -44,10 +45,12 @@ export interface TeachingBookStore { updateDesign: (id: DesignId, updater: (design: TeachingDesign) => void) => void clearBook: () => void generateLesson: (topic: string) => Promise + regenerateLesson: (id: DesignId) => Promise } export function useTeachingBook(bookId: string): TeachingBookStore { const book = ref(createEmptyBook()) as Ref + const bookName = ref('') const loadStatus = ref('loading') const loadError = ref(null) const saveStatus = ref('idle') @@ -113,6 +116,7 @@ export function useTeachingBook(bookId: string): TeachingBookStore { try { const record = await booksApi.getBook(bookId) book.value = record.data + bookName.value = record.name await nextTick() loadStatus.value = 'loaded' } catch (error) { @@ -245,8 +249,31 @@ export function useTeachingBook(bookId: string): TeachingBookStore { } } + async function regenerateLesson(id: DesignId): Promise { + const existing = book.value.designs.find((d) => d.id === id) + if (!existing) return { ok: false, message: '找不到该教案。' } + + const topic = existing.originalFilename.replace(/\.md$/i, '') + try { + const result = await booksApi.generateLesson(topic) + const newDesign = parseTeachingDesign(result.filename, result.markdown) + const index = book.value.designs.findIndex((d) => d.id === id) + if (index !== -1) { + book.value.designs.splice(index, 1, newDesign) + if (book.value.selectedId === id) { + book.value.selectedId = newDesign.id + } + } + touch() + return { ok: true } + } catch (error) { + return { ok: false, message: error instanceof Error ? error.message : '修复失败。' } + } + } + return { book, + bookName, loadStatus, loadError, saveStatus, @@ -263,5 +290,6 @@ export function useTeachingBook(bookId: string): TeachingBookStore { updateDesign, clearBook, generateLesson, + regenerateLesson, } }