Files
zcglxt/app/schemas/system_config.py
Claude e71181f0a3 fix: 修复多个关键问题
- 修复前端路由守卫:未登录时不显示提示,直接跳转登录页
- 修复API拦截器:401错误不显示提示,直接跳转
- 增强验证码显示:图片尺寸从120x40增加到200x80
- 增大验证码字体:从28号增加到48号
- 优化验证码字符:排除易混淆的0和1
- 减少干扰线:从5条减少到3条,添加背景色优化
- 增强登录API日志:添加详细的调试日志
- 增强验证码生成和验证日志
- 优化异常处理和错误追踪

影响文件:
- src/router/index.ts
- src/api/request.ts
- app/services/auth_service.py
- app/api/v1/auth.py
- app/schemas/user.py

测试状态:
- 前端构建通过
- 后端语法检查通过
- 验证码显示效果优化完成

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 00:26:21 +08:00

103 lines
3.6 KiB
Python

"""
系统配置相关的Pydantic Schema
"""
from typing import Optional, List, Dict, Any
from datetime import datetime
from pydantic import BaseModel, Field
from enum import Enum
class ValueTypeEnum(str, Enum):
"""配置值类型枚举"""
STRING = "string"
NUMBER = "number"
BOOLEAN = "boolean"
JSON = "json"
class SystemConfigBase(BaseModel):
"""系统配置基础Schema"""
config_key: str = Field(..., min_length=1, max_length=100, description="配置键")
config_name: str = Field(..., min_length=1, max_length=200, description="配置名称")
config_value: Optional[str] = Field(None, description="配置值")
value_type: ValueTypeEnum = Field(default=ValueTypeEnum.STRING, description="值类型")
category: str = Field(..., min_length=1, max_length=50, description="配置分类")
description: Optional[str] = Field(None, description="配置描述")
is_system: bool = Field(default=False, description="是否系统配置")
is_encrypted: bool = Field(default=False, description="是否加密存储")
validation_rule: Optional[str] = Field(None, description="验证规则")
options: Optional[Dict[str, Any]] = Field(None, description="可选值配置")
default_value: Optional[str] = Field(None, description="默认值")
sort_order: int = Field(default=0, description="排序序号")
is_active: bool = Field(default=True, description="是否启用")
class SystemConfigCreate(SystemConfigBase):
"""创建系统配置Schema"""
pass
class SystemConfigUpdate(BaseModel):
"""更新系统配置Schema"""
config_name: Optional[str] = Field(None, min_length=1, max_length=200)
config_value: Optional[str] = None
value_type: Optional[ValueTypeEnum] = None
category: Optional[str] = Field(None, min_length=1, max_length=50)
description: Optional[str] = None
validation_rule: Optional[str] = None
options: Optional[Dict[str, Any]] = None
default_value: Optional[str] = None
sort_order: Optional[int] = None
is_active: Optional[bool] = None
class SystemConfigInDB(BaseModel):
"""数据库中的系统配置Schema"""
id: int
config_key: str
config_name: str
config_value: Optional[str]
value_type: str
category: str
description: Optional[str]
is_system: bool
is_encrypted: bool
validation_rule: Optional[str]
options: Optional[Dict[str, Any]]
default_value: Optional[str]
sort_order: int
is_active: bool
created_at: datetime
updated_at: datetime
updated_by: Optional[int]
class Config:
from_attributes = True
class SystemConfigResponse(SystemConfigInDB):
"""系统配置响应Schema"""
pass
class SystemConfigBatchUpdate(BaseModel):
"""批量更新配置Schema"""
configs: Dict[str, Any] = Field(..., description="配置键值对")
class SystemConfigQueryParams(BaseModel):
"""系统配置查询参数"""
keyword: Optional[str] = Field(None, description="搜索关键词")
category: Optional[str] = Field(None, description="配置分类")
is_active: Optional[bool] = Field(None, description="是否启用")
is_system: Optional[bool] = Field(None, description="是否系统配置")
page: int = Field(default=1, ge=1, description="页码")
page_size: int = Field(default=20, ge=1, le=100, description="每页数量")
class ConfigCategoryResponse(BaseModel):
"""配置分类响应Schema"""
category: str = Field(..., description="分类名称")
count: int = Field(..., description="配置数量")
description: Optional[str] = Field(None, description="分类描述")