feat: restore source parity and harden agent runtime

This commit is contained in:
2026-06-22 11:17:26 +08:00
parent e33f08277b
commit 0793eb82d6
596 changed files with 168879 additions and 290 deletions
@@ -0,0 +1,149 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
大屏设计器 Schema 定义
"""
from datetime import datetime
from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict, Field
class ScreenProjectBase(BaseModel):
"""大屏项目基础信息"""
application_id: Optional[str] = Field(None, description="所属应用ID")
name: str = Field(..., description="项目名称")
code: str = Field(..., pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="项目编码(字母开头,只能包含字母、数字和下划线)")
description: str = Field(default='', description="项目描述")
sort: int = Field(default=0, description="排序")
class ScreenProjectCreateIn(ScreenProjectBase):
"""创建大屏项目请求"""
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
thumbnail: str = Field(default='', description="缩略图")
class ScreenProjectUpdateIn(BaseModel):
"""更新大屏项目请求"""
name: Optional[str] = Field(default=None, description="项目名称")
description: Optional[str] = Field(default=None, description="项目描述")
sort: Optional[int] = Field(default=None, description="排序")
screen_config: Optional[Dict[str, Any]] = Field(default=None, description="大屏设计配置")
thumbnail: Optional[str] = Field(default=None, description="缩略图")
class ScreenProjectOut(BaseModel):
"""大屏项目详情输出"""
id: str
application_id: Optional[str] = None
name: str
code: str
description: str
status: str
version: int
thumbnail: str
screen_config: Dict[str, Any]
sort: int
access_password: str = Field(default='', description="访问密码")
published_at: Optional[str] = Field(default=None, description="发布时间")
sys_create_datetime: str
sys_update_datetime: str
model_config = ConfigDict(from_attributes=True)
@classmethod
def from_orm_model(cls, obj):
"""从ORM模型转换"""
return cls(
id=str(obj.id),
application_id=obj.application_id,
name=obj.name,
code=obj.code,
description=obj.description or '',
status=obj.status or 'draft',
version=obj.version or 1,
thumbnail=obj.thumbnail or '',
screen_config=obj.screen_config or {},
sort=obj.sort or 0,
access_password=obj.access_password or '',
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
)
class ScreenProjectListOut(BaseModel):
"""大屏项目列表输出(不含screen_config"""
id: str
application_id: Optional[str] = None
name: str
code: str
description: str
status: str
version: int
thumbnail: str
sort: int
access_password: str = Field(default='', description="访问密码")
published_at: Optional[str] = Field(default=None, description="发布时间")
sys_create_datetime: str
sys_update_datetime: str
model_config = ConfigDict(from_attributes=True)
@classmethod
def from_orm_model(cls, obj):
"""从ORM模型转换"""
return cls(
id=str(obj.id),
application_id=obj.application_id,
name=obj.name,
code=obj.code,
description=obj.description or '',
status=obj.status or 'draft',
version=obj.version or 1,
thumbnail=obj.thumbnail or '',
sort=obj.sort or 0,
access_password=obj.access_password or '',
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
)
class ScreenExportOut(BaseModel):
"""大屏配置导出"""
name: str
code: str
description: str
screen_config: Dict[str, Any]
class ScreenImportCheckIn(BaseModel):
"""大屏导入预检查请求"""
code: str = Field(..., description="项目编码")
class ScreenImportCheckOut(BaseModel):
"""大屏导入预检查结果"""
code_exists: bool = Field(..., description="项目编码是否已存在")
can_import: bool = Field(..., description="是否可以直接导入(编码不冲突)")
class ScreenImportIn(BaseModel):
"""大屏配置导入"""
application_id: Optional[str] = Field(None, description="所属应用ID")
name: str = Field(..., description="项目名称")
code: str = Field(..., description="项目编码")
description: str = Field(default='', description="项目描述")
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
class ScreenPublishIn(BaseModel):
"""发布大屏请求"""
access_password: Optional[str] = Field(default=None, description="访问密码")
class ScreenSetPasswordIn(BaseModel):
"""设置访问密码请求"""
access_password: str = Field(default='', description="访问密码,空字符串表示清除密码")