mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
Compare commits
3 Commits
26a7a91163
...
d1d2951d00
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1d2951d00 | ||
|
|
93f7c4c719 | ||
|
|
fb0a9813e1 |
@ -1 +1 @@
|
|||||||
__version__: v0.2.4-da6d5b4
|
__version__: v0.2.4-fb0a981
|
||||||
|
|||||||
@ -132,7 +132,7 @@ async def gold_rank(session: Uninfo, group_id: str | None, num: int) -> bytes |
|
|||||||
else TextCell(content=""),
|
else TextCell(content=""),
|
||||||
TextCell(content=uid2name.get(user[0]) or user[0]),
|
TextCell(content=uid2name.get(user[0]) or user[0]),
|
||||||
TextCell(content=str(user[1]), bold=True),
|
TextCell(content=str(user[1]), bold=True),
|
||||||
ImageCell(src=platform_path.resolve().as_uri())
|
ImageCell(src=platform_path)
|
||||||
if (platform_path := PLATFORM_PATH.get(platform))
|
if (platform_path := PLATFORM_PATH.get(platform))
|
||||||
else TextCell(content=""),
|
else TextCell(content=""),
|
||||||
]
|
]
|
||||||
@ -532,15 +532,15 @@ class ShopManage:
|
|||||||
icon = ""
|
icon = ""
|
||||||
if prop.icon:
|
if prop.icon:
|
||||||
icon_path = ICON_PATH / prop.icon
|
icon_path = ICON_PATH / prop.icon
|
||||||
icon = (icon_path, 33, 33) if icon_path.exists() else ""
|
icon = icon_path if icon_path.exists() else ""
|
||||||
|
|
||||||
table_rows.append(
|
table_rows.append(
|
||||||
[
|
[
|
||||||
icon,
|
ImageCell(src=icon, height=33, width=33),
|
||||||
i,
|
TextCell(content=i),
|
||||||
prop.goods_name,
|
TextCell(content=prop.goods_name),
|
||||||
user.props[prop_uuid],
|
TextCell(content=user.props[prop_uuid]),
|
||||||
prop.goods_description,
|
TextCell(content=prop.goods_description),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -91,7 +91,7 @@ class SignManage:
|
|||||||
TextCell(content=uid2name.get(user[0]) or user[0]),
|
TextCell(content=uid2name.get(user[0]) or user[0]),
|
||||||
TextCell(content=str(user[1]), bold=True),
|
TextCell(content=str(user[1]), bold=True),
|
||||||
TextCell(content=str(user[2])),
|
TextCell(content=str(user[2])),
|
||||||
ImageCell(src=platform_path.resolve().as_uri())
|
ImageCell(src=platform_path)
|
||||||
if (platform_path := PLATFORM_PATH.get(platform))
|
if (platform_path := PLATFORM_PATH.get(platform))
|
||||||
else TextCell(content=""),
|
else TextCell(content=""),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
from pathlib import Path
|
||||||
from typing import Literal
|
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 ...models.components.progress_bar import ProgressBar
|
||||||
from .base import RenderableComponent
|
from .base import RenderableComponent
|
||||||
@ -28,7 +30,7 @@ class TextCell(BaseCell):
|
|||||||
"""文本单元格"""
|
"""文本单元格"""
|
||||||
|
|
||||||
type: Literal["text"] = "text" # type: ignore
|
type: Literal["text"] = "text" # type: ignore
|
||||||
content: str
|
content: str | float
|
||||||
bold: bool = False
|
bold: bool = False
|
||||||
color: str | None = None
|
color: str | None = None
|
||||||
|
|
||||||
@ -37,12 +39,18 @@ class ImageCell(BaseCell):
|
|||||||
"""图片单元格"""
|
"""图片单元格"""
|
||||||
|
|
||||||
type: Literal["image"] = "image" # type: ignore
|
type: Literal["image"] = "image" # type: ignore
|
||||||
src: str
|
src: str | Path
|
||||||
width: int = 40
|
width: int = 40
|
||||||
height: int = 40
|
height: int = 40
|
||||||
shape: Literal["square", "circle"] = "square"
|
shape: Literal["square", "circle"] = "square"
|
||||||
alt: str = "image"
|
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):
|
class StatusBadgeCell(BaseCell):
|
||||||
"""状态徽章单元格"""
|
"""状态徽章单元格"""
|
||||||
@ -62,9 +70,12 @@ class RichTextCell(BaseCell):
|
|||||||
"""富文本单元格,支持多个带样式的文本片段"""
|
"""富文本单元格,支持多个带样式的文本片段"""
|
||||||
|
|
||||||
type: Literal["rich_text"] = "rich_text" # type: ignore
|
type: Literal["rich_text"] = "rich_text" # type: ignore
|
||||||
spans: list[TextSpan] = Field(default_factory=list, description="文本片段列表")
|
spans: list[TextSpan] = []
|
||||||
direction: Literal["column", "row"] = Field("column", description="片段排列方向")
|
"""文本片段列表"""
|
||||||
gap: str = Field("4px", description="片段之间的间距")
|
direction: Literal["column", "row"] = "column"
|
||||||
|
"""片段排列方向"""
|
||||||
|
gap: str = "4px"
|
||||||
|
"""片段之间的间距"""
|
||||||
|
|
||||||
|
|
||||||
TableCell = (
|
TableCell = (
|
||||||
@ -84,16 +95,18 @@ class TableData(RenderableComponent):
|
|||||||
"""通用表格的数据模型"""
|
"""通用表格的数据模型"""
|
||||||
|
|
||||||
style_name: str | None = None
|
style_name: str | None = None
|
||||||
title: str = Field(..., description="表格主标题")
|
title: str
|
||||||
tip: str | None = Field(None, description="表格下方的提示信息")
|
"""表格主标题"""
|
||||||
headers: list[str] = Field(default_factory=list, description="表头列表")
|
tip: str | None = None
|
||||||
rows: list[list[TableCell]] = Field(default_factory=list, description="数据行列表")
|
"""表格下方的提示信息"""
|
||||||
column_alignments: list[Literal["left", "center", "right"]] | None = Field(
|
headers: list[str] = [] # noqa: RUF012
|
||||||
default=None, description="每列的对齐方式"
|
"""表头列表"""
|
||||||
)
|
rows: list[list[TableCell]] = [] # noqa: RUF012
|
||||||
column_widths: list[str | int] | None = Field(
|
"""数据行列表"""
|
||||||
default=None, description="每列的宽度 (e.g., ['50px', 'auto', 100])"
|
column_alignments: list[Literal["left", "center", "right"]] | None = None
|
||||||
)
|
"""每列的对齐方式"""
|
||||||
|
column_widths: list[str | int] | None = None
|
||||||
|
"""每列的宽度 (e.g., ['50px', 'auto', 100])"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def template_name(self) -> str:
|
def template_name(self) -> str:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user