Files
cutThink_lite/docs/GALLERY_USAGE.md

350 lines
7.4 KiB
Markdown
Raw Permalink Normal View History

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