状态:已实现(2026-07)
受众:前端、全栈、架构评审、AI Agent
产品说明:完整产品能力 · 状态驱动交互引擎
实现 spec(权威):DataView/spec/development/dashboard-interact-engine.md
仪表盘交互需要同时支持:
设计目标是:高性能、单向数据流、可测试、可 URL 恢复,避免事件网失控。
历史上常见三类做法,DataLuminary 只采用第三列:
| 模式 | 核心思路 | 优点 | 缺点 | DataLuminary |
|---|---|---|---|---|
| 全局共享模式 | 所有图表读同一个大 filters 对象 |
实现简单 | 任一条件变化易触发全盘重算/重渲染 | 不采用 |
| 事件驱动模式 | emit / on 图表互抛事件 |
局部改动快 | 流向隐式、难调试、难做 URL 状态恢复,易成“意大利面条” | 不采用 |
| 状态驱动 + 派生订阅 | 最小运行时状态 + 纯函数引擎按图派生条件 | 单向流、细粒度订阅、可测、可序列化 | 需维护 FilterEngine 规则 | 采用 |
说明:
| 路径 | 职责 |
|---|---|
src/types/interact.ts |
Action Scope、Linkage 配置类型 |
src/store/dashboardRuntime.ts |
actionValues / linkValues / drillStates |
src/utils/filterEngine.ts |
computeForPanel 纯函数派生 |
src/components/wrapper/panel-wrapper/ |
订阅派生条件、点击上抛、下钻面包屑 |
src/plugins/actions/selector/ |
下拉选择器 |
src/plugins/actions/shared/ActionChooseRange.tsx |
作用域配置 |
src/pages/dashboard/editor/.../LinkageEditor.tsx |
联动配置侧栏 |
DashboardRuntimeStore(不直接改其他图表)。FilterEngine.computeForPanel。extraWheres / sqlVariables 实质变化时,useGetData 重新请求。where;SQL 模式传递 sqlVariables({{flag}})。isDrilled / drillDown;标题区面包屑回退。| 配置项 | 作用 |
|---|---|
| 筛选数据的值字段 / 标签字段 | 决定下拉框选项从哪来 |
| 选择作用范围的对应字段 | 决定选中值去过滤图表上的哪一列 |
rawName。actionValues[组件标识]。FilterEngine 判断该图是否落在 Scope 内。= / IN 条件到图表 where,再请求 /query/panel。{{组件标识}} 引用同一 Flag。逐步说明与匹配规则见 DataView 实现 spec §4。
useRenderG2Chart 统一绑定 element:click,经 onPlotClick 写入 Runtime Store。av(JSON)同步 actionValues,支持筛选状态分享;离开页面重置运行时状态。filters 对象让全部图表无差别订阅。| 文档 | 位置 |
|---|---|
| 产品优势 | product/features.md |
| 前端实现 spec | DataView/spec/development/dashboard-interact-engine.md |
| MetaRepo 索引 | spec/development/dashboard-interact-overview.md |
| 仪表盘全局过滤(非本引擎) | dashboard-global-filters.md |