from typing import Any, List, Optional from pydantic import BaseModel, Field # 菜单表单验证 class MenuForm(BaseModel): id: Optional[int] = Field(None, description="菜单ID") title: str = Field(..., min_length=1, max_length=150, description="菜单标题") icon: Optional[str] = Field(None, max_length=50, description="菜单图标") path: Optional[str] = Field(None, max_length=255, description="路由地址") component: Optional[str] = Field(None, max_length=255, description="组件路径") parent_id: int = Field(..., ge=0, description="上级ID") type: Optional[int] = Field(None, ge=0, le=1, description="菜单类型") target: Optional[str] = Field(None, max_length=30, description="打开方式") permission: Optional[str] = Field(None, max_length=150, description="权限节点") hide: Optional[int] = Field(None, ge=0, le=1, description="是否可见") status: int = Field(..., ge=1, le=2, description="菜单状态") sort: int = Field(..., ge=0, le=99999, description="菜单排序") note: Optional[str] = Field(None, max_length=255, description="菜单备注") checked_list: Optional[List[int]] = Field(default=[], description="权限节点")