diff --git a/index.html b/index.html index 2b06b1c..8d1b60a 100644 --- a/index.html +++ b/index.html @@ -9,5 +9,12 @@
+ diff --git a/src/App.vue b/src/App.vue index 263fe7b..59f2191 100644 --- a/src/App.vue +++ b/src/App.vue @@ -44,7 +44,6 @@ import { VueFlow, useVueFlow, Position, MarkerType, Handle } from '@vue-flow/cor import { Background, BackgroundVariant } from '@vue-flow/background' import { Controls } from '@vue-flow/controls' import { MiniMap } from '@vue-flow/minimap' -import { toPng } from 'html-to-image' // 导入 VueFlow 样式 import '@vue-flow/core/dist/style.css' @@ -315,23 +314,42 @@ const resetLayout = () => { /** * 导出为图片 */ -const exportImage = async () => { - const el = document.querySelector('.vue-flow') as HTMLElement - if (!el) return +const exportMarkdown = () => { + if (flowNodes.value.length === 0) return - try { - const dataUrl = await toPng(el, { - backgroundColor: '#ffffff', - quality: 1, - pixelRatio: 2 + // 找到根节点 + const rootNode = flowNodes.value.find(n => n.data.type === 'root') + if (!rootNode) return + + let markdown = `# ${rootNode.data.label}\n\n` + + // 递归构建 Markdown 内容 + const buildMarkdown = (parentId: string, level: number) => { + const children = flowEdges.value + .filter(e => e.source === parentId) + .map(e => flowNodes.value.find(n => n.id === e.target)) + .filter(n => n !== undefined) + + children.forEach(child => { + const indent = ' '.repeat(level - 1) + markdown += `${indent}- ${child!.data.label}\n` + if (child!.data.detailedContent) { + const detailIndent = ' '.repeat(level) + markdown += `${detailIndent}> ${child!.data.detailedContent.replace(/\n/g, `\n${detailIndent}> `)}\n` + } + buildMarkdown(child!.id, level + 1) }) - const link = document.createElement('a') - link.download = `thinkflow-${Date.now()}.png` - link.href = dataUrl - link.click() - } catch (err) { - console.error('Export failed:', err) } + + buildMarkdown(rootNode.id, 1) + + const blob = new Blob([markdown], { type: 'text/markdown' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.download = `thinkflow-${rootNode.data.label}-${Date.now()}.md` + link.href = url + link.click() + URL.revokeObjectURL(url) } /** @@ -647,7 +665,6 @@ const startNewSession = () => {