From 219da2b134612d61707faf5e88acefe01c834ca2 Mon Sep 17 00:00:00 2001 From: empty Date: Mon, 12 Jan 2026 01:54:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20SVG=20=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E7=B3=BB=E7=BB=9F=E6=9B=BF=E4=BB=A3=20emoji?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **新增内容**: - BaseIcon.vue: 基础图标组件 - IconLibrary.vue: 图标库组件,包含 40+ 常用图标 - ICON_SYSTEM.md: 图标系统使用指南 - COMPONENT_REDESIGN_EXAMPLES.md: 组件重设计示例文档 **图标覆盖范围** (40+ 图标): - 写作相关: edit, file-text, document, article - 数据素材: database, folder, chart - 设置工具: settings, gear - 操作: save, copy, trash, delete, close, check - 导航: home, menu, sidebar - 搜索筛选: search, filter - 状态通知: warning, error, info, success - 分析比较: compare, analysis, sparkles - 时间历史: history, clock - 添加移除: add, plus, minus, expand, collapse - 其他: download, upload, refresh, loading, list **设计原则**: - 使用 SVG stroke 图标,统一视觉风格 - 图标继承父元素颜色 (currentColor) - 支持 16-48px 尺寸范围 - 完全替代 emoji,提升专业性 **使用方式**: ```vue ``` **后续任务**: - [ ] 逐个组件迁移,移除 61 处 emoji - [ ] 应用统一的按钮样式 - [ ] 优化交互反馈 - [ ] 测试响应式布局 Co-Authored-By: Claude --- docs/COMPONENT_REDESIGN_EXAMPLES.md | 424 +++++++++++++++++++++++++++ docs/ICON_SYSTEM.md | 230 +++++++++++++++ src/components/BaseIcon.vue | 45 +++ src/components/icons/IconLibrary.vue | 234 +++++++++++++++ 4 files changed, 933 insertions(+) create mode 100644 docs/COMPONENT_REDESIGN_EXAMPLES.md create mode 100644 docs/ICON_SYSTEM.md create mode 100644 src/components/BaseIcon.vue create mode 100644 src/components/icons/IconLibrary.vue diff --git a/docs/COMPONENT_REDESIGN_EXAMPLES.md b/docs/COMPONENT_REDESIGN_EXAMPLES.md new file mode 100644 index 0000000..da0e32e --- /dev/null +++ b/docs/COMPONENT_REDESIGN_EXAMPLES.md @@ -0,0 +1,424 @@ +# 组件 UI 重新设计示例 + +本文档展示如何将现有组件中的 emoji 替换为 SVG 图标,并应用更专业的设计风格。 + +## 示例 1: GlobalSidebar.vue + +### Before + +```vue + + + +``` + +### After + +```vue + + + + + +``` + +## 示例 2: DocumentsPanel.vue + +### Before + +```vue + +``` + +### After + +```vue + + + + + +``` + +## 示例 3: MainContent.vue 工具栏 + +### Before + +```vue + +``` + +### After + +```vue + + + + + +``` + +## 示例 4: 状态指示器 + +### Before + +```vue + +``` + +### After + +```vue + + + + + +``` + +## 示例 5: 空状态提示 + +### Before + +```vue + + + +``` + +### After + +```vue + + + + + +``` + +## 设计原则总结 + +### 1. 一致的间距系统 +- 使用 `gap` 属性设置图标和文字的间距 +- 推荐间距:`var(--space-2)` (8px) + +### 2. 语义化颜色 +- 主要操作:`var(--accent-primary)` +- 成功状态:`var(--accent-success)` +- 警告状态:`var(--accent-warning)` +- 危险操作:`var(--accent-danger)` + +### 3. 交互反馈 +- 所有可点击元素添加 `transition` +- hover 状态使用 `var(--bg-elevated)` 背景变化 +- 添加适当的 `border-radius` + +### 4. 图标尺寸规范 +- 按钮内图标:16px +- 标题/标签图标:18-20px +- 大型展示图标:24-48px + +### 5. 对齐方式 +- 使用 `display: flex` +- `align-items: center` 确保垂直居中 +- 图标添加 `flex-shrink: 0` 防止被压缩 + +## 迁移检查清单 + +在完成每个组件的迁移后,请确认: + +- [ ] 移除所有 emoji 字符 +- [ ] 导入 `IconLibrary` 组件 +- [ ] 图标名称符合语义 +- [ ] 图标尺寸合适 +- [ ] 图标和文字正确对齐 +- [ ] hover 状态有视觉反馈 +- [ ] 颜色使用设计令牌 +- [ ] 间距符合设计系统 +- [ ] 添加必要的 `aria-label` +- [ ] 测试响应式布局 diff --git a/docs/ICON_SYSTEM.md b/docs/ICON_SYSTEM.md new file mode 100644 index 0000000..deb1446 --- /dev/null +++ b/docs/ICON_SYSTEM.md @@ -0,0 +1,230 @@ +# 图标系统使用指南 + +## 概述 + +本项目使用 SVG 图标替代 emoji,提供更专业、统一的视觉体验。 + +## 使用方法 + +### 方式一:使用 IconLibrary 组件(推荐) + +```vue + + + +``` + +### 方式二:直接使用 SVG + +```vue + +``` + +## 可用图标列表 + +### 写作相关 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `edit` | 编辑/写作 | ✏️ | +| `file-text` | 文档 | 📄 | +| `document` | 文件 | 📝 | +| `article` | 文章 | 📰 | +| `format-text` | 文本格式 | 📃 | + +### 数据和素材 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `database` | 数据库 | 🗄️ | +| `folder` | 文件夹 | 📁 | +| `chart` | 图表 | 📊 | + +### 设置和工具 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `settings` | 设置 | ⚙️ | +| `gear` | 齿轮 | 🔧 | + +### 操作 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `save` | 保存 | 💾 | +| `copy` | 复制 | 📋 | +| `trash` | 删除 | 🗑️ | +| `delete` | 删除 | ❌ | +| `close` | 关闭 | ✕ | +| `check` | 确认 | ✅ | + +### 导航 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `home` | 首页 | 🏠 | +| `menu` | 菜单 | 📋 | +| `sidebar` | 侧边栏 | 📂 | + +### 搜索和筛选 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `search` | 搜索 | 🔍 | +| `filter` | 筛选 | 🔎 | + +### 状态和通知 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `warning` | 警告 | ⚠️ | +| `error` | 错误 | ❌ | +| `info` | 信息 | ℹ️ | +| `success` | 成功 | ✅ | + +### 分析和比较 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `compare` | 对比 | ⚖️ | +| `analysis` | 分析 | 📈 | +| `sparkles` | AI/魔法 | ✨ | + +### 时间和历史 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `history` | 历史 | 🕐 | +| `clock` | 时间 | ⏰ | + +### 添加和移除 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `add` / `plus` | 添加 | ➕ | +| `minus` | 减少 | ➖ | +| `expand` | 展开 | ⬇️ | +| `collapse` | 折叠 | ⬆️ | + +### 其他 +| 图标名称 | 说明 | 替代的 emoji | +|---------|------|-------------| +| `download` | 下载 | 📥 | +| `upload` | 上传 | 📤 | +| `refresh` | 刷新 | 🔄 | +| `loading` | 加载中 | ⏳ | +| `list` | 列表 | 📋 | + +## 迁移示例 + +### Before (使用 emoji) + +```vue + + +
+ ⚙️ 设置 +
+``` + +### After (使用 SVG 图标) + +```vue + + +
+ + 设置 +
+``` + +## 样式建议 + +### 图标尺寸 + +```css +/* 按钮内图标 */ +.btn-icon { size: 16px; } + +/* 标题图标 */ +.title-icon { size: 20px; } + +/* 大图标 */ +.large-icon { size: 24px; } +``` + +### 图标间距 + +```vue + + +``` + +### 图标颜色 + +图标默认使用 `currentColor`,会继承父元素的 `color` 属性: + +```css +/* 主要操作图标 */ +.btn-primary .icon { + color: var(--accent-primary); +} + +/* 危险操作图标 */ +.btn-danger .icon { + color: var(--accent-danger); +} +``` + +## 添加新图标 + +如果需要添加新图标,请按以下步骤: + +1. 在 `IconLibrary.vue` 的 `icons` 对象中添加新图标 +2. 提供 SVG path 数据 +3. 更新此文档 + +```javascript +'your-icon': { + paths: ['M12 2L2 22h20L12 2z'], // 示例 path + viewBox: '0 0 24 24' +} +``` + +## 注意事项 + +1. **一致性**:在整个应用中使用相同的图标系统 +2. **语义化**:选择符合用户预期的图标 +3. **尺寸**:保持相近场景的图标尺寸一致 +4. **对齐**:使用 `flex` 布局确保图标与文本正确对齐 +5. **可访问性**:为图标提供 `aria-label` 或配合文字使用 + +```vue + + + + + +``` diff --git a/src/components/BaseIcon.vue b/src/components/BaseIcon.vue new file mode 100644 index 0000000..0f81b68 --- /dev/null +++ b/src/components/BaseIcon.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/components/icons/IconLibrary.vue b/src/components/icons/IconLibrary.vue new file mode 100644 index 0000000..1579425 --- /dev/null +++ b/src/components/icons/IconLibrary.vue @@ -0,0 +1,234 @@ + + +