studynote/README.md
MikiVL 9c534a920d feat(M5+): 导入导出功能、性能优化、单元测试
导出:Markdown / Word(.docx) / PDF(打印) / 纯文本,编辑器标题栏下拉菜单
导入:.md / .txt / .docx(mammoth) / .pdf(pdfjs-dist),侧边栏底部按钮
Store:createNote 支持 init 参数,filteredNotes 增加缓存层
测试:vitest 23 个单元测试(utils + filterNotes 逻辑)
构建:vite manualChunks 分包优化

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 01:16:11 +08:00

122 lines
3.5 KiB
Markdown
Raw Permalink 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.

# StudyNote
基于 Vite + React + TypeScript 构建的现代化 AI 笔记应用,提供富文本编辑、灵活的文件夹组织,以及由 Claude API 驱动的 AI 写作辅助能力。
## 技术栈
| 层次 | 选型 |
|------|------|
| 构建工具 | Vite 5 |
| 前端框架 | React 19 + TypeScript |
| 编辑器 | TipTap v3 |
| 样式 | Tailwind CSS v4 |
| 状态管理 | Zustand v5 |
| 本地存储 | IndexedDBDexie.js |
| AI 接入 | Anthropic SDKclaude-sonnet-4-6 |
| 后端代理 | HonoNode.js端口 3001 |
| 动画 | Framer Motion |
| 拖拽 | @dnd-kit |
## 快速开始
```bash
# 1. 克隆仓库
git clone https://git.muchen.fan/MikiVL/studynote.git
cd studynote
# 2. 安装依赖
npm install
# 3. 配置 API Key
cp .env.example .env
# 编辑 .env填入你的 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL
# 4. 启动开发服务器(同时启动前端 + AI 代理)
npm run dev
```
浏览器访问 `http://localhost:5173`
## 功能一览
### 富文本编辑
- 标题H1H4、段落、引用块、代码块含语法高亮
- 粗体、斜体、下划线、删除线、行内代码、高亮
- 有序/无序列表、任务列表Checkbox
- 表格、图片插入
- `/` 斜杠命令菜单快速插入内容块
- 浮动工具栏(选中文字后出现)
- 自动保存(防抖 1s
### 笔记组织
- 多级文件夹嵌套
- 笔记标签(多标签、按标签过滤)
- 收藏标记
- 全文搜索(标题 + 正文 + 标签)
- 排序:按修改时间、创建时间、标题
- 拖拽移动笔记到文件夹
- 笔记/文件夹重命名、删除
### AI 功能
- **AI 续写**:点击 ⚡ 按钮,基于当前内容流式续写
- **AI 润色**:选中文字 → 浮动工具栏 → 润色,预览后替换
- **AI 摘要**:选中段落或全文生成摘要
- **翻译成英文**:选中文字 → 浮动工具栏 → 翻译
- **AI 问答**:可拖拽/缩放浮窗,针对当前笔记自由提问
- **模型管理**:支持添加多个 OpenAI 兼容模型,一键切换
### 界面体验
- 亮色 / 暗色主题切换
- 专注模式(隐藏侧边栏,全屏写作)
- 弹窗缩放动画Framer Motion
## 键盘快捷键
| 快捷键 | 功能 |
|--------|------|
| `Cmd/Ctrl + N` | 新建笔记 |
| `Cmd/Ctrl + \` | 切换专注模式 |
| `Cmd/Ctrl + Shift + J` | 打开 AI 助手 |
| `Cmd/Ctrl + B` | 粗体 |
| `Cmd/Ctrl + I` | 斜体 |
| `Cmd/Ctrl + Z` | 撤销 |
| `Cmd/Ctrl + Shift + Z` | 重做 |
| `/` | 命令菜单 |
| `Esc` | 退出专注模式 |
## 项目结构
```
studynote/
├── src/
│ ├── components/
│ │ ├── editor/ # TipTap 编辑器、浮动工具栏、欢迎页
│ │ ├── sidebar/ # 左侧导航栏
│ │ └── ai/ # AI 面板、模型管理弹窗
│ ├── stores/ # Zustand store
│ ├── db/ # Dexie.js IndexedDB 封装
│ ├── lib/ # 工具函数、AI 流式请求
│ └── test/ # Vitest 单元测试
├── server/ # Hono AI 代理服务
├── .env.example # 环境变量模板
└── vite.config.ts
```
## 环境变量
复制 `.env.example``.env` 并填写:
```
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_BASE_URL=https://api.anthropic.com
```
> `.env` 和运行时生成的 `models.json` 已加入 `.gitignore`,不会被提交。
## 构建
```bash
npm run build # 生产构建,输出到 dist/
npm run preview # 本地预览生产构建
```