# 用户界面
1. 目的与范围 #
本文档介绍Ragflow-Plus的前端用户界面组件和应用。系统提供多个不同的用户界面:基于React的主应用供终端用户使用,基于Vue.js的管理仪表盘供管理员使用,以及用于文档编写和知识库管理的专门界面。这些界面提供对RAG系统功能的全面访问,包括聊天功能、文档处理和系统管理。
关于为这些界面提供支持的后端API详情,请参阅 API参考。关于前端应用的部署配置,请参阅 部署与配置。
2. 界面架构概述 #
Ragflow-Plus实现了双前端架构,使用不同的技术栈服务于不同的用户角色和使用场景。
2.1 前端应用架构 #
┌─────────────────────────────────────────┐
│ 用户前端应用 (User Frontend) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │ 主应用 │ │ 聊天界面 │ │编写界面│ │
│ │ React+TS │ │ Chat UI │ │Write │ │
│ └──────────┘ └──────────┘ └──────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │知识库界面 │ │ 字体系统 │ │国际化│ │
│ │ KB UI │ │ Font │ │ I18n │ │
│ └──────────┘ └──────────┘ └──────┘ │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ 管理前端应用 (Admin Frontend) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │管理仪表盘 │ │Element │ │上传 │ │
│ │ Vue.js │ │Plus组件 │ │系统 │ │
│ └──────────┘ └──────────┘ └──────┘ │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ 共享基础设施 (Shared Infrastructure) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │国际化 │ │ 字体管理 │ │文件 │ │
│ │ I18n │ │ Font │ │上传 │ │
│ └──────────┘ └──────────┘ └──────┘ │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ 后端服务 (Backend Services) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │Ragflow │ │对话服务 │ │文件 │ │
│ │ API │ │Dialog API│ │API │ │
│ └──────────┘ └──────────┘ └──────┘ │
└─────────────────────────────────────────┘核心文件:
web/src/pages/chat/index.tsx- 主聊天界面web/src/pages/chat/chat-container/index.tsx- 聊天容器组件management/web/src/http/axios.ts- 管理API客户端api/apps/dialog_app.py- 对话服务API
2.2 组件交互流程 #
用户界面组件之间的交互流程:
chat/index.tsx participant MessageInput as MessageInput
message-input participant ChatContainer as ChatContainer
chat-container participant DialogAPI as DialogService
dialog_app.py participant RAGEngine as RAG Engine User->>ChatUI: 启动聊天会话 ChatUI->>DialogAPI: GET /api/v1/dialog/list DialogAPI-->>ChatUI: 对话列表响应 User->>MessageInput: 输入消息 MessageInput->>ChatContainer: handlePressEnter(documentIds, tempFileIds) ChatContainer->>DialogAPI: POST /api/v1/conversation/completion DialogAPI->>RAGEngine: 使用知识库处理 RAGEngine-->>DialogAPI: 生成的响应 DialogAPI-->>ChatContainer: 流式响应 ChatContainer-->>MessageInput: 显示响应
核心实现:
web/src/pages/chat/chat-container/index.tsx:1-129- 聊天容器组件web/src/pages/chat/index.tsx:1-438- 主聊天界面api/apps/dialog_app.py:30-112- 对话API实现
3. 主应用界面 #
主用户界面使用React和TypeScript构建,为聊天交互、文档管理和知识库访问提供集成体验。
3.1 聊天界面实现 #
聊天系统由多个关键组件协同工作,提供对话式RAG体验:
核心组件:
ChatIndex (
web/src/pages/chat/index.tsx)- 主聊天页面组件
- 管理对话列表和当前对话
- 处理路由和状态管理
ChatContainer (
web/src/pages/chat/chat-container/index.tsx)- 聊天消息容器
- 处理消息发送和接收
- 管理流式响应显示
MessageInput (
web/src/pages/chat/message-input/)- 消息输入组件
- 处理用户输入和附件
- 支持文件上传
MessageItem (
web/src/pages/chat/message-item/)- 消息显示组件
- 渲染用户和助手消息
- 显示引用和图像
AssistantSetting (
web/src/pages/chat/assistant-setting/)- 助手配置组件
- 管理对话参数
- 配置知识库选择
TestingControl (
web/src/pages/chat/testing-control/)- 测试控制组件
- 提供测试功能
- 调试工具
功能特性:
- 流式响应:支持Server-Sent Events (SSE)实时显示响应
- 多知识库:支持选择多个知识库进行检索
- 文件附件:支持上传文件作为对话上下文
- 消息历史:保存和加载对话历史
- 引用显示:显示回答的来源文档片段
3.2 文档编写界面 #
文档编写界面 (web/src/pages/write/) 提供AI辅助文档生成功能:
核心功能:
- 富文本编辑:支持Markdown和富文本编辑
- AI助手集成:在编写过程中使用AI助手
- 模板系统:提供文档模板
- 导出功能:支持多种格式导出
3.3 知识库界面 #
知识库管理界面 (web/src/pages/add-knowledge/) 提供知识库和文档管理:
核心功能:
- 知识库创建:创建和管理知识库
- 文档上传:上传和处理文档
- 文档列表:查看和管理文档
- 检索测试:测试知识库检索效果
3.4 字体大小管理系统 #
系统提供字体大小管理功能,允许用户自定义界面字体大小:
实现位置: web/src/utils/font-storage.ts
功能特性:
- 本地存储:使用localStorage保存用户偏好
- 全局应用:字体大小设置全局生效
- 持久化:设置在不同会话间保持
使用方法:
// 设置字体大小
setFontSize(size: string)
// 获取字体大小
getFontSize(): string4. 管理仪表盘 #
管理仪表盘使用Vue.js和TypeScript构建,为管理员提供系统管理功能。
4.1 管理界面架构 #
管理界面采用Vue 3 + Element Plus架构:
技术栈:
- 框架:Vue.js 3 + TypeScript
- UI组件库:Element Plus
- 路由:Vue Router
- 状态管理:Pinia(可选)
- HTTP客户端:Axios
目录结构:
management/web/src/
├── pages/ # 页面组件
│ ├── dashboard/ # 仪表盘
│ ├── user/ # 用户管理
│ ├── team/ # 团队管理
│ └── config/ # 配置管理
├── components/ # 公共组件
├── http/ # HTTP客户端
│ ├── axios.ts # 主API客户端
│ └── upload-axios.ts # 上传专用客户端
└── common/ # 公共工具
├── apis/ # API定义
└── composables/ # 组合式函数4.2 Element Plus组件集成 #
管理界面广泛使用Element Plus组件:
常用组件:
ElTable - 数据表格
- 用户列表
- 团队列表
- 知识库列表
ElDialog - 对话框
- 创建/编辑表单
- 确认对话框
- 详情查看
ElUpload - 文件上传
- 文档上传
- 图片上传
- 批量上传
ElForm - 表单
- 用户信息表单
- 配置表单
- 搜索表单
ElPagination - 分页
- 列表分页
- 数据分页
类型定义: management/web/types/auto/components.d.ts:1-62
4.3 文件上传系统 #
管理界面提供完整的文件上传功能:
核心文件:
management/web/src/common/composables/useFileUpload.ts- 文件上传组合式函数management/web/src/common/apis/files/upload.ts- 上传API定义management/web/src/http/upload-axios.ts- 上传专用HTTP客户端
功能特性:
- 多文件上传:支持同时上传多个文件
- 进度跟踪:显示上传进度
- 错误处理:处理上传错误
- 文件验证:验证文件类型和大小
使用方法:
const { upload, progress, error } = useFileUpload()
// 上传文件
await upload(file, {
onProgress: (progress) => {
console.log('Upload progress:', progress)
}
})4.4 HTTP客户端 #
管理界面使用Axios作为HTTP客户端:
核心文件: management/web/src/http/axios.ts:1-134
功能特性:
- 请求拦截器:添加认证token
- 响应拦截器:处理错误响应
- 错误处理:统一错误处理
- 类型安全:TypeScript类型定义
配置:
// 基础URL配置
baseURL: import.meta.env.VITE_API_BASE_URL
// 请求超时
timeout: 30000
// 请求拦截器
request.use((config) => {
// 添加token
config.headers.Authorization = `Bearer ${token}`
return config
})
// 响应拦截器
response.use(
(response) => response.data,
(error) => {
// 错误处理
return Promise.reject(error)
}
)5. 国际化支持 #
两个前端应用都支持国际化:
实现位置:
用户前端:
web/src/locales/zh.ts- 中文翻译en.ts- 英文翻译config.ts- 配置
管理前端:
management/web/src/locales/- 多语言支持
- 语言切换
功能特性:
- 多语言:支持中文和英文
- 动态切换:运行时切换语言
- 本地化:日期、数字格式本地化
6. 样式系统 #
6.1 用户前端样式 #
用户前端使用Less作为CSS预处理器:
核心文件: web/src/pages/chat/chat-container/index.less
样式特性:
- 响应式设计:适配不同屏幕尺寸
- 主题支持:支持深色/浅色主题
- 组件样式:组件级样式隔离
6.2 管理前端样式 #
管理前端使用Element Plus的默认样式系统:
样式特性:
- Element Plus主题:使用Element Plus默认主题
- 自定义样式:可自定义主题颜色
- 响应式布局:适配不同设备
7. 路由系统 #
7.1 用户前端路由 #
用户前端使用React Router:
路由配置: web/src/routes.ts:1-300
主要路由:
/chat- 聊天界面/write- 文档编写/add-knowledge- 知识库管理/user-setting- 用户设置
7.2 管理前端路由 #
管理前端使用Vue Router:
路由配置: management/web/src/router/index.ts:5-156
主要路由:
/dashboard- 仪表盘/user- 用户管理/team- 团队管理/config- 配置管理
8. 状态管理 #
8.1 用户前端状态 #
用户前端使用React Hooks进行状态管理:
状态管理方式:
- useState - 组件级状态
- useContext - 全局状态
- 自定义Hooks - 业务逻辑封装
核心Hooks:
useSendMessageWithSse- 消息发送useKnowledgeBase- 知识库管理useDialog- 对话管理
8.2 管理前端状态 #
管理前端可以使用Pinia进行状态管理(可选):
状态管理方式:
- 组件状态 - 使用ref/reactive
- Pinia Store - 全局状态(如需要)
- Composables - 可复用逻辑
9. 性能优化 #
9.1 代码分割 #
- 路由级分割:按路由分割代码
- 组件懒加载:延迟加载组件
- 动态导入:使用动态import
9.2 缓存策略 #
- API缓存:缓存API响应
- 资源缓存:缓存静态资源
- 本地存储:使用localStorage缓存数据
9.3 渲染优化 #
- 虚拟滚动:长列表虚拟滚动
- 防抖节流:输入防抖和滚动节流
- Memo优化:使用React.memo和useMemo
10. 最佳实践 #
10.1 组件设计 #
- 单一职责:每个组件只负责一个功能
- 可复用性:设计可复用的组件
- 类型安全:使用TypeScript确保类型安全
10.2 代码组织 #
- 模块化:按功能模块组织代码
- 命名规范:遵循命名规范
- 文档注释:添加必要的注释
10.3 错误处理 #
- 错误边界:使用错误边界捕获错误
- 用户提示:友好的错误提示
- 日志记录:记录错误日志
11. 总结 #
Ragflow-Plus提供了完整的用户界面系统,包括:
- 双前端架构:React用户前端和Vue.js管理前端
- 完整功能:聊天、文档编写、知识库管理、系统管理
- 现代化技术栈:TypeScript、现代框架、组件库
- 国际化支持:多语言支持
- 性能优化:代码分割、缓存、渲染优化
通过合理使用这些界面组件,可以构建功能完整、用户体验良好的RAG应用系统。