8.2 KiB
稳态数据历史趋势页面设计
1. 背景
当前 frontend/src/views/steady/steadyDataView/index.vue 是稳态数据分页列表页,已接入:
POST /steady/data/view/pagePOST /steady/data/view/export
同目录下已有 2026-05-14-steady-data-view-trend-design.md,定义了稳态历史趋势能力:台账树、指标树、趋势查询、按天加载、统计摘要和谐波展示策略。
本次页面设计按用户确认的 B 方案执行:直接将当前 steadyDataView 页面改造成“稳态历史趋势”页面,暂不保留原分页列表视图。
2. 已确认范围
2.1 页面目标
在 steadyDataView 页面内展示稳态历史趋势工作台,用于先验证趋势页面交互和展示结构。
2.2 数据来源
- 台账树使用真实数据,优先复用
tools/addLedger的getAddLedgerTree()。 - 指标树使用前端模拟数据。
- 趋势曲线使用前端模拟数据。
- 当前范围统计摘要使用前端模拟数据。
- 谐波趋势、谱图和 TopN 第一版均使用模拟数据和模拟面板,不接真实后端。
2.3 不在本次范围
- 不实现 InfluxDB 真实查询。
- 不新增后端接口。
- 不保留原稳态分页表入口。
- 不执行重型构建、打包或 Electron 构建。
3. 推荐方案
采用“真实台账 + 前端模拟趋势”的最小落地方案。
页面入口仍为:
frontend/src/views/steady/steadyDataView/index.vue
页面按现有复杂页面拆分约定维护:
index.vue只保留布局编排、顶层状态、接口调用流程和事件分发。components/放台账树、指标树、查询工具栏、趋势图、统计摘要等展示组件。utils/放指标目录、台账归一化、模拟趋势生成、统计计算、图表配置构造等纯函数。
该方案后续接真实接口时,只需要将 utils/mockTrendData 替换为 API 调用,并保持组件 props / emits 基本稳定。
4. 页面布局
页面采用三栏工作台结构,不叠加页面级外边距,跟随 el-main 默认 15px 内容区。
4.1 顶部查询区
顶部查询区固定在页面上方,包含:
- 时间范围选择,默认近 24 小时。
- 统计类型选择:平均值、最大值、最小值、CP95。
- 相别选择:A、B、C 或 T,根据当前指标动态可用。
- 查询按钮。
- 重置按钮。
查询按钮使用 type="primary",重置使用 type="primary" plain。
4.2 左侧台账树
左侧上半区展示真实台账树:
- 工程
- 项目
- 设备
- 监测点
台账树支持搜索和勾选。
选择规则:
- 选中监测点时,直接作为趋势查询的测点。
- 选中设备、项目、工程时,自动收集下级监测点。
- 第一版前端限制最多 8 个监测点参与查询,超过时给出提示。
当真实台账接口不可用或返回空时,页面显示空状态,不自动伪造台账树。这样可以明确区分真实台账数据与模拟趋势数据。
4.3 左侧指标树
左侧下半区展示模拟指标树,分组包括:
- 电压趋势
- 电流趋势
- 频率趋势
- 谐波趋势
- 功率趋势
- 闪变趋势
指标叶子节点包含:
- 指标编码
- 指标名称
- 单位
- 支持相别
- 支持统计类型
- 是否谐波指标
查询模式限制:
- 多测点查询时,只允许选择一个指标。
- 单测点查询时,允许选择多个指标,最多 8 个。
- 单次生成曲线不超过 24 条,超过时提示缩小选择范围。
4.4 中间趋势图区
中间区域展示 ECharts 折线图,复用已有 frontend/src/components/echarts/line/index.vue。
图表能力:
- 多序列折线。
- 图例开关。
- tooltip。
- dataZoom。
- 采样信息展示,包括原始点数、展示点数、bucket。
趋势点位由前端根据当前测点、指标、相别、统计类型和时间范围生成模拟数据。模拟数据应保持不同指标的数值区间差异,例如:
- 电压约
210-235V - 电流约
20-120A - 频率约
49.8-50.2Hz - 功率约
20-900kW - 闪变约
0.2-1.2 - 谐波含量约
0-8%
4.5 右侧统计摘要
右侧展示当前查询结果的统计摘要:
- 最大值
- 平均值
- 最小值
- CP95
摘要以序列为维度展示,可滚动。每个摘要项展示测点、指标、相别、统计类型、单位和值。
4.6 谐波扩展区
当选中谐波类指标时,趋势图上方显示:
- 谐波次数选择,范围 2-50,第一版默认选 3、5、7 次。
- 趋势 / 谱图 / TopN 切换。
第一版规则:
- 趋势模式展示所选谐波次数的模拟趋势曲线。
- 谱图模式展示当前时刻的模拟谐波柱状数据。
- TopN 模式展示当前范围内模拟 TopN 排名。
5. 数据流
5.1 初始化
- 页面加载。
- 调用
getAddLedgerTree()获取真实台账树。 - 归一化台账节点。
- 初始化指标树和默认查询条件。
- 如果存在可用监测点,则默认选中第一个监测点和第一个电压指标,生成模拟趋势。
5.2 查询
- 用户选择台账节点、指标、相别、统计类型和时间范围。
- 页面构造查询上下文。
- 执行前端限制校验。
- 调用模拟数据生成函数。
- 生成图表 option 和统计摘要。
- 更新趋势图与右侧摘要。
5.3 重置
重置恢复:
- 默认近 24 小时时间范围。
- 默认统计类型为平均值。
- 默认相别为 A、B、C。
- 默认选中首个可用测点和电压有效值指标。
6. 文件设计
预计新增或修改:
frontend/src/views/steady/steadyDataView/index.vuefrontend/src/views/steady/steadyDataView/components/TrendToolbar.vuefrontend/src/views/steady/steadyDataView/components/TrendLedgerTree.vuefrontend/src/views/steady/steadyDataView/components/TrendIndicatorTree.vuefrontend/src/views/steady/steadyDataView/components/TrendChartPanel.vuefrontend/src/views/steady/steadyDataView/components/TrendSummaryPanel.vuefrontend/src/views/steady/steadyDataView/components/types.tsfrontend/src/views/steady/steadyDataView/utils/ledgerTree.tsfrontend/src/views/steady/steadyDataView/utils/indicatorCatalog.tsfrontend/src/views/steady/steadyDataView/utils/mockTrendData.tsfrontend/src/views/steady/steadyDataView/utils/trendChart.tsfrontend/src/views/steady/steadyDataView/utils/trendQuery.ts
现有 utils/queryParams.ts 只服务原列表页。页面替换后可保留不引用,避免额外删除历史代码;如果类型检查或 lint 提示未使用,再按最小范围清理本次造成的问题。
7. 样式原则
- 不使用营销式 hero。
- 不额外叠加页面级外边距。
- 工作区以紧凑、可扫描为主。
- 卡片只用于明确的工具面板,不做多层卡片嵌套。
- 按钮沿用业务页按钮约定。
- 图表区域需要稳定高度,避免查询条件变化造成布局跳动。
8. 验证方案
默认不执行重型构建。
建议验证:
- 代码结构:
index.vue只保留编排、状态和事件分发。 - 台账真实数据:页面调用
getAddLedgerTree(),空数据时显示空状态。 - 指标模拟数据:指标树包含电压、电流、频率、谐波、功率、闪变分组。
- 查询限制:多测点多指标、超 8 测点、超 8 指标、超 24 曲线时有明确提示。
- 图表展示:查询后折线图、图例、tooltip、dataZoom 可用。
- 统计摘要:最大值、平均值、最小值、CP95 随当前模拟序列更新。
- 谐波模式:选择谐波指标后显示次数选择和模式切换。
- 轻量命令:优先执行
cd frontend; npm run type-check,必要时执行npm run lint。
9. 风险与注意事项
- 台账接口是真实数据,页面需要处理接口失败、空树和节点字段大小写不一致。
- 趋势和统计是模拟数据,界面上应避免让用户误以为已经接入 InfluxDB。
- 当前页面替换原列表后,原导出入口会暂时不可见。
- 后续接真实趋势接口时,需要补充 API 类型、接口封装和异常处理。
10. 结论
本设计按用户确认的 B 方案将 steadyDataView 直接改造为稳态历史趋势页面。第一版使用真实台账树验证业务选择路径,其余趋势相关数据全部使用前端模拟数据,以最小改动先完成页面结构、交互和视觉验证。