完整实现 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>
334 lines
6.8 KiB
Markdown
334 lines
6.8 KiB
Markdown
# CutThink Lite - UI 框架文档
|
|
|
|
## 概述
|
|
|
|
CutThink Lite 的 UI 框架提供了一套完整的 CSS 变量系统和可复用的 JavaScript 组件。
|
|
|
|
## CSS 变量系统
|
|
|
|
### 颜色变量
|
|
|
|
```css
|
|
/* 品牌色 */
|
|
--primary: #8B6914;
|
|
--primary-hover: #A67C00;
|
|
--primary-light: #F5E6C8;
|
|
--primary-dark: #6B520F;
|
|
|
|
/* 功能色 */
|
|
--danger: #EF4444;
|
|
--success: #10B981;
|
|
--warning: #F59E0B;
|
|
--info: #3B82F6;
|
|
|
|
/* 背景色 */
|
|
--bg-primary: #FFFFFF;
|
|
--bg-secondary: #F8F9FA;
|
|
--bg-tertiary: #E5E7EB;
|
|
--bg-sidebar: #FFFFFF;
|
|
|
|
/* 文本色 */
|
|
--text-primary: #1F2937;
|
|
--text-secondary: #6B7280;
|
|
--text-muted: #9CA3AF;
|
|
```
|
|
|
|
### 间距系统
|
|
|
|
```css
|
|
--spacing-xs: 4px;
|
|
--spacing-sm: 8px;
|
|
--spacing-md: 12px;
|
|
--spacing-lg: 16px;
|
|
--spacing-xl: 20px;
|
|
--spacing-2xl: 24px;
|
|
--spacing-3xl: 32px;
|
|
--spacing-4xl: 40px;
|
|
```
|
|
|
|
### 圆角
|
|
|
|
```css
|
|
--radius-xs: 4px;
|
|
--radius-sm: 6px;
|
|
--radius-md: 8px;
|
|
--radius-lg: 12px;
|
|
--radius-xl: 16px;
|
|
--radius-full: 9999px;
|
|
```
|
|
|
|
### 阴影
|
|
|
|
```css
|
|
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
|
```
|
|
|
|
## JavaScript 组件
|
|
|
|
### 1. Layout 布局组件
|
|
|
|
```javascript
|
|
import { Layout } from '@/components/shared/Layout.js'
|
|
|
|
const layout = new Layout({
|
|
header: true,
|
|
sidebar: true,
|
|
headerOptions: {
|
|
title: 'CutThink Lite',
|
|
version: 'v0.1.0',
|
|
searchable: true,
|
|
actions: [
|
|
{ icon: '⚙️', title: '设置', onClick: () => {} }
|
|
]
|
|
},
|
|
sidebarOptions: {
|
|
sections: [
|
|
{
|
|
title: '主要功能',
|
|
items: [
|
|
{ id: 'screenshot', icon: '📷', label: '截图', active: true },
|
|
{ id: 'gallery', icon: '🖼️', label: '图库' }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
})
|
|
|
|
document.getElementById('app').appendChild(layout.render())
|
|
```
|
|
|
|
### 2. Button 按钮组件
|
|
|
|
```javascript
|
|
import { Button } from '@/components/shared/Button.js'
|
|
|
|
const button = new Button({
|
|
text: '点击我',
|
|
icon: '✓',
|
|
variant: 'primary', // primary, secondary, danger, success, ghost
|
|
size: 'md', // sm, md, lg
|
|
onClick: () => console.log('Clicked!')
|
|
})
|
|
|
|
document.body.appendChild(button.render())
|
|
```
|
|
|
|
### 3. Input 输入框组件
|
|
|
|
```javascript
|
|
import { Input } from '@/components/shared/Input.js'
|
|
|
|
const input = new Input({
|
|
label: '用户名',
|
|
placeholder: '请输入用户名',
|
|
required: true,
|
|
hint: '用户名长度为 4-20 个字符',
|
|
onChange: (value) => console.log(value)
|
|
})
|
|
|
|
document.body.appendChild(input.render())
|
|
```
|
|
|
|
### 4. Card 卡片组件
|
|
|
|
```javascript
|
|
import { Card } from '@/components/shared/Card.js'
|
|
|
|
const card = new Card({
|
|
title: '卡片标题',
|
|
icon: '📝',
|
|
content: '<p>这是卡片内容</p>',
|
|
actions: [
|
|
{ text: '编辑', onClick: () => {} },
|
|
{ text: '删除', onClick: () => {} }
|
|
]
|
|
})
|
|
|
|
document.body.appendChild(card.render())
|
|
```
|
|
|
|
### 5. Toast 通知组件
|
|
|
|
```javascript
|
|
import { Toast } from '@/components/shared/Toast.js'
|
|
|
|
// 显示不同类型的通知
|
|
Toast.success('成功', '操作已完成!')
|
|
Toast.danger('错误', '操作失败,请重试。')
|
|
Toast.warning('警告', '请注意检查输入。')
|
|
Toast.info('信息', '这是一条通知。')
|
|
|
|
// 自定义配置
|
|
Toast.show({
|
|
type: 'success',
|
|
title: '自定义标题',
|
|
message: '自定义消息',
|
|
duration: 5000
|
|
})
|
|
```
|
|
|
|
### 6. Modal 模态框组件
|
|
|
|
```javascript
|
|
import { Modal } from '@/components/shared/Modal.js'
|
|
|
|
// 创建模态框
|
|
const modal = new Modal({
|
|
title: '确认操作',
|
|
content: '<p>确定要执行此操作吗?</p>',
|
|
onConfirm: () => console.log('Confirmed'),
|
|
onCancel: () => console.log('Cancelled')
|
|
})
|
|
|
|
// 静态方法
|
|
Modal.confirm({
|
|
title: '删除确认',
|
|
content: '确定要删除这条记录吗?'
|
|
}).then(result => {
|
|
if (result) {
|
|
// 用户点击了确定
|
|
}
|
|
})
|
|
```
|
|
|
|
## CSS 类名
|
|
|
|
### 布局类
|
|
|
|
```html
|
|
<div class="app-container">
|
|
<header class="header">...</header>
|
|
<div class="main-container">
|
|
<aside class="sidebar">...</aside>
|
|
<main class="content-area">...</main>
|
|
</div>
|
|
</div>
|
|
```
|
|
|
|
### 按钮类
|
|
|
|
```html
|
|
<button class="btn btn-primary">主要按钮</button>
|
|
<button class="btn btn-secondary">次要按钮</button>
|
|
<button class="btn btn-danger">危险按钮</button>
|
|
<button class="btn btn-sm">小按钮</button>
|
|
<button class="btn btn-lg">大按钮</button>
|
|
<button class="btn btn-icon">✓</button>
|
|
```
|
|
|
|
### 表单类
|
|
|
|
```html
|
|
<div class="form-group">
|
|
<label class="form-label">标签</label>
|
|
<input type="text" class="input" placeholder="请输入...">
|
|
<div class="form-hint">提示信息</div>
|
|
<div class="form-error">错误信息</div>
|
|
</div>
|
|
```
|
|
|
|
### 卡片类
|
|
|
|
```html
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<div class="card-title">标题</div>
|
|
</div>
|
|
<div class="card-body">
|
|
内容...
|
|
</div>
|
|
<div class="card-footer">
|
|
底部...
|
|
</div>
|
|
</div>
|
|
```
|
|
|
|
### 工具类
|
|
|
|
```html
|
|
<!-- 间距 -->
|
|
<div class="mt-sm mb-md p-lg">间距工具类</div>
|
|
|
|
<!-- 文本 -->
|
|
<span class="text-sm text-muted">小号灰色文本</span>
|
|
<span class="font-semibold">半粗体</span>
|
|
|
|
<!-- Flex -->
|
|
<div class="flex items-center justify-between gap-md">
|
|
<span>左边</span>
|
|
<span>右边</span>
|
|
</div>
|
|
|
|
<!-- Grid -->
|
|
<div class="grid grid-cols-2">
|
|
<div>列 1</div>
|
|
<div>列 2</div>
|
|
</div>
|
|
```
|
|
|
|
## 响应式设计
|
|
|
|
框架包含完整的响应式支持:
|
|
|
|
- **桌面端**: 完整布局,侧边栏宽度 240px
|
|
- **平板端** (≤1024px): 侧边栏宽度 200px
|
|
- **移动端** (≤768px): 侧边栏变为底部导航栏
|
|
|
|
## 主题切换
|
|
|
|
```javascript
|
|
// 浅色主题
|
|
document.body.classList.add('theme-light')
|
|
|
|
// 深色主题
|
|
document.body.classList.add('theme-dark')
|
|
|
|
// 跟随系统(默认)
|
|
document.body.classList.remove('theme-light', 'theme-dark')
|
|
```
|
|
|
|
## 浏览器兼容性
|
|
|
|
- Chrome/Edge: 最新 2 个版本
|
|
- Firefox: 最新 2 个版本
|
|
- Safari: 最新 2 个版本
|
|
- 支持 CSS 变量
|
|
|
|
## 文件结构
|
|
|
|
```
|
|
src/components/shared/
|
|
├── Layout.js # 布局组件
|
|
├── Header.js # 头部组件
|
|
├── Sidebar.js # 侧边栏组件
|
|
├── Button.js # 按钮组件
|
|
├── Input.js # 输入框组件
|
|
├── Card.js # 卡片组件
|
|
├── Toast.js # 通知组件
|
|
├── Modal.js # 模态框组件
|
|
├── Loading.js # 加载组件
|
|
├── Notification.js # 通知组件
|
|
└── index.js # 入口文件
|
|
|
|
style.css # 全局样式(包含所有 CSS 变量和组件样式)
|
|
```
|
|
|
|
## 最佳实践
|
|
|
|
1. **使用 CSS 变量**: 所有颜色、间距、阴影都应使用 CSS 变量,方便主题切换
|
|
2. **组件复用**: 优先使用 JavaScript 组件而不是手动创建 DOM
|
|
3. **响应式优先**: 设计时要考虑移动端体验
|
|
4. **无障碍**: 使用语义化标签,添加适当的 aria 属性
|
|
5. **性能**: 避免频繁的 DOM 操作,使用事件委托
|
|
|
|
## 更新日志
|
|
|
|
### v0.1.0 (2025-02-12)
|
|
- 初始版本
|
|
- 实现 CSS 变量系统
|
|
- 创建基础布局组件
|
|
- 创建共享 UI 组件
|
|
- 实现响应式设计
|