157 lines
7.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# _*_ coding : UTF-8 _*_
# @Time : 2025/01/20 20:32
# @UpdateTime : 2025/01/20 20:32
# @Author : sonder
# @File : permission.py
# @Software : PyCharm
# @Comment : 本程序
from datetime import datetime
from typing import Optional, List
from pydantic import BaseModel, Field
from schemas.common import BaseResponse, ListQueryResult
class PermissionInfo(BaseModel):
"""
权限表基础模型。
"""
id: str = Field(..., description="主键")
create_by: str = Field(default="", description="创建者")
create_time: Optional[datetime] = Field(default=None, description="创建时间")
update_by: str = Field(default="", description="更新者")
update_time: Optional[datetime] = Field(default=None, description="更新时间")
menu_type: int = Field(..., description="菜单类型0菜单、1iframe、2外链、3按钮")
parent_id: str = Field(default="", max_length=36, description="父权限ID")
title: str = Field(..., max_length=255, description="菜单名称")
name: Optional[str] = Field(default=None, max_length=255, description="路由名称")
path: Optional[str] = Field(default=None, max_length=255, description="路由路径")
component: Optional[str] = Field(default=None, max_length=255, description="组件路径")
rank: int = Field(default=1, description="菜单排序")
redirect: Optional[str] = Field(default=None, max_length=255, description="路由重定向")
icon: Optional[str] = Field(default=None, max_length=255, description="菜单图标")
extra_icon: Optional[str] = Field(default=None, max_length=255, description="右侧图标")
enter_transition: Optional[str] = Field(default=None, max_length=255, description="进场动画")
leave_transition: Optional[str] = Field(default=None, max_length=255, description="离场动画")
active_path: Optional[str] = Field(default=None, max_length=255, description="菜单激活路径")
auths: Optional[str] = Field(default=None, max_length=255, description="权限标识")
frame_src: Optional[str] = Field(default=None, max_length=255, description="iframe链接地址")
frame_loading: bool = Field(default=True, description="iframe加载动画")
keep_alive: bool = Field(default=False, description="缓存页面")
hidden_tag: bool = Field(default=False, description="隐藏标签页")
fixed_tag: bool = Field(default=False, description="固定标签页")
show_link: bool = Field(default=True, description="显示菜单")
show_parent: bool = Field(default=True, description="显示父级菜单")
is_admin: bool = Field(default=False, description="是否为管理专属页面")
class Config:
json_schema_extra = {
"example": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"create_by": "admin",
"create_time": "2023-10-01T12:00:00",
"update_by": "admin",
"update_time": "2023-10-01T12:00:00",
"menu_type": 0,
"parent_id": "",
"title": "首页",
"name": "home",
"path": "/home",
"component": "HomeView",
"rank": 1,
"redirect": None,
"icon": "home",
"extra_icon": None,
"enter_transition": None,
"leave_transition": None,
"active_path": None,
"auths": None,
"frame_src": None,
"frame_loading": True,
"keep_alive": False,
"hidden_tag": False,
"fixed_tag": False,
"show_link": True,
"show_parent": True,
"is_admin": False
}
}
class GetPermissionInfoResponse(BaseResponse):
"""
获取权限信息响应模型。
"""
data: PermissionInfo = Field(default=None, description="响应数据")
class AddPermissionParams(BaseModel):
"""
添加权限参数模型。
"""
name: str = Field(..., max_length=255, description="路由名称")
path: str = Field(..., max_length=255, description="路由路径")
title: str = Field(..., max_length=255, description="菜单名称")
component: Optional[str] = Field(default=None, max_length=255, description="组件路径")
rank: int = Field(default=1, description="菜单排序")
redirect: Optional[str] = Field(default=None, max_length=255, description="路由重定向")
icon: Optional[str] = Field(default=None, max_length=255, description="菜单图标")
extra_icon: Optional[str] = Field(default=None, max_length=255, description="右侧图标")
enter_transition: Optional[str] = Field(default=None, max_length=255, description="进场动画")
leave_transition: Optional[str] = Field(default=None, max_length=255, description="离场动画")
active_path: Optional[str] = Field(default=None, max_length=255, description="菜单激活路径")
auths: Optional[str] = Field(default=None, max_length=255, description="权限标识")
frame_src: Optional[str] = Field(default=None, max_length=255, description="iframe链接地址")
frame_loading: bool = Field(default=True, description="iframe加载动画")
keep_alive: bool = Field(default=False, description="缓存页面")
hidden_tag: bool = Field(default=False, description="隐藏标签页")
fixed_tag: bool = Field(default=False, description="固定标签页")
show_link: bool = Field(default=True, description="显示菜单")
show_parent: bool = Field(default=True, description="显示父级菜单")
parent_id: str = Field(default="", max_length=36, description="父级菜单ID")
menu_type: int = Field(default=0, description="菜单类型")
is_admin: bool = Field(default=False, description="是否为管理专属页面")
class Config:
json_schema_extra = {
"example": {
"name": "home",
"path": "/home",
"title": "首页",
"component": "HomeView",
"rank": 1,
"redirect": None,
"icon": "home",
"extra_icon": None,
"enter_transition": None,
"leave_transition": None,
"active_path": None,
"auths": None,
"frame_src": None,
"frame_loading": True,
"keep_alive": False,
"hidden_tag": False,
"fixed_tag": False,
"show_link": True,
"show_parent": True,
"parent_id": "",
"menu_type": 0,
"is_admin": False
}
}
class GetPermissionListResult(ListQueryResult):
"""
获取权限列表结果模型。
"""
result: List[PermissionInfo] = Field(default=[], description="权限列表")
class GetPermissionListResponse(BaseResponse):
"""
获取权限列表响应模型。
"""
data: GetPermissionListResult = Field(default=None, description="响应数据")