feat: add backend rule group and permission support

This commit is contained in:
wren
2026-05-06 09:40:37 +08:00
parent 7acbe0f1d9
commit 76ba7e65ed
45 changed files with 6175 additions and 110 deletions
@@ -0,0 +1,38 @@
from typing import Any
from pydantic import BaseModel, Field
class EvaluationPointBaseDTO(BaseModel):
name: str | None = Field(None, description="评查点名称")
code: str | None = Field(None, description="评查点编码")
risk: str | None = Field(None, description="风险等级")
is_enabled: bool | None = Field(None, description="是否启用")
description: str | None = Field(None, description="评查点描述")
evaluation_point_groups_id: int | None = Field(None, description="二级分组ID")
evaluation_point_groups_pid: int | None = Field(None, description="一级分组ID")
document_attribute_type: str | None = Field(None, description="适用属性类型")
references_laws: dict[str, Any] | None = Field(None, description="法律依据")
extraction_config: dict[str, Any] | None = Field(None, description="抽取配置")
evaluation_config: dict[str, Any] | None = Field(None, description="评查配置")
pass_message: str | None = Field(None, description="通过提示")
fail_message: str | None = Field(None, description="不通过提示")
suggestion_message: str | None = Field(None, description="建议提示")
suggestion_message_type: str | None = Field(None, description="建议提示类型")
post_action: str | None = Field(None, description="后置动作")
action_config: str | None = Field(None, description="动作配置")
score: float | int | None = Field(None, description="分值")
area: str | None = Field(None, description="地区")
class EvaluationPointCreateDTO(EvaluationPointBaseDTO):
name: str = Field(..., description="评查点名称")
code: str = Field(..., description="评查点编码")
risk: str = Field(..., description="风险等级")
is_enabled: bool = Field(True, description="是否启用")
evaluation_point_groups_id: int = Field(..., description="二级分组ID")
evaluation_point_groups_pid: int = Field(..., description="一级分组ID")
class EvaluationPointUpdateDTO(EvaluationPointBaseDTO):
pass
@@ -0,0 +1,63 @@
from pydantic import BaseModel, Field
class EvaluationPointGroupCreateDTO(BaseModel):
"""创建评查点分组请求。"""
name: str = Field(..., description="分组名称")
code: str = Field(..., description="分组编码")
pid: int | None = Field(None, description="父分组ID,空或 0 表示一级业务分组")
description: str | None = Field(None, description="分组描述")
document_type_id: int | None = Field(None, description="关联文档类型ID;一级通常留空仅用于兼容旧数据,二级需绑定具体文档类型")
entry_module_id: int | None = Field(None, description="关联入口模块ID;一级业务分组可绑定,允许后补")
sort_order: int = Field(0, description="排序")
is_enabled: bool = Field(True, description="是否启用")
class EvaluationPointGroupUpdateDTO(BaseModel):
"""更新评查点分组请求。"""
name: str | None = Field(None, description="分组名称")
code: str | None = Field(None, description="分组编码")
pid: int | None = Field(None, description="父分组ID,空或 0 表示一级业务分组")
description: str | None = Field(None, description="分组描述")
document_type_id: int | None = Field(None, description="关联文档类型ID;一级通常留空仅用于兼容旧数据,二级需绑定具体文档类型")
entry_module_id: int | None = Field(None, description="关联入口模块ID;一级业务分组可绑定,允许后补")
sort_order: int | None = Field(None, description="排序")
is_enabled: bool | None = Field(None, description="是否启用")
class EvaluationPointGroupRebindDTO(BaseModel):
"""文档类型分组换绑请求。"""
new_parent_id: int = Field(..., ge=1, description="新的文档类型分组ID")
class EvaluationPointGroupBatchStatusDTO(BaseModel):
"""批量更新状态请求。"""
ids: list[int] = Field(default_factory=list, description="分组ID列表")
is_enabled: bool = Field(..., description="目标启用状态")
class EvaluationPointGroupBatchDeleteDTO(BaseModel):
"""批量删除分组请求。"""
ids: list[int] = Field(default_factory=list, description="分组ID列表")
class EvaluationPointGroupBindingCreateDTO(BaseModel):
"""规则组绑定创建请求。"""
rule_set_id: int = Field(..., ge=1, description="规则集ID")
priority: int = Field(0, description="优先级")
is_active: bool = Field(True, description="是否启用")
note: str | None = Field(None, description="备注")
class EvaluationPointGroupBindingUpdateDTO(BaseModel):
"""规则组绑定更新请求。"""
priority: int | None = Field(None, description="优先级")
is_active: bool | None = Field(None, description="是否启用")
note: str | None = Field(None, description="备注")
@@ -0,0 +1,28 @@
from typing import Any
from pydantic import BaseModel, Field
class PromptTemplateBaseDTO(BaseModel):
template_name: str | None = Field(None, description='模板名称')
template_code: str | None = Field(None, description='模板code')
template_type: str | None = Field(None, description='模板类型')
description: str | None = Field(None, description='模板描述')
template_content: str | None = Field(None, description='模板内容')
template_abbreviation: str | None = Field(None, description='模板简称')
variables: dict[str, Any] | None = Field(None, description='变量定义')
status: int | None = Field(None, description='状态')
version: str | None = Field(None, description='版本')
created_by: int | None = Field(None, description='创建人ID')
class PromptTemplateCreateDTO(PromptTemplateBaseDTO):
template_name: str = Field(..., description='模板名称')
template_type: str = Field(..., description='模板类型')
template_content: str = Field(..., description='模板内容')
status: int = Field(1, description='状态')
version: str = Field('v1.0', description='版本')
class PromptTemplateUpdateDTO(PromptTemplateBaseDTO):
pass
@@ -44,6 +44,16 @@ class RolePermissionsBatchDTO(BaseModel):
role_id: int = Field(..., description="角色ID")
permissions: list[RolePermissionConfigDTO] = Field(default_factory=list, description="权限列表")
replace: bool = Field(False, description="是否替换当前角色已有权限")
replace_scope_permission_ids: list[int] = Field(default_factory=list, description="替换模式下仅允许清理的权限ID范围")
class RoleAccessSaveDTO(BaseModel):
"""角色菜单与接口权限联合保存请求。"""
route_ids: list[int] = Field(default_factory=list, description="启用路由ID列表")
permission_ids: list[int] = Field(default_factory=list, description="启用接口权限ID列表")
route_permission: str = Field("RW", description="路由授权类型")
replace_scope_permission_ids: list[int] = Field(default_factory=list, description="允许本次替换清理的权限ID范围")
class UserRolesAssignDTO(BaseModel):
@@ -0,0 +1,43 @@
"""规则分组 DTO。"""
from pydantic import BaseModel, Field
class RuleGroupCreateDTO(BaseModel):
"""创建规则分组。"""
name: str = Field(..., description="分组名称")
code: str = Field(..., description="分组编码")
pid: int | None = Field(None, description="父分组ID,空或0表示一级分组")
description: str | None = Field(None, description="分组描述")
documentTypeId: int | None = Field(None, description="关联文档类型ID,仅二级分组使用")
isEnabled: bool = Field(True, description="是否启用")
sortOrder: int = Field(0, description="排序")
class RuleGroupUpdateDTO(BaseModel):
"""更新规则分组。"""
name: str | None = Field(None, description="分组名称")
code: str | None = Field(None, description="分组编码")
description: str | None = Field(None, description="分组描述")
documentTypeId: int | None = Field(None, description="关联文档类型ID")
isEnabled: bool | None = Field(None, description="是否启用")
sortOrder: int | None = Field(None, description="排序")
class RuleGroupBindingCreateDTO(BaseModel):
"""创建规则组绑定。"""
ruleSetId: int = Field(..., description="规则集ID")
priority: int = Field(0, description="优先级")
isActive: bool = Field(True, description="是否启用")
note: str | None = Field(None, description="备注")
class RuleGroupBindingUpdateDTO(BaseModel):
"""更新规则组绑定。"""
priority: int | None = Field(None, description="优先级")
isActive: bool | None = Field(None, description="是否启用")
note: str | None = Field(None, description="备注")