{ "widgettype": "VBox", "options": { "width": "100%", "height": "100%", "padding": "20px", "backgroundColor": "#F5F7FA" }, "subwidgets": [ { "widgettype": "Text", "options": { "label": "PBL 基础域薄扩展 (M8) — world / scene / entity 契约导航", "fontSize": "22px", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "薄扩展边界:仅新增关联表 pbl_domain_ref,不修改 world / scene / entity 三张基表结构 (Q-OPEN-3)。下列 13 个契约入口的 url 一律使用 entire_url 包裹的 /pbl_domain_ext/api/xxx.dspy 绝对路径(module-development-spec 2.1 / 2.3c),避免 RBAC 403 与路由错误。", "fontSize": "13px", "color": "#666666", "marginTop": "6px" } }, { "widgettype": "Text", "options": { "label": "一、关联表 pbl_domain_ref 契约(6)", "fontSize": "16px", "marginTop": "18px", "fontWeight": "bold" } }, { "widgettype": "ResponsableBox", "options": { "gap": "16px", "minWidth": "250px" }, "subwidgets": [ { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_list.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "1. 关联记录列表 pbl_domain_ref_list", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 tenant_id / ref_type / class_id / team_id 分页查询关联记录", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_get.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "2. 关联记录详情 pbl_domain_ref_get", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 id 取单条关联记录(含 ext_json 解析结果)", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_bind.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "3. 绑定 pbl_domain_ref_bind", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "幂等建立 ref_type+ref_id 与蓝图/班级/团队的关联", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_update.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "4. 更新 pbl_domain_ref_update", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "更新 ext_json / blueprint_id / class_id / team_id(租户与归属校验)", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_unbind.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "5. 解绑 pbl_domain_ref_unbind", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "删除关联记录(不级联删除基表 world/scene/entity)", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_domain_ref_check_access.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "6. 访问判定 pbl_domain_ref_check_access", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "判定当前租户/班级/团队是否可访问指定 ref_type+ref_id", "fontSize": "12px", "color": "#888888" } } ] } ] }, { "widgettype": "Text", "options": { "label": "二、基础域只读查询契约 world / scene / entity(4)", "fontSize": "16px", "marginTop": "18px", "fontWeight": "bold" } }, { "widgettype": "ResponsableBox", "options": { "gap": "16px", "minWidth": "250px" }, "subwidgets": [ { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_world_list_by_tenant.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "7. 世界列表 pbl_world_list_by_tenant", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "读基表 world + 关联表过滤,返回本租户可见世界", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_world_get_context.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "8. 世界上下文 pbl_world_get_context", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "聚合 world 与其下 scene/entity 关联,供运行时取上下文", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_scene_list_by_world.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "9. 场景列表 pbl_scene_list_by_world", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 world_id 读基表 scene + 关联表过滤", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_entity_list_by_scene.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "10. 实体列表 pbl_entity_list_by_scene", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 scene_id 读基表 entity + 关联表过滤", "fontSize": "12px", "color": "#888888" } } ] } ] }, { "widgettype": "Text", "options": { "label": "三、班级 / 团队维度契约(3)", "fontSize": "16px", "marginTop": "18px", "fontWeight": "bold" } }, { "widgettype": "ResponsableBox", "options": { "gap": "16px", "minWidth": "250px" }, "subwidgets": [ { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_team_bind_world.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "11. 团队绑定世界 pbl_team_bind_world", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "写 pbl_domain_ref(ref_type=world, team_id=...),幂等", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_team_list_by_class.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "12. 班级下团队 pbl_team_list_by_class", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 class_id 聚合关联表,返回团队与其绑定的世界", "fontSize": "12px", "color": "#888888" } } ] }, { "widgettype": "VBox", "options": { "backgroundColor": "#FFFFFF", "padding": "20px", "cursor": "pointer", "borderRadius": "6px" }, "binds": [ { "wid": "self", "event": "click", "actiontype": "urlwidget", "target": "app.pbl_domain_ext_content", "options": { "url": "{{entire_url('/pbl_domain_ext/api/pbl_team_world_list.dspy')}}?_webbricks_=1" }, "mode": "replace" } ], "subwidgets": [ { "widgettype": "Text", "options": { "label": "13. 团队世界清单 pbl_team_world_list", "fontWeight": "bold" } }, { "widgettype": "Text", "options": { "label": "按 team_id 返回该团队可访问的世界列表", "fontSize": "12px", "color": "#888888" } } ] } ] }, { "widgettype": "VBox", "id": "pbl_domain_ext_content", "options": { "width": "100%", "flex": "1", "marginTop": "20px", "backgroundColor": "#FFFFFF", "padding": "12px", "borderRadius": "6px" } } ] }