feat:图表交互

This commit is contained in:
2026-10-15 03:38:20 -07:00
parent 565ecf4558
commit 9b64f9fc0b
43 changed files with 1537 additions and 727 deletions
+13
View File
@@ -82,6 +82,7 @@ def _result_text(
"""执行结果:除了动作数量,还给出执行后的画布和每个组件的布局
模型提交后才第一次看到结果,能自己发现位置超出画布、互相重叠、没排整齐等问题再修正;
带显示条件的组件标出条件,不同时显示的组件重叠不算问题;
这一批动过布局或新增的组件前面标 *,这一批删除的单独列出
没有带来变化时也照样给出布局:只说"已经写入"会让模型以为达到了目标,可能当前大屏本来就是这样、并不符合要求
统一说"写入草稿"、"回复 done 时交付":说"已生效"时模型回复 unable 也会说已经改了什么,
@@ -150,15 +151,27 @@ def _result_text(
)
old_layouts = {node.id: node.layout for node in before.nodes}
# 整页切换时不同页的组件放在同一块区域,标出显示条件,模型才不会把它们当成重叠去挪开
lines.append(
f"执行后画布 {after.canvas.width:g}x{after.canvas.height:g},组件布局(* 为本次改动):"
)
if any(node.visibleWhen is not None for node in after.nodes):
lines.append(
"标了「仅 变量=值 时显示」的组件只在变量等于该值时出现,"
"同一变量取不同值的组件不会同时显示,它们之间重叠不算问题"
)
for node in after.nodes:
layout = node.layout
mark = "*" if old_layouts.get(node.id) != layout else " "
condition = (
f" 仅 {node.visibleWhen.var}={json.dumps(node.visibleWhen.equals, ensure_ascii=False)} 时显示"
if node.visibleWhen is not None
else ""
)
lines.append(
f"{mark} {node.id} {node.type} "
f"x={layout.x:g} y={layout.y:g} width={layout.width:g} height={layout.height:g}"
+ condition
)
if removed := [
item for item in old_layouts if item not in {n.id for n in after.nodes}