Files
cutThink_lite/docs/GALLERY_USAGE.md
Claude e2ea309ee6 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>
2026-02-12 18:59:26 +08:00

350 lines
7.4 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.
# 图库视图使用指南
## 概述
图库视图是 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/报告)