fix: 模型广场导航找不到目标 — 内联布局替代嵌套urlwidget

根因:TabPanel tab content通过urlwidget加载show_llms.ui时,
urlwidget渲染后替换自身DOM,导致plaza_cards_panel的id丢失,
getWidgetById()返回null。

修复:将左右分栏布局直接内联到model_plaza.ui的TabPanel tab content中,
plaza_cards_panel改为VBox容器(保持id),初始内容通过子urlwidget加载,
点击导航按钮时用mode:replace替换VBox内容。
This commit is contained in:
yumoqing 2026-06-01 13:35:51 +08:00
parent 063e158989
commit fed36ff079

View File

@ -1,3 +1,5 @@
{% set catelogs = get_llmcatelogs() %}
{% set providers = get_llms_sort_by_provider() %}
{
"widgettype": "VBox",
"options": {
@ -42,20 +44,174 @@
"name": "by_catelog",
"label": "按分类",
"content": {
"widgettype": "urlwidget",
"widgettype": "HBox",
"options": {
"url": "{{entire_url('show_llms.ui')}}"
}
"css": "filler",
"width": "100%",
"height": "100%"
},
"subwidgets": [
{
"widgettype": "VScrollPanel",
"options": {
"cwidth": 18,
"height": "100%",
"css": "plaza-sidebar"
},
"subwidgets": [
{
"widgettype": "Button",
"options": {
"label": "全部",
"css": "plaza-nav-btn",
"width": "100%"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "urlwidget",
"target": "app.plaza_cards_panel",
"mode": "replace",
"options": {
"url": "{{entire_url('show_llms_cards.ui')}}"
}
}
]
}{% for cat in catelogs %},
{
"widgettype": "Button",
"options": {
"label": "{{cat.name}}",
"css": "plaza-nav-btn",
"width": "100%"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "urlwidget",
"target": "app.plaza_cards_panel",
"mode": "replace",
"options": {
"url": "{{entire_url('show_llms_cards.ui')}}",
"params": {
"catelogid": "{{cat.id}}"
}
}
}
]
}{% endfor %}
]
},
{
"widgettype": "VBox",
"id": "plaza_cards_panel",
"options": {
"css": "filler",
"cwidth": 82,
"height": "100%"
},
"subwidgets": [
{
"widgettype": "urlwidget",
"options": {
"css": "filler",
"width": "100%",
"height": "100%",
"url": "{{entire_url('show_llms_cards.ui')}}"
}
}
]
}
]
}
},
{
"name": "by_provider",
"label": "按供应商",
"content": {
"widgettype": "urlwidget",
"widgettype": "HBox",
"options": {
"url": "{{entire_url('show_llms_by_providers.ui')}}"
}
"css": "filler",
"width": "100%",
"height": "100%"
},
"subwidgets": [
{
"widgettype": "VScrollPanel",
"options": {
"cwidth": 18,
"height": "100%",
"css": "plaza-sidebar"
},
"subwidgets": [
{
"widgettype": "Button",
"options": {
"label": "全部",
"css": "plaza-nav-btn",
"width": "100%"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "urlwidget",
"target": "app.plaza_provider_panel",
"mode": "replace",
"options": {
"url": "{{entire_url('show_llms_cards_by_provider.ui')}}"
}
}
]
}{% for p in providers %},
{
"widgettype": "Button",
"options": {
"label": "{{p.orgname}}",
"css": "plaza-nav-btn",
"width": "100%"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "urlwidget",
"target": "app.plaza_provider_panel",
"mode": "replace",
"options": {
"url": "{{entire_url('show_llms_cards_by_provider.ui')}}",
"params": {
"providerid": "{{p.id}}"
}
}
}
]
}{% endfor %}
]
},
{
"widgettype": "VBox",
"id": "plaza_provider_panel",
"options": {
"css": "filler",
"cwidth": 82,
"height": "100%"
},
"subwidgets": [
{
"widgettype": "urlwidget",
"options": {
"css": "filler",
"width": "100%",
"height": "100%",
"url": "{{entire_url('show_llms_cards_by_provider.ui')}}"
}
}
]
}
]
}
}
]