# schemas.py from datetime import datetime from typing import List, Optional from ninja import Schema # ========== 用户 Schema ========== class UserRoleOut(Schema): id: int name: str class UserDeptOut(Schema): id: int name: str class UserOut(Schema): id: int username: str cname: Optional[str] = None phone: Optional[str] = None email: Optional[str] = None avatar: Optional[str] = None dept: Optional[UserDeptOut] = None roles: List[UserRoleOut] = [] is_active: bool is_staff: bool is_superuser: bool last_login: Optional[datetime] = None date_joined: datetime class UserCreate(Schema): username: str password: Optional[str] = None cname: Optional[str] = None phone: Optional[str] = None email: Optional[str] = None dept: Optional[int] = None roles: List[int] = [] is_active: bool = True class UserResetPassword(Schema): user_id: int new_password: str class UserUpdate(Schema): username: Optional[str] = None password: Optional[str] = None cname: Optional[str] = None phone: Optional[str] = None email: Optional[str] = None dept: Optional[int] = None roles: Optional[List[int]] = None is_active: Optional[bool] = None # ========== 菜单 Schema ========== class MenuBase(Schema): name: str code: str path: Optional[str] = None component: Optional[str] = None icon: Optional[str] = None parent_id: Optional[int] = None menu_type: int = 1 order_num: int = 0 permission_code: Optional[str] = None status: bool = True class MenuCreate(MenuBase): pass class MenuUpdate(MenuBase): pass class MenuOut(MenuBase): id: int created_at: datetime # ========== 角色 Schema ========== class RoleBase(Schema): name: str code: str description: Optional[str] = None status: bool = True menus: List[MenuOut] class RoleCreate(RoleBase): pass class RoleUpdate(RoleBase): pass class RoleOut(RoleBase): id: int created_at: datetime # ========== 关联 Schema ========== class RoleMenuAssign(Schema): menu_ids: List[int] class UserRoleAssign(Schema): role_ids: List[int] class DepartmentBase(Schema): name: str parent_id: Optional[int] = None order: int = 0 class DepartmentCreate(DepartmentBase): pass class DepartmentUpdate(DepartmentBase): pass class DepartmentOut(DepartmentBase): id: int