feat: CutThenThink v3.0 初始版本

完整实现 Tauri + Vanilla JS 轻量级截图工具

Phase 1 - 项目搭建
- Tauri 2.x 项目初始化
- Vite 前端项目搭建
- 基础 UI 框架(CSS 变量、组件库)
- 构建配置优化

Phase 2 - 核心截图功能
- 全屏/区域/窗口截图
- 截图预览和管理
- 文件命名和缩略图
- 全局快捷键集成

Phase 3 - 上传与存储
- 多图床上传(GitHub/Imgur/自定义)
- 配置管理系统
- SQLite 数据库

Phase 4 - OCR 集成
- 云端 OCR(百度/腾讯云)
- 插件管理系统
- 本地 OCR 插件(Go)
- OCR 结果处理

Phase 5 - AI 分类系统
- Claude/OpenAI API 集成
- Prompt 模板引擎
- 模板管理界面
- 自动分类流程

Phase 6 - 历史记录与管理
- 图库视图(网格/列表)
- 搜索与筛选
- 批量操作
- 导出功能(JSON/CSV/ZIP)

Phase 7 - 打包与发布
- 多平台构建配置
- CI/CD 工作流
- 图标和资源
- 安装包配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude
2026-02-12 18:58:40 +08:00
commit e2ea309ee6
142 changed files with 38818 additions and 0 deletions

349
docs/GALLERY_USAGE.md Normal file
View File

