完整实现 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>
7.4 KiB
7.4 KiB
图库视图使用指南
概述
图库视图是 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 分隔符
组件使用示例
基础使用
<script setup lang="ts">
import { GalleryView } from '@/components/views/gallery';
</script>
<template>
<GalleryView />
</template>
自定义使用
<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>
导出功能使用
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 变量支持主题定制:
: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;
}
性能优化
-
虚拟滚动
- 大量记录时自动启用虚拟滚动
- 只渲染可见区域的项目
-
图片懒加载
- 使用原生
loading="lazy"属性 - 缩略图优先加载
- 使用原生
-
防抖搜索
- 搜索输入防抖 300ms
- 减少不必要的筛选计算
-
分页加载
- 默认每页 20 条记录
- 滚动到底部自动加载下一页
注意事项
-
权限要求
- 下载功能需要文件访问权限
- 剪贴板功能需要剪贴板权限
-
浏览器兼容性
- 建议使用现代浏览器(Chrome、Firefox、Edge)
- IE 不支持
-
内存管理
- 大量图片时注意内存占用
- 建议定期清理旧记录
扩展开发
添加自定义导出格式
// 在 utils/export.ts 中添加
export async function exportToCustom(
records: Record[],
options: ExportOptions = {}
): Promise<ExportResult> {
// 实现自定义导出逻辑
return {
success: true,
file: blob,
filename: 'export.custom',
};
}
添加批量操作
// 在 api/batch.ts 中添加
export async function batchCustomOperation(
ids: string[],
params: any
): Promise<void> {
// 实现批量操作逻辑
}
故障排除
问题:图片无法加载
解决方案:
- 检查文件路径是否正确
- 确认文件访问权限
- 查看浏览器控制台错误信息
问题:搜索无结果
解决方案:
- 确认搜索关键词正确
- 检查筛选条件是否过于严格
- 尝试清除部分筛选条件
问题:导出失败
解决方案:
- 确认选择了导出格式
- 检查浏览器下载权限
- 尝试减小导出数据量
更新日志
v1.0.0 (2025-02-12)
- ✅ 实现图库网格视图
- ✅ 实现图片预览模态框
- ✅ 实现搜索与筛选功能
- ✅ 实现批量操作
- ✅ 实现导出功能(JSON/CSV/ZIP/报告)