# schemas.py from datetime import datetime from typing import List, Optional from ninja import Schema, ModelSchema from users.models import User # ========== 用户 Schema ========== 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[int] = None # roles: List[int] = [] is_active: bool is_staff: bool is_superuser: bool last_login: Optional[datetime] = None date_joined: datetime class UserCreate(Schema): username: str password: str cname: Optional[str] = None phone: Optional[str] = None email: Optional[str] = None dept: Optional[int] = None roles: List[int] = [] is_active: bool = True class UserUpdate(Schema): username: Optional[str] password: Optional[str] cname: Optional[str] phone: Optional[str] email: Optional[str] dept: Optional[int] roles: Optional[List[int]] is_active: Optional[bool] # ========== 菜单 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 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