refactor(event): 重构事件列表和稳态数据视图组件结构

- 将事件列表页面逻辑拆分为 EventListTable 组件
- 新增 MeasurementPointDialog 和 VoltageToleranceDialog 弹窗组件
- 重构稳态数据视图为主工作台组件 SteadyTrendWorkbench
- 移除不再使用的相别参数和相关逻辑
- 更新事件详情工具函数和接口参数映射
- 优化波形查看功能的数据传递方式
- 修正事件描述字段命名和严重程度解析逻辑
This commit is contained in:
2026-05-18 08:46:42 +08:00
parent 609fdd5379
commit f9ed6c6245
39 changed files with 1943 additions and 755 deletions

View File

@@ -56,7 +56,7 @@
</template>
<script setup lang="ts">
import { computed, nextTick, ref, watch } from 'vue'
import { computed, nextTick, onMounted, ref, watch } from 'vue'
import html2canvas from 'html2canvas'
import { ElMessage } from 'element-plus'
import { parseComtradeApi, parseComtradeVectorApi } from '@/api/tools/waveform'
@@ -125,6 +125,7 @@ const vectorParseResult = ref<Waveform.WaveComtradeVectorResultVO | null>(null)
const lastParseErrorMessage = ref('')
const lastVectorParseErrorMessage = ref('')
const waveformFileAccept = '.cfg,.dat'
const EVENT_LIST_WAVEFORM_SESSION_KEY = 'eventList:waveformParseResult'
const trendXZoomRange = ref<TrendZoomRange>({ start: 0, end: 100 })
const trendYZoomScale = ref(1)
const activeTrendInteractionMode = ref<'none' | 'box-zoom' | 'pan' | 'mark'>('none')
@@ -447,6 +448,35 @@ const resetTrendToolState = () => {
trendMarkers.value = []
}
const applyWaveformParseResult = (parseResult: Waveform.WaveComtradeResultVO) => {
waveformParseResult.value = parseResult
vectorParseResult.value = null
sourceValueMode.value = resolveSourceValueMode(parseResult.waveData?.szValueType)
temporaryPtRatio.value = parseResult.waveData?.pt
temporaryCtRatio.value = parseResult.waveData?.ct
activeValueMode.value = 'primary'
activeChannelIndex.value = 'all'
lastParseErrorMessage.value = ''
lastVectorParseErrorMessage.value = ''
resetTrendToolState()
}
onMounted(() => {
const storedWaveform = sessionStorage.getItem(EVENT_LIST_WAVEFORM_SESSION_KEY)
if (!storedWaveform) return
sessionStorage.removeItem(EVENT_LIST_WAVEFORM_SESSION_KEY)
try {
// eventList 已由后端按事件定位并解析波形,这里只恢复解析结果以复用当前展示能力。
applyWaveformParseResult(JSON.parse(storedWaveform) as Waveform.WaveComtradeResultVO)
} catch (error) {
console.error('[waveform] restore event list waveform failed', error)
ElMessage.error('事件波形数据解析失败,请重新查看波形')
}
})
const zoomTrendXAxis = (ratio: number) => {
const { start, end } = trendXZoomRange.value
const center = (start + end) / 2
@@ -1216,11 +1246,7 @@ const loadWaveformData = async (cfgFile: File, datFile: File) => {
if (waveformResult.status === 'fulfilled') {
const parseResult = waveformResult.value.data
waveformParseResult.value = parseResult
sourceValueMode.value = resolveSourceValueMode(parseResult.waveData?.szValueType)
temporaryPtRatio.value = parseResult.waveData?.pt
temporaryCtRatio.value = parseResult.waveData?.ct
activeValueMode.value = 'primary'
applyWaveformParseResult(parseResult)
} else {
waveformParseResult.value = null
sourceValueMode.value = 'secondary'