# WriteFlow 开发提示词(迭代式开发指南) > 本指南基于 [README.md](./README.md) 与 [产品策划开发手册](./产品策划开发手册.md) 制定,采用**增量迭代**方式推进。每个阶段均有明确的交付物、技术要点、验收标准,确保代码质量、功能完整性和用户体验一致性。 > **UI 开发必须遵循 `/ui-ux-pro-max` 规范**(即符合产品设计原则、使用 Naive UI 组件库、响应式布局、暗色/亮色主题无缝切换)。 --- ## 总体开发原则 1. **本地优先,数据安全**:所有笔记以 `.md` 文件存储于本地,同步仅作为附加能力,不得破坏本地数据。 2. **所见即所得为核心体验**:编辑器必须达到 Typora 级别的流畅度和渲染效果。 3. **渐进增强**:先保证核心编辑与文件管理可用,再叠加同步、高级功能。 4. **跨平台一致性**:在 Windows/macOS/Linux 上行为一致,UI 适配各平台习惯(如菜单栏、快捷键)。 5. **代码规范**: - 前端:TypeScript + ESLint + Prettier(Vue 官方风格指南) - 后端:Rust 1.70+,遵循 Rustfmt + Clippy,模块化设计,错误处理清晰。 6. **测试覆盖**:关键路径(文件读写、同步、冲突处理)必须有单元测试和集成测试。 7. **性能目标**:冷启动 < 2s,打开 1000 行文件 < 500ms,空闲内存 < 100MB。 --- ## Phase 1 – MVP 基础编辑器(8 周) **目标**:提供可用的本地 Markdown 所见即所得编辑器,包含文件管理、基础主题、导出 HTML/PDF。 **UI/UX 依据**:设计规范第 6 章(沉浸优先、无干扰、反馈及时),使用 Naive UI 组件(布局、按钮、弹窗、消息提示)。 --- ### 迭代 1.1 – 项目骨架与编辑器内核(W1) #### 任务清单 - [ ] **初始化 Tauri + Vue 3 + TypeScript 项目** - 使用 `create-tauri-app` 选择 Vue 3 + TypeScript。 - 配置 `vite.config.ts`,启用别名 `@` 指向 `src`。 - 安装依赖:`naive-ui`、`milkdown`(含 `@milkdown/vue`)、`@milkdown/theme-nord`(或其他主题)、`@milkdown/preset-commonmark`。 - [ ] **集成 Milkdown 编辑器组件** - 在 `App.vue` 或独立 `Editor.vue` 中挂载 Milkdown 编辑器。 - 配置基本 CommonMark 预设,实现标题、加粗、斜体、列表、引用、代码块、链接、图片、表格(基础)的实时渲染。 - 关闭 Milkdown 的工具栏,实现**纯键盘驱动**的所见即所得(光标所在行自动隐藏标记符号)。 - [ ] **实现自定义标题栏(无系统边框)** - 修改 `tauri.conf.json`:`"windows"` 配置 `"decorations": false`。 - 在 Vue 中绘制标题栏,包含应用 Logo、标题(当前文件名)、窗口控制按钮(最小化、最大化、关闭)。 - 实现窗口拖拽区域:使用 Tauri `data-tauri-drag-region` 属性。 - [ ] **基础的亮色/暗色主题** - 定义 CSS 变量(色值参考设计规范 6.4)。 - 提供顶部菜单或设置项切换主题,利用 Naive UI 的 `n-config-provider` 配合自定义类。 #### 关键技术点 - Milkdown 编辑器的 `editor` 实例管理(通过 `ref` 获取,用于后续内容读写)。 - Tauri 的 `window` API 控制窗口大小和位置。 - 使用 `@tauri-apps/api/event` 监听系统主题变更(可选)。 #### 验收标准 - [ ] 启动后编辑器可输入,Markdown 语法正确渲染。 - [ ] 标题栏可拖拽移动窗口,控制按钮功能正常。 - [ ] 主题切换后编辑器背景、文字、边框颜色同步变化。 - [ ] 无控制台报错,内存占用 < 50MB(空文档)。 --- ### 迭代 1.2 – 文件系统集成(W2–W3) #### 任务清单 - [ ] **实现文件树侧边栏** - 使用 Naive UI 的 `n-tree` 组件,绑定目录结构数据。 - 通过 Tauri `fs` 模块(`read_dir`)递归读取工作区目录。 - 支持展开/折叠文件夹,点击 `.md` 文件在编辑器中打开。 - [ ] **新建/打开/保存文件** - 新建:生成 `untitled.md`,弹窗让用户重命名(或自动生成时间戳文件名)。 - 打开:使用 `dialog.open()` 选择 `.md` 文件,读取内容并渲染。 - 保存:使用 `fs.writeFile()`,支持 `Ctrl+S` 快捷键,同时自动保存到当前文件。 - [ ] **最近打开文件列表** - 使用 `localStorage` 或 Tauri `store` 插件存储最近 10 个文件路径。 - 在菜单或侧边栏显示快速入口。 - [ ] **工作区管理(单工作区 MVP)** - 首次启动引导用户选择笔记目录(`dialog.open({ directory: true })`)。 - 将路径持久化(`store` 或配置文件),后续启动自动加载该目录。 #### 技术要点 - 文件读写使用 Tauri 的 `tauri::fs` 和 `tauri::dialog` 模块,注意权限配置(`capabilities`)。 - 文件树数据使用 `ref` 响应式,结合 `watch` 监听目录变更(后续可升级为 `notify` 后端监听)。 - 编辑器内容与文件路径双向绑定:打开文件 → 设置 `editor` 内容,保存时读取 `editor` 内容写入文件。 #### 验收标准 - [ ] 文件树正确显示目录及 `.md` 文件,点击文件立即在编辑器中打开。 - [ ] 新建文件后保存,文件出现在文件树中。 - [ ] 最近文件列表正确记录,重启后依然存在。 - [ ] 打开非文本文件或非 MD 文件时,给出友好提示。 --- ### 迭代 1.3 – 编辑体验增强(W4) #### 任务清单 - [ ] **自动保存与手动保存状态** - 每隔 30 秒自动保存当前文件(若有更改)。 - 状态栏显示“已保存”或“正在保存...”图标(Naive UI `n-icon`)。 - [ ] **快捷键体系(核心)** - `Ctrl+N` 新建,`Ctrl+O` 打开,`Ctrl+S` 保存,`Ctrl+Shift+S` 另存为。 - `Ctrl+Z`/`Ctrl+Y` 撤销/重做(Milkdown 内置)。 - `Ctrl+F` 查找(后续迭代)。 - 使用 Tauri `globalShortcut` 或前端 `@vueuse/core` 的 `useMagicKeys`。 - [ ] **字数统计与文档信息** - 状态栏显示当前文档字数(中英文混合计数)、行数、光标位置。 - 使用 `@milkdown/utils` 的 `prose` 或自行解析 AST 统计。 - [ ] **焦点模式(可选)** - 快捷键 `F11` 或菜单切换:隐藏侧边栏,编辑器全屏。 - 使用 CSS 动画过渡,保持平滑。 #### UI/UX 规范检查 - 状态栏位于底部,信息左对齐,同步状态(尚无)预留位置。 - 快捷键提示可悬浮显示(使用 `n-tooltip`)。 #### 验收标准 - [ ] 自动保存生效,关闭窗口或切换文件时不丢失编辑内容。 - [ ] 核心快捷键全平台(Win/Cmd 适配)正常。 - [ ] 字数统计准确(英文单词、中文字符、总字符)。 - [ ] 焦点模式切换流畅,无闪烁。 --- ### 迭代 1.4 – 主题与导出(W5–W6) #### 任务清单 - [ ] **完整的亮色/暗色主题切换** - 提供至少三种配色:默认亮色、默认暗色、Sepia(暖色)。 - 使用 Naive UI 的 `n-config-provider` 全局管理主题,同时自定义编辑器样式(Milkdown 的样式覆盖)。 - [ ] **导出 HTML** - 将当前 Markdown 内容转换为 HTML(可借助 Milkdown 的 `getMarkdown` + `markdown-it` 或直接使用 Milkdown 渲染结果)。 - 打包为一个自包含的 `.html` 文件(含样式),通过 Tauri `dialog.save()` 选择保存位置。 - [ ] **导出 PDF** - 方案一:使用 `window.print()` 配合 `@media print` 样式实现打印为 PDF(跨平台简单)。 - 方案二:使用 Rust 后端(`printpdf`)生成 PDF,更专业但复杂度高。MVP 采用方案一,后续替换。 - 导出前确保样式一致(保留主题)。 - [ ] **设置存储** - 使用 Tauri `store` 插件(或 `confy` crate)保存用户偏好:主题、最近工作区、自动保存间隔等。 #### 技术要点 - 导出 HTML 时,需内联主题 CSS 和 Milkdown 渲染样式,确保外部打开显示正常。 - PDF 导出使用 Tauri 的 `WebviewWindow` 的 `print` 方法或调用系统打印对话框。 #### 验收标准 - [ ] 三种主题切换后,编辑器、侧边栏、状态栏颜色同步。 - [ ] 导出 HTML 文件,在浏览器中打开与编辑器内显示一致。 - [ ] 导出 PDF 内容完整,中文不乱码,图片(若有)正常显示。 - [ ] 用户设置(主题、最近工作区)在重启后保留。 --- ### 迭代 1.5 – 错误处理与基础测试(W7–W8) #### 任务清单 - [ ] **全局错误处理** - 前端:Vue 全局错误处理器(`app.config.errorHandler`)捕获并显示友好提示(`n-notification`)。 - Rust:使用 `anyhow` 或自定义错误类型,Tauri Command 返回 `Result`,错误信息通过 `invoke` 传递到前端。 - [ ] **文件操作异常场景** - 文件被外部修改(只读、删除)时的提示。 - 磁盘空间不足、权限错误等提示。 - [ ] **单元测试(Rust)** - 文件读写函数、Hash 计算、路径处理等工具函数。 - 使用 `cargo test`,覆盖率 > 70%。 - [ ] **前端单元测试(Vitest)** - 测试文件树组件、编辑器组件(通过 Mock 编辑器 API)。 - [ ] **E2E 测试(Playwright)** - 核心路径:启动 → 新建文件 → 输入内容 → 保存 → 重新打开 → 内容一致。 - 导出 HTML 和 PDF 可验证文件生成。 #### 验收标准 - [ ] 所有错误场景有对应的用户提示,不崩溃。 - [ ] 单元测试全部通过。 - [ ] E2E 测试通过。 - [ ] 打包后的应用在 Windows/macOS/Linux 上可运行(基础功能)。 --- ### Phase 1 交付物 - 可安装的桌面应用(`.msi`/`.dmg`/`.AppImage`)。 - 源码仓库,包含完整的开发文档(README、CONTRIBUTING)。 - 项目网站(VitePress)上线,包含下载链接和用户手册。 --- ## Phase 2 – S3 同步引擎(6 周) **目标**:实现基于 S3 协议的云端同步,支持手动/自动同步、冲突检测、图片上传。 --- ### 迭代 2.1 – S3 连接层(W9–W10) #### 任务清单 - [ ] **添加 Rust S3 客户端** - 依赖 `aws-sdk-s3` 或 `rust-s3`,实现 `SyncProtocol` trait(参考设计文档 8.4)。 - 实现 `connect`、`list_files`、`upload`、`download`、`delete`、`get_metadata` 方法。 - [ ] **凭据安全存储** - 使用 `keyring` crate(macOS/Windows/Linux 统一)或 Tauri 的 `store` 加密存储 AccessKey/SecretKey。 - 前端提供配置表单(Endpoint、Bucket、Region、AccessKey、SecretKey),通过 Tauri Command 保存。 - [ ] **连接测试** - 提供“测试连接”按钮,验证凭据是否正确,Bucket 是否可访问。 #### 技术要点 - 使用 `async`/`await`,超时控制(`tokio::time::timeout`)。 - 处理 S3 的路径前缀(`prefix`)作为远程目录。 #### 验收标准 - [ ] 配置正确的 S3 信息后,测试连接成功。 - [ ] 凭据加密存储,无法在明文配置文件中读取。 - [ ] 列出远程文件(含前缀)正常。 --- ### 迭代 2.2 – 同步核心(W11) #### 任务清单 - [ ] **计算文件 Hash** - 使用 `sha2` 或 `blake3` 计算文件内容的哈希值。 - 存储本地元数据:`last_modified`、`hash`、`sync_status`。 - [ ] **Diff 引擎** - 对比本地文件、远程文件、上次同步基线(存储在本地 `.writeflow/sync_meta.json`)。 - 分类:`local_newer`、`remote_newer`、`both_changed`(冲突)、`identical`。 - [ ] **上传/下载执行** - 实现批量上传(并发控制,避免过多连接)。 - 实现增量下载(仅下载变更文件)。 - 进度反馈:通过 Tauri 事件向前端发送进度信息(`emit`)。 #### 技术要点 - 使用 `tokio` 并发,控制并发数(如 5 个)。 - 前端显示同步进度条(`n-progress`)。 #### 验收标准 - [ ] 本地新增文件 → 同步后出现在远程。 - [ ] 远程新增文件 → 同步后下载到本地。 - [ ] 本地文件修改 → 同步后远程更新。 - [ ] 远程文件修改 → 同步后本地更新。 --- ### 迭代 2.3 – 冲突处理与状态 UI(W12) #### 任务清单 - [ ] **冲突检测与策略** - 实现三种策略:`keep_local`、`keep_remote`、`keep_both`(默认)。 - `keep_both` 生成 `filename_conflict_YYYYMMDDHHMMSS.md`。 - [ ] **同步状态 UI** - 状态栏显示同步状态(空闲、同步中、冲突、错误)。 - 文件树中每个文件显示同步图标(绿勾、橙色感叹号、红色叉)。 - 点击状态可查看详细信息(使用 `n-drawer` 或 `n-modal`)。 - [ ] **手动/自动同步** - 提供“立即同步”按钮。 - 定时同步(可配置间隔,默认 5 分钟)。 #### 验收标准 - [ ] 两台设备修改同一文件,同步后生成冲突副本,原文件保留不丢失。 - [ ] 状态指示器实时更新,冲突有明确提示。 - [ ] 自动同步按设定间隔执行。 --- ### 迭代 2.4 – 图片同步与首次配置向导(W13–W14) #### 任务清单 - [ ] **图片自动上传** - 监听编辑器中的图片插入(拖拽或粘贴),使用 Tauri `fs` 读取图片文件并上传至 S3。 - 替换 Markdown 中的图片路径为相对路径(如 `images/xxx.png`),同时上传到远程对应路径。 - [ ] **图片引用管理** - 确保本地和远程图片目录结构一致。 - [ ] **首次配置向导** - 启动时检测是否已配置同步,若无则弹出向导(`n-steps`)。 - 引导选择工作区、配置 S3 信息、测试连接。 - [ ] **同步日志** - 提供查看同步日志的界面(`n-log` 或 `n-textarea`),便于调试。 #### 验收标准 - [ ] 粘贴图片到编辑器,自动上传到 S3,并在本地生成相对路径引用。 - [ ] 在另一设备同步后,图片正常显示。 - [ ] 向导流程完整,可跳过或稍后配置。 - [ ] 同步日志记录关键操作。 --- ### Phase 2 交付物 - 完整的 S3 同步功能,支持公开云(AWS、阿里云等)和私有部署(MinIO)。 - 冲突处理机制完善,数据安全有保障。 --- ## Phase 3 – 高级编辑功能(8 周) **目标**:补齐 Typora 的高级能力,包括代码高亮、数学公式、图表、目录大纲、多种导出格式。 > 由于篇幅,此处仅列出关键迭代,细节可参考产品手册 4.3。 --- ### 迭代 3.1 – 代码高亮与数学公式 - 引入 `Shiki`(Rust 端可预高亮)或前端 `prism.js` 实现语法高亮。 - 使用 `KaTeX` 渲染行内和块级公式。 - 配置 Milkdown 插件:`@milkdown/plugin-math`(需等待适配)或自定义。 ### 迭代 3.2 – Mermaid 图表与表格编辑器 - 集成 `Mermaid.js`,在渲染阶段将代码块 `mermaid` 转换为 SVG。 - 使用 Naive UI 的 `n-table` 构建可视化表格编辑器(弹窗形式),支持增删行列、对齐。 ### 迭代 3.3 – 文档大纲与导航 - 解析 Markdown 标题,在侧边栏或独立面板生成大纲树,点击跳转。 - 使用 `@milkdown/plugin-toc` 或自行解析。 ### 迭代 3.4 – 导出增强(PDF、Word、图片) - 替换 `window.print()` 为 Rust `genpdf` 或 `html-to-pdf` 引擎,提升 PDF 质量。 - 集成 `docx` crate 或调用 Pandoc(需用户安装)导出 Word。 - 导出为 PNG(截图)。 --- ## Phase 4 – 多协议同步(6 周) **目标**:支持 WebDAV、Git、WebRTC 等协议,扩展同步场景。 > 每个协议作为一个独立迭代,实现相同的 `SyncProtocol` trait,复用核心引擎。 --- ### 迭代 4.1 – WebDAV - 使用 `reqwest` 实现 PROPFIND、PUT、GET、DELETE。 - 支持摘要认证和 OAuth2(如坚果云)。 ### 迭代 4.2 – Git - 集成 `git2-rs`,实现 clone、pull、push、commit。 - 提供版本历史查看(类似 Git 日志)。 ### 迭代 4.3 – WebRTC - 使用 `webrtc-rs` 或通过 Tauri 调用前端 WebRTC,实现 P2P 直连同步。 - 需要信令服务器(简单实现)。 --- ## Phase 5 – 体验打磨与生态(持续) **目标**:多标签页、全文搜索、快捷键自定义、主题市场、插件系统。 --- ### 迭代 5.1 – 多标签页 - 使用 `n-tabs` 管理多个打开的文件,支持拖拽排序。 - 每个标签页独立编辑器实例(或共享实例切换内容)。 ### 迭代 5.2 – 全文搜索 - 使用 `tauri` 后端遍历文件内容,结合 `tantivy` 或 `ripgrep` 实现高速搜索。 - 前端结果列表,点击跳转并高亮匹配项。 ### 迭代 5.3 – 快捷键自定义 - 提供设置界面,使用 `n-dynamic-tags` 编辑快捷键映射。 - 存储为 JSON,动态注册/注销。 ### 迭代 5.4 – 插件系统 - 基于 `deno` 或 `quickjs` 嵌入 JavaScript 引擎,允许用户编写插件扩展。 - 提供插件 API(如 `onSave`、`onRender`)。 --- ## 开发流程与质量保障 ### 代码审查 - 每次 PR 必须通过 CI(检查 lint、test、build)。 - 至少一名 Reviewer 批准。 ### 持续集成 - GitHub Actions: - 前端 lint + test - Rust clippy + test - 构建 Tauri 应用(仅 PR 检查,不发布) ### 文档同步 - 所有 API 变更更新 TSDoc/Rustdoc。 - 用户手册同步更新(VitePress)。 --- ## 附录:UI 开发规范(/ui-ux-pro-max) 1. **使用 Naive UI 组件**:优先使用 `n-*` 组件,避免自定义基础组件(除非必要)。 2. **响应式适配**:窗口缩放时编辑器宽度自适应,侧边栏可折叠。 3. **暗色/亮色完全支持**:所有颜色使用 CSS 变量,随主题切换。 4. **交互反馈**:操作成功/失败使用 `n-message` 或 `n-notification`,加载状态使用 `n-spin`。 5. **可访问性**:使用语义化标签,键盘导航(Tab 顺序合理)。 6. **布局**:遵循设计规范第 6 章,标题栏高度 32px,状态栏 28px,编辑器填充适当留白。 --- **开始开发**:请从 **Phase 1 – 迭代 1.1** 入手,完成后再推进后续。每个迭代完成后进行自测,并更新 CHANGELOG。祝开发顺利!