# 管理仪表盘
1. 目的与范围 #
管理仪表盘是Ragflow-Plus的专用管理界面,为系统提供全面的管理能力。这个基于Vue.js的前端应用配合Flask后端,使管理员能够独立于主用户应用管理用户、团队、文件上传和系统配置。
本文档涵盖管理仪表盘界面及其后端服务。关于主用户界面,请参阅 主应用界面。关于后端管理功能和服务,请参阅 管理与Admin API。
2. 系统架构 #
管理仪表盘作为Ragflow-Plus内的独立应用栈运行,通过现代化的Web界面提供管理能力。
2.1 整体架构 #
系统管理员 (:8888)
↓
Vue.js应用 (management/web/)
↙ ↓ ↘
Element Plus UI Axios HTTP客户端 路由管理
↓ ↓ ↓
Flask API服务器 (management/server/)
↙ ↓ ↘
用户路由 团队路由 文件路由
↓ ↓ ↓
用户服务 团队服务 文件服务
↓ ↓ ↓
MySQL数据库 MySQL数据库 MinIO存储2.2 组件集成流程 #
管理仪表盘的组件集成遵循以下流程:
Vue前端组件
↓
HTTP拦截器 (axios.ts)
↙ ↓ ↘
用户API 团队API 文件上传API
↓ ↓ ↓
Flask路由处理器
↓ ↓ ↓
服务层函数
↓ ↓ ↓
数据库/存储3. 前端实现 #
管理仪表盘前端使用Vue.js 3、TypeScript和Element Plus UI组件构建,提供现代化的管理界面。
3.1 核心技术 #
管理仪表盘使用以下技术栈:
- 框架:Vue 3 + TypeScript
- UI组件库:Element Plus
- 路由:Vue Router
- 状态管理:Pinia
- HTTP客户端:Axios
- 构建工具:Vite
3.2 HTTP客户端配置 #
Axios配置:
// From management/web/src/http/axios.ts
const axiosInstance = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 30000,
});
// 请求拦截器 - 添加JWT token
axiosInstance.interceptors.request.use((config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// 响应拦截器 - 错误处理
axiosInstance.interceptors.response.use(
(response) => response.data,
(error) => {
handleError(error);
return Promise.reject(error);
}
);3.3 文件上传系统 #
管理界面包含一个支持大文件和批量操作的高级文件上传系统:
上传配置:
// From management/web/src/common/composables/useFileUpload.ts
interface FileUploadConfig {
chunkSize: number; // 分块大小
maxConcurrent: number; // 最大并发数
retryAttempts: number; // 重试次数
onProgress: (progress: number) => void;
onComplete: (fileId: string) => void;
onError: (error: Error) => void;
}功能特性:
- 分块上传:支持大文件分块上传
- 进度跟踪:实时上传进度显示
- 队列管理:多文件上传队列管理
- 错误处理:自动重试和错误恢复
- 并发控制:限制同时上传的文件数量
4. 后端服务 #
管理仪表盘的后端服务基于Flask构建,提供RESTful API接口。
4.1 用户管理服务 #
用户管理服务提供用户CRUD操作和分页查询:
服务层实现:
# From management/server/services/users/service.py
def get_users_with_pagination(
page: int = 1,
page_size: int = 10,
search: str = None
) -> dict:
"""
获取用户列表(分页)
"""
# 查询逻辑
# 返回分页结果路由层实现:
# From management/server/routes/users/routes.py
@user_bp.route('/api/v1/users', methods=['GET'])
def get_users():
"""
获取用户列表
"""
page = request.args.get('page', 1, type=int)
page_size = request.args.get('page_size', 10, type=int)
search = request.args.get('search', '')
result = user_service.get_users_with_pagination(
page=page,
page_size=page_size,
search=search
)
return jsonify(result)功能特性:
- 用户列表:分页查询用户列表
- 用户创建:创建新用户
- 用户更新:更新用户信息
- 用户删除:删除用户
- 搜索功能:支持用户名和邮箱搜索
4.2 团队管理服务 #
团队管理服务提供团队CRUD操作和成员管理:
服务层实现:
# From management/server/services/teams/service.py
def get_teams_with_pagination(
page: int = 1,
page_size: int = 10,
search: str = None
) -> dict:
"""
获取团队列表(分页)
"""
# 查询逻辑
# 返回分页结果
def get_team_members(team_id: str) -> list:
"""
获取团队成员列表
"""
# 查询团队成员
# 返回成员列表路由层实现:
# From management/server/routes/teams/routes.py
@team_bp.route('/api/v1/teams', methods=['GET'])
def get_teams():
"""
获取团队列表
"""
page = request.args.get('page', 1, type=int)
page_size = request.args.get('page_size', 10, type=int)
result = team_service.get_teams_with_pagination(
page=page,
page_size=page_size
)
return jsonify(result)
@team_bp.route('/api/v1/teams/<team_id>/members', methods=['GET'])
def get_team_members_route(team_id: str):
"""
获取团队成员列表
"""
members = team_service.get_team_members(team_id)
return jsonify(members)功能特性:
- 团队列表:分页查询团队列表
- 团队创建:创建新团队
- 团队更新:更新团队信息
- 团队删除:删除团队
- 成员管理:添加、移除团队成员
- 权限管理:配置团队权限
4.3 文件管理服务 #
文件管理服务提供文件上传、下载和管理功能:
功能特性:
- 文件上传:支持单文件和多文件上传
- 文件下载:文件下载功能
- 文件列表:查询文件列表
- 文件删除:删除文件
- 文件搜索:支持文件名搜索
5. 前端页面组件 #
5.1 用户管理页面 #
用户管理页面 (management/web/src/pages/user-management/index.vue) 提供:
- 用户列表表格:使用Element Plus的
ElTable组件 - 分页组件:使用
ElPagination组件 - 搜索功能:用户名和邮箱搜索
- 操作按钮:创建、编辑、删除用户
5.2 团队管理页面 #
团队管理页面 (management/web/src/pages/team-management/index.vue) 提供:
- 团队列表表格:显示团队信息
- 成员管理:查看和管理团队成员
- 权限配置:配置团队权限
- 操作功能:创建、编辑、删除团队
5.3 配置管理页面 #
配置管理页面提供系统配置和模型参数管理:
- 模型配置:查看和编辑模型参数
- 系统设置:系统级配置管理
- 参数验证:配置参数验证
6. 数据层 #
6.1 数据库表结构 #
用户表 (user):
id: 用户IDemail: 邮箱name: 用户名password_hash: 密码哈希created_at: 创建时间updated_at: 更新时间
团队表 (tenant):
id: 团队IDname: 团队名称description: 团队描述created_at: 创建时间updated_at: 更新时间
用户团队关联表 (user_tenant):
user_id: 用户IDtenant_id: 团队IDrole: 角色
6.2 存储服务 #
MinIO存储:
- 文件对象存储
- 支持大文件存储
- 提供文件访问URL
7. 安全与认证 #
7.1 JWT认证 #
管理仪表盘使用JWT token进行身份认证:
- Token生成:登录成功后生成JWT token
- Token存储:前端存储token到localStorage
- Token验证:后端验证token有效性
- Token刷新:支持token刷新机制
7.2 权限控制 #
- 角色管理:支持admin和editor角色
- 路由守卫:基于角色的路由访问控制
- API权限:后端API权限验证
8. 最佳实践 #
8.1 前端开发 #
- 组件复用:提取通用组件到共享目录
- 类型安全:使用TypeScript确保类型安全
- 状态管理:使用Pinia管理全局状态
- 错误处理:统一错误处理和提示
8.2 后端开发 #
- 服务层分离:业务逻辑放在服务层
- 路由层简化:路由层只负责请求处理
- 错误处理:统一的错误响应格式
- 日志记录:记录关键操作日志
9. 总结 #
管理仪表盘通过Vue.js前端和Flask后端实现了完整的系统管理功能。通过合理的架构设计、组件复用和错误处理,系统提供了稳定、高效、用户友好的管理界面。
通过用户管理、团队管理和文件管理等功能,管理员可以全面控制系统运行,确保系统的安全性和可维护性。