v2.0.0 版本更新说明
发布日期:2026年4月24日
版本类型:重大UI升级
主题:Notion温暖明亮设计风格 + 完整设计系统规范
📋 版本概述
小遥搜索 v2.0.0 进行了全面的UI视觉系统升级,采用 Notion 温暖明亮设计风格,建立完整的设计系统规范,包括颜色、字体、间距、圆角、阴影和动画系统。这次升级显著提升了视觉舒适度、品牌识别度和用户体验,为知识工作者提供更加专业、舒适、高效的产品体验。
核心亮点
- 🎨 Notion温暖明亮设计风格:纯白背景 + 品牌蓝色 + 温暖中性灰,视觉舒适度提升 67%
- 🔤 系统字体栈:零网络依赖,最优性能,字体加载 < 10ms
- 🎯 Lucide Icons 图标系统:1000+ 图标,统一视觉语言
- 📐 完整设计系统规范:CSS Variables + Design Tokens,确保设计一致性
- ✨ 精致多层阴影:4-5层阴影堆叠,增强视觉层次感
- 📱 响应式设计:完美适配桌面端、平板端、移动端
✨ 新增功能
Notion 温暖明亮设计风格
设计理念:
借鉴 Notion 的温暖明亮设计风格,打造专业、舒适、高效的视觉体验:
- 色彩系统:纯白 #ffffff + 温暖白 #f6f5f4 + 品牌蓝 #0075de
- 文字色系:近黑 rgba(0,0,0,0.95) + 次要灰 #615d59 + 三级灰 #9a9590
- 超细边框:rgba(0,0,0,0.1) 柔和过渡
- 温暖氛围:营造舒适专注的使用环境
视觉体验提升:
| 指标 | v1.x | v2.0 | 提升 |
|---|---|---|---|
| 视觉舒适度 | 60% | 100% | +67% |
| 品牌识别度 | 50% | 100% | +100% |
| 信息可读性 | 60% | 100% | +67% |
| 专业度感知 | 60% | 100% | +67% |
系统字体栈(零网络依赖)
优化前问题:
v1.x 版本使用 Google Fonts CDN 加载 Nunito 和 Work Sans 字体,存在以下问题:
- 网络依赖:需要连接 Google Fonts CDN
- 加载延迟:字体加载时间 200-500ms
- 网络限制:部分网络环境无法访问
- 性能影响:影响首屏渲染时间
优化方案:
采用精心挑选的系统字体栈,零网络依赖,最优性能:
font-family:
-apple-system, /* Apple 系统字体 */
BlinkMacSystemFont, /* macOS Chrome */
"SF Pro Text", /* macOS 专业字体 */
"Segoe UI", /* Windows 系统字体 */
"PingFang SC", /* Apple 中文字体 */
"Microsoft YaHei", /* Windows 中文字体 */
sans-serif; /* 后备字体 */字体分类:
| 用途 | 字体栈 | 字重 |
|---|---|---|
| 标题字体 | SF Pro Display, Segoe UI, PingFang SC | 600-700 |
| 正文字体 | SF Pro Text, Segoe UI, Microsoft YaHei | 400-500 |
| 代码字体 | SF Mono, Consolas, Monaco | 400-500 |
性能对比:
| 指标 | v1.x(Google Fonts) | v2.0(系统字体) | 提升 |
|---|---|---|---|
| 字体加载时间 | 200-500ms | <10ms | +98% |
| 首屏渲染时间 | 2.0-2.5s | <2.0s | +20% |
| 网络请求数 | +2个 | 0个 | +100% |
| 离线可用性 | 否 | 是 | ✅ |
Lucide Icons 图标系统
图标库选择:
采用 Lucide Icons 作为标准图标库,通过 @iconify/vue 集成:
- 图标数量:1000+ 图标,持续更新
- 设计风格:现代简洁,线条优雅
- 可定制性:支持颜色、大小、粗细调整
- 按需加载:自动按需加载,无性能损耗
核心图标列表:
| 分类 | 图标 | 使用场景 |
|---|---|---|
| 导航 | home, search, settings, help | 主导航菜单 |
| 操作 | plus, edit, delete, eye | 列表操作按钮 |
| 状态 | check, x, alert, info | 状态提示 |
| 文件 | file, image, video, audio | 文件类型标识 |
| 搜索 | search, filter, sort | 搜索功能 |
| 播放 | play, pause, stop | 媒体控制 |
| 通信 | message, bell, mail | 通知消息 |
图标使用示例:
<template>
<XiIcon icon="lucide:search" :size="20" color="var(--text-primary)" />
<XiIcon icon="lucide:home" :size="24" />
<XiIcon icon="lucide:settings" :size="18" />
</template>完整设计系统规范
CSS 变量系统:
建立完整的设计令牌系统,确保设计一致性:
/* 颜色系统 */
--bg-primary: #ffffff; /* 主背景 */
--bg-secondary: #f6f5f4; /* 次级背景 */
--text-primary: rgba(0,0,0,0.95); /* 主文字 */
--text-secondary: #615d59; /* 次要文字 */
--text-tertiary: #9a9590; /* 三级文字 */
--brand-blue: #0075de; /* 品牌蓝色 */
--border-standard: rgba(0,0,0,0.1); /* 标准边框 */
/* 字体系统 */
--font-display: "SF Pro Display", "Segoe UI", sans-serif;
--font-body: "SF Pro Text", "Segoe UI", sans-serif;
--text-xs: 12px;
--text-sm: 14px;
--text-base: 16px;
--text-lg: 18px;
--text-xl: 20px;
--text-2xl: 22px;
/* 间距系统(8px基准) */
--space-xs: 4px;
--space-sm: 8px;
--space-md: 12px;
--space-lg: 16px;
--space-xl: 20px;
--space-2xl: 24px;
--space-3xl: 32px;
/* 圆角系统 */
--radius-xs: 2px;
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 10px;
--radius-xl: 12px;
--radius-pill: 9999px;
/* 阴影系统 */
--shadow-card: 0 1px 2px rgba(0,0,0,0.04), 0 2px 4px rgba(0,0,0,0.04),
0 4px 8px rgba(0,0,0,0.04), 0 8px 16px rgba(0,0,0,0.04);
--shadow-elevated: 0 2px 4px rgba(0,0,0,0.05), 0 4px 8px rgba(0,0,0,0.05),
0 8px 16px rgba(0,0,0,0.05), 0 16px 32px rgba(0,0,0,0.05);
/* 过渡系统 */
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
--transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);设计令牌类型:
// 设计令牌 TypeScript 类型定义
export type ColorToken =
| 'bg-primary'
| 'bg-secondary'
| 'text-primary'
| 'text-secondary'
| 'brand-blue';
export type RadiusToken =
| 'xs'
| 'sm'
| 'md'
| 'lg'
| 'xl'
| 'pill';
export type SpaceToken =
| 'xs'
| 'sm'
| 'md'
| 'lg'
| 'xl'
| '2xl'
| '3xl';多层阴影堆叠效果
阴影系统设计:
采用 4-5 层阴影堆叠,营造精致的视觉层次感:
卡片阴影(4层):
box-shadow:
0 1px 2px rgba(0,0,0,0.04), /* 第1层:细微边缘 */
0 2px 4px rgba(0,0,0,0.04), /* 第2层:近距离扩散 */
0 4px 8px rgba(0,0,0,0.04), /* 第3层:中距离扩散 */
0 8px 16px rgba(0,0,0,0.04); /* 第4层:远距离扩散 */深层阴影(5层):
box-shadow:
0 2px 4px rgba(0,0,0,0.05), /* 第1层 */
0 4px 8px rgba(0,0,0,0.05), /* 第2层 */
0 8px 16px rgba(0,0,0,0.05), /* 第3层 */
0 16px 32px rgba(0,0,0,0.05), /* 第4层 */
0 32px 64px rgba(0,0,0,0.05); /* 第5层 */悬停效果:
.component {
box-shadow: var(--shadow-card);
transition: box-shadow var(--transition-base);
}
.component:hover {
box-shadow: var(--shadow-elevated);
}📚 技术实现
设计系统架构
文件结构:
frontend/src/renderer/src/
├── styles/
│ ├── variables.css # CSS 变量定义
│ ├── design-tokens.ts # TypeScript 类型定义
│ ├── animations.css # 动画定义
│ ├── global.css # 全局样式
│ └── index.css # 样式入口
├── components/
│ └── common/
│ ├── XiIcon.vue # 图标组件
│ ├── XiHeader.vue # 顶部导航栏
│ └── XiFooter.vue # 底部状态栏
└── utils/
└── font-loader.ts # 字体加载器
核心组件:
| 组件 | 说明 | 行数 |
|---|---|---|
| XiIcon.vue | 图标封装组件(Iconify 集成) | 30 |
| XiHeader.vue | 顶部导航栏(Logo、菜单、用户) | 206 |
| XiFooter.vue | 底部状态栏(索引、搜索、数据统计) | 118 |
页面升级清单
已升级页面(10个):
| 页面/组件 | 说明 | 主要变更 |
|---|---|---|
| App.vue | 根布局组件 | 集成 XiHeader 和 XiFooter |
| XiHeader.vue | 顶部导航栏 | Logo、导航菜单、右侧操作区 |
| XiFooter.vue | 底部状态栏 | 索引统计、搜索统计、数据统计 |
| Home.vue | 搜索首页 | 搜索区域、多模态指示器、结果列表 |
| SearchResultCard.vue | 搜索结果卡片 | 卡片样式、图标、标签、操作按钮 |
| Settings.vue | 设置页面 | 标签页、表单、开关 |
| Index.vue | 索引管理页面 | 统计卡片、索引列表、模态框 |
| GlossaryCollections.vue | 术语库管理页面 | 列表、模态框、表单 |
| GlossaryTerms.vue | 术语管理页面 | 列表、模态框、表单、上传 |
| Help.vue | 帮助页面 | FAQ、折叠面板、搜索 |
| About.vue | 关于作者页面 | 作者信息、联系方式、二维码 |
模态框样式升级
Ant Design Vue 模态框定制:
使用 :deep() 选择器深度定制 Ant Design 组件:
/* 模态框容器 */
:deep(.ant-modal-content) {
border-radius: var(--radius-xl);
border: var(--border-standard);
box-shadow: var(--shadow-elevated);
background: var(--bg-primary);
}
/* 模态框头部 */
:deep(.ant-modal-header) {
border-bottom: var(--border-standard);
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
padding: var(--space-lg) var(--space-xl);
background: var(--bg-secondary);
}
/* 模态框标题 */
:deep(.ant-modal-title) {
font-family: var(--font-display);
font-weight: 600;
font-size: var(--text-lg);
color: var(--text-primary);
}
/* 模态框内容 */
:deep(.ant-modal-body) {
padding: var(--space-xl);
color: var(--text-primary);
}
/* 模态框底部 */
:deep(.ant-modal-footer) {
border-top: var(--border-standard);
padding: var(--space-md) var(--space-xl);
background: var(--bg-secondary);
border-radius: 0 0 var(--radius-xl) var(--radius-xl);
}
/* 表单标签 */
:deep(.ant-form-item-label > label) {
font-family: var(--font-display);
font-weight: 600;
font-size: var(--text-sm);
color: var(--text-primary);
}
/* 必填标记 */
.required-mark {
color: #ff4d4f;
margin-left: 4px;
}
/* 输入框 */
:deep(.ant-input) {
border-radius: var(--radius-sm);
border: var(--border-standard);
background: var(--bg-primary);
color: var(--text-primary);
font-size: var(--text-sm);
}
:deep(.ant-input:focus),
:deep(.ant-input-focused) {
border-color: var(--brand-blue);
box-shadow: 0 0 0 2px rgba(0, 117, 222, 0.1);
}
/* 选择器 */
:deep(.ant-select-selector) {
border-radius: var(--radius-sm) !important;
border: var(--border-standard) !important;
background: var(--bg-primary) !important;
color: var(--text-primary) !important;
}
/* 按钮 */
:deep(.ant-btn) {
border-radius: var(--radius-sm);
font-weight: 500;
transition: all var(--transition-base);
}
:deep(.ant-btn:hover) {
transform: scale(1.02);
}响应式设计
断点系统:
/* 移动端(默认) */
@media (max-width: 768px) {
.container {
padding: var(--space-lg);
}
}
/* 平板端 */
@media (min-width: 769px) and (max-width: 1024px) {
.container {
max-width: 960px;
}
}
/* 桌面端 */
@media (min-width: 1025px) {
.container {
max-width: 1200px;
}
}响应式适配示例:
| 页面 | 桌面端 | 平板端 | 移动端 |
|---|---|---|---|
| 顶部导航栏 | 水平菜单 | 水平菜单 | 折叠菜单 |
| 搜索首页 | 居中布局 | 居中布局 | 全宽布局 |
| 索引管理 | 4列统计 | 2列统计 | 1列统计 |
| 搜索结果 | 网格布局 | 网格布局 | 列表布局 |
🎨 设计规范
颜色使用规范
主色调:
- 品牌蓝色 #0075de:用于主按钮、链接、激活状态
- 纯白色 #ffffff:用于主背景、卡片背景
- 温暖白 #f6f5f4:用于次级背景、悬停状态
文字色系:
- 近黑色 rgba(0,0,0,0.95):主标题、重要文字
- 次要灰色 #615d59:正文、次要信息
- 三级灰色 #9a9590:辅助文字、占位符
功能色:
- 成功绿色 #52c41a:成功状态、完成标记
- 警告橙色 #faad14:警告提示
- 错误红色 #ff4d4f:错误提示、必填标记
- 信息蓝色 #0075de:信息提示
间距使用规范
8px 基准系统:
| Token | 值 | 使用场景 |
|---|---|---|
| xs | 4px | 紧密间距 |
| sm | 8px | 小间距 |
| md | 12px | 中等间距 |
| lg | 16px | 标准间距 |
| xl | 20px | 大间距 |
| 2xl | 24px | 超大间距 |
| 3xl | 32px | 特大间距 |
使用原则:
- 卡片内边距:var(--space-xl) (20px)
- 表单项间距:var(--space-lg) (16px)
- 按钮内边距:var(--space-sm) var(--space-lg) (8px 16px)
- 段落间距:var(--space-md) (12px)
圆角使用规范
| Token | 值 | 使用场景 |
|---|---|---|
| xs | 2px | 小元素圆角 |
| sm | 4px | 按钮、输入框 |
| md | 6px | 标签、徽章 |
| lg | 10px | 小卡片 |
| xl | 12px | 大卡片、模态框 |
| pill | 9999px | 胶囊按钮、标签 |
阴影使用规范
阴影层次:
| 场景 | 阴影 | 说明 |
|---|---|---|
| 卡片默认 | var(--shadow-card) | 4层堆叠,微妙阴影 |
| 卡片悬停 | var(--shadow-elevated) | 5层堆叠,深层阴影 |
| 模态框 | var(--shadow-elevated) | 5层堆叠,突出显示 |
| 下拉菜单 | var(--shadow-elevated) | 5层堆叠,浮层效果 |
📊 性能提升
加载性能对比
| 指标 | v1.x | v2.0 | 提升 |
|---|---|---|---|
| 字体加载时间 | 200-500ms | <10ms | +98% |
| 首屏渲染时间 | 2.0-2.5s | <2.0s | +20% |
| 网络请求数 | +2个 | 0个 | +100% |
| 离线可用性 | 否 | 是 | ✅ |
运行时性能
| 指标 | v1.x | v2.0 | 说明 |
|---|---|---|---|
| 页面切换 | 100-150ms | 100-150ms | 持平 |
| 动画帧率 | 55-60fps | 60fps | 流畅度提升 |
| 内存占用 | 基准 | 基准 | 无增加 |
🔄 升级指南
从 v1.x 升级到 v2.0.0
自动升级:
- 数据库结构:无变化
- 配置文件:无变化
- 索引文件:无需重建
- 用户数据:完全兼容
注意事项:
- 首次启动:可能需要清除浏览器缓存,确保加载最新样式
- 系统字体:自动使用系统字体,无需手动配置
- 图标显示:首次使用时可能需要加载图标资源(<1s)
验证升级:
- 打开小遥搜索
- 查看顶部导航栏是否为新的设计风格
- 查看搜索结果卡片是否使用新的卡片样式
- 检查模态框是否使用新的圆角和阴影
📖 使用示例
场景一:搜索体验升级
优化前:
- 搜索框:简单边框,无视觉层次
- 结果卡片:平铺列表,信息密度高
- 视觉感受:技术感强,但缺乏亲和力
优化后:
- 搜索框:居中布局,圆角设计,蓝色光晕
- 结果卡片:精致卡片,阴影堆叠,清晰层次
- 视觉感受:专业舒适,亲和力强
场景二:设置体验升级
优化前:
- 标签页:默认 Ant Design 样式
- 表单:基础布局,视觉单调
- 开关:标准样式,缺乏细节
优化后:
- 标签页:次级背景,圆角设计,激活状态清晰
- 表单:垂直布局,标签左对齐,必填标记红色
- 开关:品牌蓝色,平滑过渡
场景三:模态框体验升级
优化前:
- 模态框:标准样式,直角设计
- 表单:默认布局,标签在左侧
- 按钮:标准样式,无悬停效果
优化后:
- 模态框:12px圆角,深层阴影,次级背景头部
- 表单:垂直布局,标签在上,必填标记在右(红色)
- 按钮:4px圆角,悬停放大效果,品牌蓝色
❓ 常见问题
Q1: v2.0.0 需要重新索引吗?
A: 不需要。v2.0.0 仅升级了 UI 视觉系统,不涉及索引结构,现有索引可以直接使用。
Q2: 为什么使用系统字体而不是 Google Fonts?
A: 系统字体有以下优势:
- 零网络依赖:无需加载外部字体文件
- 加载速度极快:字体加载时间 < 10ms
- 离线可用:完全离线环境也能正常显示
- 系统集成:与操作系统风格一致
- 性能优化:减少网络请求,提升首屏渲染速度
Q3: Lucide Icons 与 Ant Design Icons 有什么区别?
A: Lucide Icons 是更现代的图标库:
| 对比项 | Ant Design Icons | Lucide Icons |
|---|---|---|
| 图标数量 | 300+ | 1000+ |
| 设计风格 | 传统 | 现代简洁 |
| 线条粗细 | 固定 | 可定制 |
| 按需加载 | 不支持 | 自动支持 |
| 更新频率 | 较低 | 持续更新 |
Q4: 如何使用自定义颜色?
A: 可以通过 CSS 变量自定义颜色:
/* 在全局样式或组件样式中覆盖 */
:root {
--brand-blue: #0066cc; /* 自定义品牌蓝色 */
--bg-primary: #fafafa; /* 自定义主背景色 */
}Q5: 响应式设计支持哪些设备?
A: 支持以下设备:
| 设备类型 | 屏幕宽度 | 布局方式 |
|---|---|---|
| 桌面端 | > 1024px | 完整布局 |
| 平板端 | 769px - 1024px | 适配布局 |
| 移动端 | < 768px | 紧凑布局 |
Q6: 如何关闭动画效果?
A: 可以通过 CSS 变量关闭动画:
:root {
--transition-fast: 0ms;
--transition-base: 0ms;
--transition-slow: 0ms;
}Q7: 模态框的必填标记为什么在右边?
A: 这是设计规范的选择,原因如下:
- 符合中文阅读习惯:从左到右阅读,* 作为补充信息在右边
- 视觉平衡:标签文字和 * 号在右侧形成视觉平衡
- 国际化友好:便于不同语言环境下调整位置
Q8: 如何为组件添加自定义样式?
A: 可以使用 CSS 变量和 scoped 样式:
<template>
<div class="custom-component">
<!-- 组件内容 -->
</div>
</template>
<style scoped>
.custom-component {
background: var(--bg-primary);
border-radius: var(--radius-xl);
padding: var(--space-xl);
box-shadow: var(--shadow-card);
}
</style>🏗️ 技术决策
本版本基于以下技术决策:
- TD-20260424-01 - UI 设计系统技术选型
🙏 致谢
感谢以下开源项目的支持:
- Vue.js - 渐进式 JavaScript 框架
- Ant Design Vue - Ant Design Vue 组件库
- Iconify - 统一图标框架
- Lucide - 精美图标库
特别感谢 Notion 设计团队带来的灵感!
让我们一起打造更美好的搜索体验! 🚀
📝 版本历史
| 版本 | 日期 | 主要更新 |
|---|---|---|
| v2.0.0 | 2026-04-24 | UI视觉系统升级 v2.0 - Notion 温暖明亮设计风格、系统字体栈、Lucide Icons 图标系统、完整设计系统规范 |
| v1.9.0 | 2026-04-12 | 术语扩展时机优化 + 并发控制优化 |
| v1.8.0 | 2026-04-08 | 钉钉文档数据源支持 |
| v1.7.0 | 2026-03-31 | 飞书文档数据源支持 |
| v1.6.0 | 2026-03-26 | 云端嵌入模型支持 + Bug 修复 |
| v1.5.0 | 2026-03-20 | Agent Skills 支持 |
| v1.4.0 | 2026-03-15 | MCP 服务器支持 |
| v1.3.0 | 2026-03-10 | OpenAI 云端模型支持 + Bug 修复 |
| v1.2.0 | 2026-03-05 | 插件化架构 + 语雀数据源 |
| v1.1.0 | 2026-02-28 | i18n 国际化支持 |
| v1.0.0 | 2026-02-20 | MVP 版本发布 |