128 lines
2.2 KiB
Python
128 lines
2.2 KiB
Python
# 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
|
|
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
|