feat(steady): 完善稳态数据视图功能

- 更新纵坐标刻度算法,优化小数趋势图范围显示
- 添加稳态趋势图全屏模式和共享工具组件
- 实现多图联动的鼠标悬停竖线同步功能
- 调整主线线宽分档策略,降低最大线宽限制
- 重构稳态趋势工具栏,优化谐波次数选择逻辑
- 添加周时间周期搜索支持和自定义时间范围选择
- 完善稳态数据表格和指示器浮动面板功能
- 优化稳态趋势图性能,添加LTB采样和动画控制
- 修复数据表格打开前的趋势数据验证问题
- 统一时间轴标签格式化和网格对齐处理
This commit is contained in:
2026-05-27 08:06:12 +08:00
parent b9ddfb5275
commit 055e69fff7
83 changed files with 9616 additions and 226 deletions

View File

@@ -16,3 +16,9 @@ export const querySteadyTrend = (params: SteadyDataView.SteadyTrendQueryParams)
export const querySteadyTrendDay = (params: SteadyDataView.SteadyTrendQueryParams) => {
return http.post<SteadyDataView.SteadyTrendQueryResult>('/steady/data-view/trend/day', params, { loading: false })
}
export const querySteadyChecksquare = (params: SteadyDataView.SteadyChecksquareQueryParams) => {
return http.post<SteadyDataView.SteadyChecksquareQueryResult>('/steady/data-view/checksquare/query', params, {
loading: false
})
}

View File

@@ -59,6 +59,7 @@ export namespace SteadyDataView {
indicatorName?: string
seriesName?: string
phase?: string
harmonicOrder?: number
statType?: SteadyTrendStatType
unit?: string
points: SteadyTrendPoint[]
@@ -70,7 +71,69 @@ export namespace SteadyDataView {
sourcePointCount?: number
displayPointCount?: number
loadableDays?: string[]
queryTimeStart?: string
queryTimeEnd?: string
queryCompleted?: boolean
series: SteadyTrendSeries[]
}
export interface SteadyChecksquareQueryParams {
lineId: string
indicatorCodes: string[]
timeStart: string
timeEnd: string
harmonicOrders?: number[]
}
export interface SteadyChecksquareSegment {
startTime: string
endTime: string
status: 'NORMAL' | 'MISSING' | string
missingPointCount?: number
durationMinutes?: number
}
export interface SteadyChecksquareStatSummary {
statType: SteadyTrendStatType
supported: boolean
hasData?: boolean
expectedPointCount?: number
actualPointCount?: number
missingPointCount?: number
missingRate?: number | null
missingRateText?: string | null
maxContinuousMissingMinutes?: number
}
export interface SteadyChecksquareStatDetail {
statType: SteadyTrendStatType
supported: boolean
segments: SteadyChecksquareSegment[]
}
export interface SteadyChecksquareItem {
itemKey: string
indicatorCode: string
indicatorName?: string
harmonicOrder?: number | null
hasData?: boolean
expectedPointCount?: number
actualPointCount?: number
missingPointCount?: number
missingRate?: number | null
missingRateText?: string | null
maxContinuousMissingMinutes?: number
statSummaries: SteadyChecksquareStatSummary[]
statDetails: SteadyChecksquareStatDetail[]
children?: SteadyChecksquareItem[]
}
export interface SteadyChecksquareQueryResult {
lineId: string
lineName?: string
timeStart: string
timeEnd: string
intervalMinutes?: number
items: SteadyChecksquareItem[]
}
}

View File

@@ -0,0 +1,18 @@
import http from '@/api'
import type { SteadyTrend } from './interface'
export const getSteadyTrendLedgerTree = (params?: { keyword?: string }) => {
return http.get<SteadyTrend.SteadyLedgerNode[]>('/steady/data-view/ledger-tree', params, { loading: false })
}
export const getSteadyTrendIndicatorTree = () => {
return http.get<SteadyTrend.SteadyIndicatorNode[]>('/steady/data-view/indicator-tree', {}, { loading: false })
}
export const querySteadyTrend = (params: SteadyTrend.SteadyTrendQueryParams) => {
return http.post<SteadyTrend.SteadyTrendQueryResult>('/steady/data-view/trend/query', params, { loading: false })
}
export const querySteadyTrendDay = (params: SteadyTrend.SteadyTrendQueryParams) => {
return http.post<SteadyTrend.SteadyTrendQueryResult>('/steady/data-view/trend/day', params, { loading: false })
}

View File

@@ -0,0 +1,77 @@
export namespace SteadyTrend {
export interface SteadyLedgerNode {
id: string
parentId?: string
name: string
level: 0 | 1 | 2 | 3
sort?: number
deviceCount?: number
lineCount?: number
selectable?: boolean
children?: SteadyLedgerNode[]
}
export interface SteadyIndicatorSeriesField {
field: string
name: string
}
export interface SteadyIndicatorNode {
id?: string
treeKey?: string
indicatorCode?: string
name: string
groupCode?: string
tableName?: string
baseFields?: string[]
phaseCodes?: string[]
seriesFields?: SteadyIndicatorSeriesField[]
supportStats?: SteadyTrendStatType[]
harmonic?: boolean
harmonicOrderStart?: number | null
harmonicOrderEnd?: number | null
unit?: string
children?: SteadyIndicatorNode[]
}
export type SteadyTrendStatType = 'AVG' | 'MAX' | 'MIN' | 'CP95'
export interface SteadyTrendQueryParams {
lineIds: string[]
indicatorCodes: string[]
statTypes: SteadyTrendStatType[]
timeStart: string
timeEnd: string
qualityFlag?: number
harmonicOrders?: number[]
}
export interface SteadyTrendPoint {
time: string
value: number | null
}
export interface SteadyTrendSeries {
seriesKey: string
lineId: string
lineName?: string
indicatorCode: string
indicatorName?: string
seriesName?: string
phase?: string
harmonicOrder?: number
statType?: SteadyTrendStatType
unit?: string
points: SteadyTrendPoint[]
}
export interface SteadyTrendQueryResult {
sampled?: boolean
bucket?: string
sourcePointCount?: number
displayPointCount?: number
loadableDays?: string[]
series: SteadyTrendSeries[]
}
}