@@ -0,0 +1,349 @@
# 图库视图使用指南
## 概述
图库视图是 CutThink Lite 的核心功能之一,提供了强大的图片管理、搜索、筛选和批量操作功能。
## 功能特性
### 1. 图库网格视图
- **网格/列表视图切换**
- 支持网格和列表两种显示模式
- 网格视图:适合浏览大量图片
- 列表视图:适合查看详细信息
- **懒加载与无限滚动**
- 图片按需加载,提升性能
- 滚动到底部自动加载更多内容
- 可配置的每页显示数量
- **排序功能**
- 按日期排序(最新/最旧)
- 按名称排序A-Z/Z-A
- 按文件大小排序
### 2. 图片预览
- **全屏预览**
- 点击图片进入全屏预览模式
- 支持缩放(滚轮或按钮)
- 支持旋转(左转/右转)
- 支持拖拽移动
- **键盘快捷键**
- `←/→`:上一张/下一张
- `+/-`:放大/缩小
- `0`:重置缩放
- `F`:适应屏幕
- `R`:旋转
- `I`:显示/隐藏信息
- `ESC`:关闭预览
- **图片操作**
- 下载图片
- 复制到剪贴板
- 在新窗口打开
- 全屏模式
### 3. 搜索与筛选
- **快速搜索**
- 支持文件名搜索
- 支持 URL/内容搜索
- 支持 OCR 文本搜索
- 支持标签搜索
- 键盘快捷键:`Cmd/Ctrl + K`
- **高级筛选**
- 日期范围筛选
- 快速日期选择(今天/本周/本月/今年)
- 记录类型筛选(图片/文本/文件)
- 文件大小筛选
- 多条件组合筛选
- **搜索高亮**
- 显示搜索结果数量
- 活跃筛选标签显示
- 一键清除筛选
### 4. 批量操作
- **多选功能**
- 点击图片进行多选
- 支持全选/取消全选
- 显示已选择数量
- **批量操作**
- 批量上传图片
- 批量下载图片
- 批量删除记录
- 批量编辑标签
- 批量移动分类
- 批量导出
- **批量标签编辑**
- 替换标签:清空原标签,设置新标签
- 添加标签:在原标签基础上添加
- 删除标签:从原标签中删除指定标签
### 5. 导出功能
- **导出格式**
- JSON包含完整元数据
- CSV电子表格格式
- ZIP打包所有文件和元数据
- HTML 报告:统计分析报告
- **导出选项**
- 包含/排除元数据
- 包含/排除 OCR 文本
- 包含/排除标签
- 自定义 CSV 分隔符
## 组件使用示例
### 基础使用
```vue
<script setup lang="ts">
import { GalleryView } from '@/components/views/gallery';
</script>
<template>
<GalleryView />
</template>
```
### 自定义使用
```vue
<script setup lang="ts">
import { ref } from 'vue';
import { GalleryGrid, ImagePreview, SearchFilter } from '@/components/views/gallery';
import { useRecordsStore } from '@/store';
const recordsStore = useRecordsStore();
const selectedIds = ref<Set<string>>(new Set());
// 监听预览事件
const handlePreview = (item) => {
console.log('预览:', item);
};
// 监听选择变化
const handleSelectionChange = (ids) => {
selectedIds.value = ids;
};
</script>
<template>
<div>
<SearchFilter @search="handleSearch" />
<GalleryGrid
:items="recordsStore.records"
:selection-mode="true"
@selection-change="handleSelectionChange"
@preview="handlePreview"
/>
<ImagePreview />
</div>
</template>
```
### 导出功能使用
```typescript
import { exportData } from '@/utils/export';
// 导出为 JSON
const result = await exportData(records, 'json', {
includeMetadata: true,
includeOCR: true,
includeTags: true,
});
// 导出为 CSV
const result = await exportData(records, 'csv', {
delimiter: ',',
});
// 导出为 ZIP
const result = await exportData(records, 'zip', {
includeMetadata: true,
});
// 生成报告
const result = await exportData(records, 'report');
```
## API 接口
### SearchFilter 组件
**Props**
-
**Events**
- `@search(query: string, filters: SearchFilters)`: 搜索事件
- `@filter(filters: SearchFilters)`: 筛选事件
**Methods**
- `updateResultCount(count: number)`: 更新结果计数
- `setQuery(query: string)`: 设置搜索查询
### GalleryGrid 组件
**Props**
- `items: Record[]`: 显示的记录列表
- `loading?: boolean`: 加载状态
- `selectionMode?: boolean`: 是否启用选择模式
**Events**
- `@preview(item: Record)`: 预览项目
- `@edit(item: Record)`: 编辑项目
- `@delete(item: Record)`: 删除项目
- `@selection-change(ids: Set<string>)`: 选择变化
- `@load-more()`: 加载更多
### ImagePreview 组件
**Props**
- `visible: boolean`: 是否显示
- `items: Record[]`: 预览的记录列表
- `currentIndex?: number`: 当前索引
**Events**
- `@update:visible(value: boolean)`: 更新显示状态
- `@update:currentIndex(value: number)`: 更新当前索引
- `@edit(item: Record)`: 编辑项目
- `@delete(item: Record)`: 删除项目
### BatchActions 组件
**Props**
- `selectedItems: Record[]`: 选中的记录列表
- `totalCount?: number`: 总记录数
**Events**
- `@clear-selection()`: 清除选择
- `@batch-upload(items: Record[])`: 批量上传
- `@batch-download(items: Record[])`: 批量下载
- `@batch-delete(items: Record[])`: 批量删除
- `@batch-update(items: Record[], data: any)`: 批量更新
- `@export(items: Record[], format: string, options: any)`: 导出
## 样式定制
组件使用 CSS 变量支持主题定制:
```css
:root {
--primary-color: #2563eb;
--primary-light: #eff6ff;
--danger-color: #ef4444;
--bg-primary: #ffffff;
--bg-secondary: #f9fafb;
--bg-tertiary: #f3f4f6;
--border-color: #e5e7eb;
--text-primary: #111827;
--text-secondary: #6b7280;
--text-muted: #9ca3af;
}
```
## 性能优化
1. **虚拟滚动**
- 大量记录时自动启用虚拟滚动
- 只渲染可见区域的项目
2. **图片懒加载**
- 使用原生 `loading="lazy"` 属性
- 缩略图优先加载
3. **防抖搜索**
- 搜索输入防抖 300ms
- 减少不必要的筛选计算
4. **分页加载**
- 默认每页 20 条记录
- 滚动到底部自动加载下一页
## 注意事项
1. **权限要求**
- 下载功能需要文件访问权限
- 剪贴板功能需要剪贴板权限
2. **浏览器兼容性**
- 建议使用现代浏览器Chrome、Firefox、Edge
- IE 不支持
3. **内存管理**
- 大量图片时注意内存占用
- 建议定期清理旧记录
## 扩展开发
### 添加自定义导出格式
```typescript
// 在 utils/export.ts 中添加
export async function exportToCustom(
records: Record[],
options: ExportOptions = {}
): Promise<ExportResult> {
// 实现自定义导出逻辑
return {
success: true,
file: blob,
filename: 'export.custom',
};
}
```
### 添加批量操作
```typescript
// 在 api/batch.ts 中添加
export async function batchCustomOperation(
ids: string[],
params: any
): Promise<void> {
// 实现批量操作逻辑
}
```
## 故障排除
### 问题:图片无法加载
**解决方案**
1. 检查文件路径是否正确
2. 确认文件访问权限
3. 查看浏览器控制台错误信息
### 问题:搜索无结果
**解决方案**
1. 确认搜索关键词正确
2. 检查筛选条件是否过于严格
3. 尝试清除部分筛选条件
### 问题:导出失败
**解决方案**
1. 确认选择了导出格式
2. 检查浏览器下载权限
3. 尝试减小导出数据量
## 更新日志
### v1.0.0 (2025-02-12)
- ✅ 实现图库网格视图
- ✅ 实现图片预览模态框
- ✅ 实现搜索与筛选功能
- ✅ 实现批量操作
- ✅ 实现导出功能JSON/CSV/ZIP/报告)