docs: add steady trend page design

This commit is contained in:
2026-05-14 16:28:48 +08:00
parent f7d297decf
commit b6006e0dfe

View File

@@ -0,0 +1,237 @@
# 稳态数据历史趋势页面设计
## 1. 背景
当前 `frontend/src/views/steady/steadyDataView/index.vue` 是稳态数据分页列表页,已接入:
- `POST /steady/data/view/page`
- `POST /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 初始化
1. 页面加载。
2. 调用 `getAddLedgerTree()` 获取真实台账树。
3. 归一化台账节点。
4. 初始化指标树和默认查询条件。
5. 如果存在可用监测点,则默认选中第一个监测点和第一个电压指标,生成模拟趋势。
### 5.2 查询
1. 用户选择台账节点、指标、相别、统计类型和时间范围。
2. 页面构造查询上下文。
3. 执行前端限制校验。
4. 调用模拟数据生成函数。
5. 生成图表 option 和统计摘要。
6. 更新趋势图与右侧摘要。
### 5.3 重置
重置恢复:
- 默认近 24 小时时间范围。
- 默认统计类型为平均值。
- 默认相别为 A、B、C。
- 默认选中首个可用测点和电压有效值指标。
## 6. 文件设计
预计新增或修改:
- `frontend/src/views/steady/steadyDataView/index.vue`
- `frontend/src/views/steady/steadyDataView/components/TrendToolbar.vue`
- `frontend/src/views/steady/steadyDataView/components/TrendLedgerTree.vue`
- `frontend/src/views/steady/steadyDataView/components/TrendIndicatorTree.vue`
- `frontend/src/views/steady/steadyDataView/components/TrendChartPanel.vue`
- `frontend/src/views/steady/steadyDataView/components/TrendSummaryPanel.vue`
- `frontend/src/views/steady/steadyDataView/components/types.ts`
- `frontend/src/views/steady/steadyDataView/utils/ledgerTree.ts`
- `frontend/src/views/steady/steadyDataView/utils/indicatorCatalog.ts`
- `frontend/src/views/steady/steadyDataView/utils/mockTrendData.ts`
- `frontend/src/views/steady/steadyDataView/utils/trendChart.ts`
- `frontend/src/views/steady/steadyDataView/utils/trendQuery.ts`
现有 `utils/queryParams.ts` 只服务原列表页。页面替换后可保留不引用,避免额外删除历史代码;如果类型检查或 lint 提示未使用,再按最小范围清理本次造成的问题。
## 7. 样式原则
- 不使用营销式 hero。
- 不额外叠加页面级外边距。
- 工作区以紧凑、可扫描为主。
- 卡片只用于明确的工具面板,不做多层卡片嵌套。
- 按钮沿用业务页按钮约定。
- 图表区域需要稳定高度,避免查询条件变化造成布局跳动。
## 8. 验证方案
默认不执行重型构建。
建议验证:
1. 代码结构:`index.vue` 只保留编排、状态和事件分发。
2. 台账真实数据:页面调用 `getAddLedgerTree()`,空数据时显示空状态。
3. 指标模拟数据:指标树包含电压、电流、频率、谐波、功率、闪变分组。
4. 查询限制:多测点多指标、超 8 测点、超 8 指标、超 24 曲线时有明确提示。
5. 图表展示查询后折线图、图例、tooltip、dataZoom 可用。
6. 统计摘要最大值、平均值、最小值、CP95 随当前模拟序列更新。
7. 谐波模式:选择谐波指标后显示次数选择和模式切换。
8. 轻量命令:优先执行 `cd frontend; npm run type-check`,必要时执行 `npm run lint`
## 9. 风险与注意事项
- 台账接口是真实数据,页面需要处理接口失败、空树和节点字段大小写不一致。
- 趋势和统计是模拟数据,界面上应避免让用户误以为已经接入 InfluxDB。
- 当前页面替换原列表后,原导出入口会暂时不可见。
- 后续接真实趋势接口时,需要补充 API 类型、接口封装和异常处理。
## 10. 结论
本设计按用户确认的 B 方案将 `steadyDataView` 直接改造为稳态历史趋势页面。第一版使用真实台账树验证业务选择路径,其余趋势相关数据全部使用前端模拟数据,以最小改动先完成页面结构、交互和视觉验证。