learning-rust/tauri-app/CHANGELOG.md

58 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WriteFlow Changelog
## Phase 1 MVP 基础编辑器
### 迭代 1.1 项目骨架与编辑器内核 (2026-07-15)
#### 新增
- 配置 `vite.config.ts``tsconfig.json``@` 别名,指向 `src` 目录
- 集成 Milkdown 编辑器:`@milkdown/kit` + `@milkdown/vue`,配置 CommonMark 预设
- 创建 `Editor.vue` 编辑器组件,支持 v-model 双向绑定、历史记录 (history)、剪贴板 (clipboard)
- 实现纯键盘驱动所见即所得编辑(无工具栏)
- 自定义标题栏:含 WriteFlow Logo、主题切换按钮、窗口控制最小化/最大化/关闭)
- 使用 `@vicons/ionicons5` 图标库,通过 Naive UI `n-icon` 组件渲染(`CreateOutline`、`SunnyOutline`、`MoonOutline`、`RemoveOutline`、`ExpandOutline`、`ContractOutline`、`CloseOutline`
- 亮色 / 暗色主题切换CSS 变量驱动,标题栏、编辑器、滚动条同步变化
- 集成 Naive UI 组件库,使用 `n-config-provider` 管理全局主题
- 编辑器样式覆盖:标题、列表、引用、代码块、表格、链接等 Markdown 元素样式完整
- Markdown 内容变化通过 `listener` 插件实时同步到 v-model
#### 技术要点
- Milkdown v7 编辑器通过 `useEditor` composable 创建实例
- 自定义标题栏使用 Tauri `data-tauri-drag-region` 实现窗口拖拽
- 主题通过 `html.dark` CSS 类切换Naive UI 同步切换 `darkTheme`
- 编辑器 `ProseMirror` 输出 markdown 通过 `listenerCtx.markdownUpdated` 实时获取
#### 修复
- 修复页面空白:`MilkdownProvider` 需作为 `useEditor` 的祖先组件提供上下文,将其从 Editor.vue 提升至 App.vue
- 修复窗口拖拽权限:补充 `core:window:allow-is-maximized`、`allow-maximize`、`allow-unmaximize`
- 修复编辑器无法滚动:`#app` 改用 `padding-top: 40px` 替代 `.app-body``margin-top: 40px`,避免 `overflow: hidden` 裁掉底部内容导致高度计算错误
- 移除 `milkdown.css``min-height: 100%` 避免干扰 flex 布局高度约束
- 导入 ProseMirror 和 Tables 基础 CSS`@milkdown/kit/prose/view/style/prosemirror.css`、`tables.css`
### 迭代 1.2 文件系统集成 (2026-07-15)
#### 新增
- **Rust 后端**:添加 `tauri-plugin-fs` + `tauri-plugin-dialog` 插件,实现文件系统 Tauri commands
- `read_directory` — 递归读取目录,返回文件树结构(仅 `.md` 文件和非空目录)
- `read_file_content` / `write_file_content` — 读写文件内容
- `create_file` / `rename_file` / `delete_file` / `file_exists` — 文件增删改查
- **前端插件**:安装 `@tauri-apps/plugin-fs` + `@tauri-apps/plugin-dialog`
- **文件树侧边栏** (`Sidebar.vue` + `FileTree.vue`):使用 Naive UI `n-tree` 渲染目录结构
- 支持展开/折叠文件夹,点击 `.md` 文件在编辑器中打开
- 顶部工具栏:打开工作区、刷新、最近文件切换
- **新建/打开/保存文件**
- `Ctrl+N` 新建空白文件,`Ctrl+O` 打开文件对话框
- `Ctrl+S` 保存当前文件,`Ctrl+Shift+S` 另存为
- 首次启动自动弹出工作区目录选择
- **工作区管理**:工作区路径持久化到 `localStorage`,后续启动自动加载
- **最近文件列表**:记录最近 10 个打开的文件,存储在 `localStorage`,重启保留
- **标题栏增强**:显示当前文件名 + 未保存标记(●)
- **Editor 组件增强**:支持外部内容替换(`replaceAll`),用于打开文件时更新编辑器
#### 技术要点
- 文件操作通过 Rust `std::fs` 实现,前端通过 `invoke` 调用 Tauri commands
- 目录遍历过滤隐藏文件和 `node_modules`/`target` 目录,仅展示 `.md` 文件
- 编辑器使用 `@milkdown/kit/utils``replaceAll` 实现外部内容替换
- 使用 `@tauri-apps/plugin-dialog``open`/`save` 实现原生文件对话框
- 快捷键通过全局 `keydown` 监听,区分 `Ctrl`/`Cmd` + 组合键