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
+1
View File
@@ -41,6 +41,7 @@ describe_data 为准
- 指标卡(stat-card)的数值、对比的变化量和迷你趋势线的数据(trend.data)也写 $query:数值和变化量的查询结果要一行一列,
环比、同比在 SQL 里算好;趋势数据只选数值一列,按时间 ORDER BY
- 用了 $query 的新增组件不用写 sample_data,后端会设为 false;标题按数据的内容写
- 会被变量筛选的组件(filters,见 screen-interaction):$query 不对筛选字段加 WHERE,结果带上这一列,由前端按变量筛选
## 数据不合适时
+1 -1
View File
@@ -15,7 +15,7 @@ description: 新建大屏,或在大屏上新增组件、整体重新布局、
## 布局
- 位置和尺寸参考物料的默认尺寸,按画布大小安排;新组件不与已有组件重叠
- 位置和尺寸参考物料的默认尺寸,按画布大小安排;新组件不与已有组件重叠,不同时显示的(显示条件是同一变量的不同取值)除外
- 画布上没有空位时,可以移动或缩小已有组件给新组件腾出位置,不改它们的内容
- 多个组件对齐排列,之间留出间距
- 有指标卡时排在标题下方一行,同一行的指标卡等宽等高;图表放在指标卡下方
+39
View File
@@ -0,0 +1,39 @@
---
name: screen-interaction
description: 给大屏加交互:点击切换整页内容、点击图表钻取明细、选择器筛选数据、标题跟着选择变化。例如"做成两页,顶部导航切换销售和库存""点柱状图里的某个模型,下面显示这个模型的明细""加一个模型选择器"
---
# 大屏交互
交互都靠大屏变量:点击写变量,组件读变量。变量、显示条件、筛选、事件的写法见 update_canvas 和 set_interaction 的参数说明
点击交互只在预览和线上页运行;编辑器画布不执行事件,显示变量默认值下的样子,可以用「预览变量值」切换查看。告诉用户到预览里点击验证。整批通过检查就说明变量、筛选、事件的引用都对得上,回复里直接说明点哪里会切换什么,不要说"可能不生效""还未确认"
## 步骤
1. 用 update_canvas 在 variables 里声明变量(整组替换,保留已有的变量);默认值取数据里存在的值,类型和数据一致("1" 与 1 不等)
2. 加组件、写数据,再用 set_interaction 给组件设显示条件、筛选和事件;同一批里先后顺序不限,整批执行完才检查引用
3. 提交后按 apply_actions 的结果核对:引用对不上会整批报错,按提示修正后重新提交
## 整页切换
- 用选项导航(nav):props.var 写变量 ID,items 每项是一页(label 页名,value 写进变量的值);点击选项写变量不用配事件
- 每页的组件用 set_interaction 写 visibleWhen:{"var": "page", "equals": "该页的 value"}
- 不同页的组件可以放在同一块区域,它们不会同时显示;导航和大屏标题这类各页共用的组件不写 visibleWhen
## 钻取
- 主图表用 itemClick 事件写变量:{"type": "itemClick", "action": {"setVar": "model", "fromField": "model"}},fromField 是数据行里的列;被点的数据项会显示为选中
- 明细组件用 filters 按变量筛选:{"field": "model", "var": "model"};field 是它自己数据行里的列
- 被筛选的组件的 $query 不要对筛选字段加 WHERE,结果要带上这一列,前端按变量筛选
- 也可以加一个 nav 做选择器:items 写 $query,例如 SELECT DISTINCT model AS label, model AS value FROM t ORDER BY 1
## 明细指标卡
- 指标卡写 rows 和 bind:rows 是按筛选字段汇总好的数据行(每个筛选值一行),bind 把列绑定到字段,例如 {"value": "calls", "compare.value": "calls_mom", "trend.data": "trend"}
- rows 用 $query,趋势列用数组,例如 SELECT model, SUM(calls) AS calls, list(calls ORDER BY day) AS trend FROM (按模型、日期汇总) GROUP BY model
- 再用 set_interaction 给它写 filters,和钻取的明细组件一样
## 标题跟着变
- 文本内容写 {{变量ID}},例如"{{model}} 调用明细";变量为 null 时那一段为空