mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-05 20:00:04 +08:00
fix(ui): 修复表格组件中对本地图片的显示问题 (#2047)
检查bot是否运行正常 / bot check (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled
Sequential Lint and Type Check / ruff-call (push) Has been cancelled
Release Drafter / Update Release Draft (push) Has been cancelled
Force Sync to Aliyun / sync (push) Has been cancelled
Update Version / update-version (push) Has been cancelled
Sequential Lint and Type Check / pyright-call (push) Has been cancelled
检查bot是否运行正常 / bot check (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled
Sequential Lint and Type Check / ruff-call (push) Has been cancelled
Release Drafter / Update Release Draft (push) Has been cancelled
Force Sync to Aliyun / sync (push) Has been cancelled
Update Version / update-version (push) Has been cancelled
Sequential Lint and Type Check / pyright-call (push) Has been cancelled
- 在 ImageCell 中添加对 Path 类型的支持,并在验证器中处理路径解析 - 优化 ShopManage 和 SignManage 类中的代码,使用新的 ImageCell 构造方式 - 更新 TableData 类中的注释,提高代码可读性
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
from pathlib import Path
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from nonebot.compat import field_validator
|
||||
from pydantic import BaseModel
|
||||
|
||||
from ...models.components.progress_bar import ProgressBar
|
||||
from .base import RenderableComponent
|
||||
@@ -28,7 +30,7 @@ class TextCell(BaseCell):
|
||||
"""文本单元格"""
|
||||
|
||||
type: Literal["text"] = "text" # type: ignore
|
||||
content: str
|
||||
content: str | float
|
||||
bold: bool = False
|
||||
color: str | None = None
|
||||
|
||||
@@ -37,12 +39,18 @@ class ImageCell(BaseCell):
|
||||
"""图片单元格"""
|
||||
|
||||
type: Literal["image"] = "image" # type: ignore
|
||||
src: str
|
||||
src: str | Path
|
||||
width: int = 40
|
||||
height: int = 40
|
||||
shape: Literal["square", "circle"] = "square"
|
||||
alt: str = "image"
|
||||
|
||||
@field_validator("src", mode="before")
|
||||
def validate_src(cls, v: str) -> str:
|
||||
if isinstance(v, Path):
|
||||
v = v.resolve().as_uri()
|
||||
return v
|
||||
|
||||
|
||||
class StatusBadgeCell(BaseCell):
|
||||
"""状态徽章单元格"""
|
||||
@@ -62,9 +70,12 @@ class RichTextCell(BaseCell):
|
||||
"""富文本单元格,支持多个带样式的文本片段"""
|
||||
|
||||
type: Literal["rich_text"] = "rich_text" # type: ignore
|
||||
spans: list[TextSpan] = Field(default_factory=list, description="文本片段列表")
|
||||
direction: Literal["column", "row"] = Field("column", description="片段排列方向")
|
||||
gap: str = Field("4px", description="片段之间的间距")
|
||||
spans: list[TextSpan] = []
|
||||
"""文本片段列表"""
|
||||
direction: Literal["column", "row"] = "column"
|
||||
"""片段排列方向"""
|
||||
gap: str = "4px"
|
||||
"""片段之间的间距"""
|
||||
|
||||
|
||||
TableCell = (
|
||||
@@ -84,16 +95,18 @@ class TableData(RenderableComponent):
|
||||
"""通用表格的数据模型"""
|
||||
|
||||
style_name: str | None = None
|
||||
title: str = Field(..., description="表格主标题")
|
||||
tip: str | None = Field(None, description="表格下方的提示信息")
|
||||
headers: list[str] = Field(default_factory=list, description="表头列表")
|
||||
rows: list[list[TableCell]] = Field(default_factory=list, description="数据行列表")
|
||||
column_alignments: list[Literal["left", "center", "right"]] | None = Field(
|
||||
default=None, description="每列的对齐方式"
|
||||
)
|
||||
column_widths: list[str | int] | None = Field(
|
||||
default=None, description="每列的宽度 (e.g., ['50px', 'auto', 100])"
|
||||
)
|
||||
title: str
|
||||
"""表格主标题"""
|
||||
tip: str | None = None
|
||||
"""表格下方的提示信息"""
|
||||
headers: list[str] = [] # noqa: RUF012
|
||||
"""表头列表"""
|
||||
rows: list[list[TableCell]] = [] # noqa: RUF012
|
||||
"""数据行列表"""
|
||||
column_alignments: list[Literal["left", "center", "right"]] | None = None
|
||||
"""每列的对齐方式"""
|
||||
column_widths: list[str | int] | None = None
|
||||
"""每列的宽度 (e.g., ['50px', 'auto', 100])"""
|
||||
|
||||
@property
|
||||
def template_name(self) -> str:
|
||||
|
||||
Reference in New Issue
Block a user