/** 导出整本小说:format=txt|md,scope=approved|all */ export default defineEventHandler(async (event) => { const project = getProject(param(event)) const q = getQuery(event) const format = q.format === 'md' ? 'md' : 'txt' const scope = q.scope === 'approved' ? 'approved' : 'all' const chapters = listChapters(project.id).filter(c => c.activeVersionId && (scope === 'all' || c.status === 'approved')) const parts: string[] = [] parts.push(format === 'md' ? `# ${project.title}` : project.title) if (project.description) parts.push(project.description) for (const c of chapters) { const v = getVersion(c.activeVersionId) if (!v) continue const body = stripHeading(await readChapterFile(v.filePath)).trim() const heading = `第${c.index}章 ${c.title}` parts.push(format === 'md' ? `## ${heading}\n\n${body}` : `${heading}\n\n${body}`) } const filename = encodeURIComponent(`${project.title}.${format}`) setHeader(event, 'Content-Type', format === 'md' ? 'text/markdown; charset=utf-8' : 'text/plain; charset=utf-8') setHeader(event, 'Content-Disposition', `attachment; filename*=UTF-8''${filename}`) return parts.join('\n\n\n') })