9.0 KiB
9.0 KiB
注册界面 + 设置界面 功能设计
概述
为 Jarvis 系统添加用户注册功能和完整的设置界面。用户可以:
- 在前端注册账号
- 在设置界面管理个人信息和 LLM 配置
- 配置定时任务等系统参数
核心价值: 支持多用户、每个用户独立配置自己的 LLM 提供商和参数。
现状分析
已有的功能
- 后端已有
/api/auth/registerAPI - 后端使用
pydantic-settings从.env读取配置 - 前端只有登录页面,无注册入口
需要改动的地方
- 前端 LoginView 添加注册表单
- User 模型增加
llm_config和scheduler_configJSON 字段 - 新建 Settings 路由和服务
- 新建 SettingsView 页面
数据模型
User 表扩展
ALTER TABLE users ADD COLUMN llm_config TEXT;
ALTER TABLE users ADD COLUMN scheduler_config TEXT;
字段结构
llm_config (JSON):
{
"chat": {
"provider": "openai|claude|ollama|deepseek|custom",
"model": "gpt-4o",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-..."
},
"vlm": {
"provider": "openai",
"model": "gpt-4o",
"base_url": "...",
"api_key": "..."
},
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"base_url": "...",
"api_key": "..."
},
"rerank": {
"provider": "openai",
"model": "bge-reranker-v2",
"base_url": "...",
"api_key": "..."
}
}
scheduler_config (JSON):
{
"daily_plan_time": "08:00",
"forum_scan_interval_minutes": 30,
"todo_ai_generate_time": "08:00",
"enabled": true
}
API 设计
1. 注册 API (已有)
POST /api/auth/register
Body: { email, password, full_name }
Response: UserOut
2. 获取用户设置
GET /api/settings
Response: {
profile: { id, email, full_name, created_at },
llm_config: { ... },
scheduler_config: { ... }
}
3. 更新用户资料
PUT /api/settings/profile
Body: { full_name?, password? }
Response: UserOut
4. 更新 LLM 配置
PUT /api/settings/llm
Body: { chat?: {...}, vlm?: {...}, embedding?: {...}, rerank?: {...} }
Response: { llm_config: { ... } } // 返回更新后的完整配置
5. 测试 LLM 连接
POST /api/settings/llm/test
Body: { type: "chat"|"vlm"|"embedding"|"rerank", provider, model, base_url, api_key }
Response: { success: true, message: "连接成功" } 或 { success: false, error: "错误信息" }
6. 更新定时任务配置
PUT /api/settings/scheduler
Body: { daily_plan_time?, forum_scan_interval_minutes?, todo_ai_generate_time?, enabled? }
Response: { scheduler_config: { ... } } // 返回更新后的完整配置
前端页面
LoginView.vue 改动
- 添加"注册"和"登录"切换 Tab
- 注册表单:邮箱、密码、确认密码、用户名
- 复用现有 sci-fi 登录风格
SettingsView.vue (新建)
页面布局
┌─────────────────────────────────────────────────┐
│ [⚙] SETTINGS │
├─────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────┐ │
│ │ PROFILE │ │
│ │ Email: operator@jarvis.ai │ │
│ │ Name: [___________] │ │
│ │ Password: [********] [Change] │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ LLM CONFIGURATION │ │
│ │ ┌─ Chat ────────────────────────────────┐ │ │
│ │ │ Provider: [OpenAI ▼] │ │ │
│ │ │ Model: [gpt-4o ____________] │ │ │
│ │ │ Base URL:[https://...] ] │ │ │
│ │ │ API Key: [•••••••••••••••••] │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ │ ┌─ VLM ─────────────────────────────────┐ │ │
│ │ │ ... (同上结构) │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ │ ┌─ Embedding ───────────────────────────┐ │ │
│ │ │ ... (同上结构) │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ │ ┌─ Rerank ──────────────────────────────┐ │ │
│ │ │ ... (同上结构) │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ SCHEDULER │ │
│ │ Daily Plan Time: [08:00] │ │
│ │ Forum Scan Interval: [30] 分钟 │ │
│ │ Todo AI Generate: [08:00] │ │
│ │ Scheduler Enabled: [ON] │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ [SAVE ALL SETTINGS] │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
交互行为
- 修改后点击"保存"按钮,按钮显示 loading 状态
- 保存成功显示 toast 提示"保存成功"
- 保存失败显示 toast 提示错误信息
- 密码修改需二次确认弹窗
- API Key 字段支持显示/隐藏切换
- 每个模型配置卡片有独立的"测试"按钮
- Provider 切换时自动填充默认值(如 Ollama 切换到 localhost:11434)
- Scheduler enabled 关闭时,时间输入框显示禁用状态
- 空配置时显示"点击配置"占位提示
注册表单
- 邮箱:必填,格式校验
- 用户名:必填,2-20 字符
- 密码:必填,最少 8 字符
- 确认密码:必填,需与密码一致
- 密码强度指示器(弱/中/强)
路由和侧边栏
router/index.ts
{
path: 'settings',
name: 'settings',
component: () => import('@/views/SettingsView.vue'),
}
SidebarNav.vue
{ name: '设置', path: '/settings', icon: Settings }
技术实现
后端文件
backend/app/
models/
user.py # 修改:添加 llm_config, scheduler_config 字段
schemas/
auth.py # 修改:UserCreate 支持 full_name
settings.py # 新建:SettingsOut, LLMConfigIn, SchedulerConfigIn
routers/
settings.py # 新建:settings router
services/
settings_service.py # 新建:设置逻辑服务
前端文件
frontend/src/
api/
settings.ts # 新建:settings API 客户端
views/
LoginView.vue # 修改:添加注册 Tab
SettingsView.vue # 新建:设置页面
router/
index.ts # 修改:添加 /settings 路由
components/
SidebarNav.vue # 修改:添加设置菜单
验证清单
- 注册功能正常 - 可以通过注册页面创建新账号
- 登录功能正常 - 新老用户都可以登录
- 设置页面可访问 - 登录后可进入设置页面
- 个人信息修改正常 - 用户名、密码可修改
- LLM 配置保存正常 - 四种模型配置可保存
- LLM 测试连接正常 - 可以验证配置是否正确
- 定时任务配置正常 - 时间间隔可修改
- 配置持久化正常 - 重新登录后配置保留
- UI 风格一致 - 设置页面与其他页面风格统一
- 注册表单验证正常 - 密码强度、格式校验有效