mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-09-28 16:20:56 +08:00
- 新增页面模板服务模块,提供页面模板配置、字段定义和数据验证功能。 - 实现了前端布局组件模型,包括行、列、文本、按钮、卡片等,支持灵活的页面布局。 - 引入 FastAPI 路由,提供统一的API接口以获取模板配置和处理数据提交。 - 注册用户表单模板示例,包含提交、重置和取消按钮的功能。 - 增强了数据验证和处理逻辑,确保提交数据的有效性和安全性。
129 lines
4.5 KiB
Python
129 lines
4.5 KiB
Python
from typing import Any
|
|
|
|
from nonebot.plugin import PluginMetadata
|
|
from nonebot.rule import to_me
|
|
from nonebot_plugin_alconna import Alconna, Arparma, on_alconna
|
|
from nonebot_plugin_uninfo import Uninfo
|
|
from pydantic import BaseModel, Field
|
|
|
|
from zhenxun.configs.utils import PluginExtraData
|
|
from zhenxun.services.log import logger
|
|
from zhenxun.services.page_template import PageTemplateConfig, template_manager
|
|
from zhenxun.services.page_template.components import (
|
|
Button,
|
|
ButtonProps,
|
|
Col,
|
|
ColProps,
|
|
Form,
|
|
FormItem,
|
|
FormItemProps,
|
|
FormProps,
|
|
Row,
|
|
RowProps,
|
|
)
|
|
|
|
__plugin_meta__ = PluginMetadata(
|
|
name="web测试",
|
|
description="想要更加了解真寻吗",
|
|
usage="""
|
|
指令:
|
|
关于
|
|
""".strip(),
|
|
extra=PluginExtraData(author="HibiKier", version="0.1", menu_type="其他").to_dict(),
|
|
)
|
|
|
|
|
|
_matcher = on_alconna(Alconna("test"), priority=5, block=True, rule=to_me())
|
|
|
|
|
|
@_matcher.handle()
|
|
async def _(session: Uninfo, arparma: Arparma):
|
|
logger.info("1")
|
|
|
|
|
|
def temp(a: dict[str, Any]):
|
|
pass
|
|
|
|
|
|
class UserFormData(BaseModel):
|
|
username: str = Field(..., min_length=3, max_length=20)
|
|
email: str
|
|
age: int | None = None
|
|
|
|
|
|
def register_user_form_template():
|
|
# 使用 list[Any] 避免 list 协变导致的类型告警
|
|
layout: list[Any] = [
|
|
Row(
|
|
props=RowProps(gutter=16),
|
|
children=[
|
|
Col(
|
|
props=ColProps(span=12),
|
|
children=[
|
|
Form(
|
|
props=FormProps(label_width="100px", inline=True),
|
|
children=[
|
|
FormItem(
|
|
props=FormItemProps(
|
|
label="用户名", prop="username"
|
|
),
|
|
children=None,
|
|
bind_field="username",
|
|
),
|
|
FormItem(
|
|
props=FormItemProps(label="邮箱", prop="email"),
|
|
children=None,
|
|
bind_field="email",
|
|
),
|
|
FormItem(
|
|
props=FormItemProps(label="年龄", prop="age"),
|
|
children=None,
|
|
bind_field="age",
|
|
),
|
|
FormItem(
|
|
props=FormItemProps(label=""),
|
|
children=[
|
|
Button(
|
|
props=ButtonProps(
|
|
text="提交",
|
|
type="primary",
|
|
action="submit",
|
|
confirm=True,
|
|
confirm_text="确认提交吗?",
|
|
),
|
|
),
|
|
Button(
|
|
props=ButtonProps(
|
|
text="重置",
|
|
type="default",
|
|
action="reset", # 前端重置表单
|
|
),
|
|
),
|
|
Button(
|
|
props=ButtonProps(
|
|
text="取消",
|
|
type="danger",
|
|
action="cancel", # 前端自行关闭/返回
|
|
),
|
|
),
|
|
],
|
|
bind_field=None,
|
|
),
|
|
],
|
|
)
|
|
],
|
|
)
|
|
],
|
|
)
|
|
]
|
|
|
|
config = PageTemplateConfig(
|
|
template_id="user_form",
|
|
title="用户表单示例",
|
|
description="包含提交/重置/取消按钮的示例表单",
|
|
layout=layout,
|
|
callback_handler=temp,
|
|
)
|
|
|
|
template_manager.register(config, data_model=UserFormData)
|