From 2476a19dc152a7a048441be5402796a47504de1b Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期五, 06 六月 2025 14:06:19 +0800 Subject: [PATCH] 建议快照 上下限 越界时间 --- src/views/model/sche/suggest/suggestSnapshot.vue | 152 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 90 insertions(+), 62 deletions(-) diff --git a/src/views/model/sche/suggest/suggestSnapshot.vue b/src/views/model/sche/suggest/suggestSnapshot.vue index fc2f607..ca89233 100644 --- a/src/views/model/sche/suggest/suggestSnapshot.vue +++ b/src/views/model/sche/suggest/suggestSnapshot.vue @@ -8,8 +8,8 @@ <el-checkbox-group v-model="selectedData" @change="refreshCharts"> <el-checkbox v-for="item in dataList" - :label="item.dataNo" - :key="item.dataNo" + :label="item.dataName" + :key="item.dataName" > {{ item.dataName }} </el-checkbox> @@ -40,19 +40,20 @@ const loading = ref(false) - const open = async (id: string) => { + const open = async (suggestId: string) => { visible.value = true - await getDataList(id) + await getDataList(suggestId) } defineExpose({ open }) /** 获取数据列表 */ - const getDataList = async (id: string) => { + const getDataList = async (suggestId: string) => { try { - const res = await suggestSnapshotApi.getList(id) + const res = await suggestSnapshotApi.getList(suggestId) dataList.value = res selectedData.value = [] // 清空已选项 + refreshCharts() } catch (error) { console.error(error) message.error('获取数据列表失败') @@ -69,62 +70,21 @@ loading.value = true try { - const chartData = await suggestSnapshotApi.getChartList({ - chooseDataList: selectedData.value - }) - // const chartData =[ - // { - // "dataNo": "F0000101228", - // "categories": [ - // "2024-02-01T00:00:00", - // "2024-02-01T02:00:00", - // "2024-02-01T04:00:00", - // "2024-02-01T06:00:00", - // "2024-02-01T08:00:00", - // "2024-02-01T10:00:00", - // "2024-02-01T12:00:00", - // "2024-02-01T14:00:00", - // "2024-02-01T16:00:00", - // "2024-02-01T18:00:00" - // ], - // "series": [ - // { - // "name": "温度", - // "data": [22.1, 21.8, 21.5, 22.3, 24.5, 26.7, 28.2, 27.9, 25.6, 23.4] - // } - // ] - // }, - // { - // "dataNo": "F0000100152", - // "categories": [ - // "2024-02-01T00:00:00", - // "2024-02-01T02:00:00", - // "2024-02-01T04:00:00", - // "2024-02-01T06:00:00", - // "2024-02-01T08:00:00", - // "2024-02-01T10:00:00", - // "2024-02-01T12:00:00", - // "2024-02-01T14:00:00", - // "2024-02-01T16:00:00", - // "2024-02-01T18:00:00" - // ], - // "series": [ - // { - // "name": "电压", - // "data": [220.1, 219.8, 220.2, 219.9, 220.5, 221.0, 220.8, 220.6, 220.3, 220.0] - // } - // ] - // } - // ] + const selectedDataList = selectedData.value.map(code => + dataList.value.find(d => d.dataName === code) + ).filter(Boolean) // 过滤无效项 + const chartData = await suggestSnapshotApi.getChartList( + selectedDataList + ) destroyCharts() // 生成图表配置数据 charts.value = selectedData.value.map(code => { - const item = dataList.value.find(d => d.dataNo === code) + const item = dataList.value.find(d => d.dataName === code) return { id: `chart-${code}`, name: item?.dataName || code, - data: chartData.find((d: any) => d.dataNo === code) + data: chartData.find((d: any) => d.dataName === code) } }) @@ -153,6 +113,64 @@ if (!chartInfo) return chart + const markLineData = [ + { + yAxis: chartInfo.data?.limitH, // 上限 + label: { + show: true, + formatter: '上限', + position: 'insideStartTop', + color: '#FF9A3D' + }, + lineStyle: { + color: '#FF9A3D', + type: 'dashed' + }, + }, + { + yAxis: chartInfo.data?.limitL, // 下限 + label: { + show: true, + formatter: '下限', + position: 'insideStartBottom', + color: '#00C2FF' + }, + lineStyle: { + color: '#00C2FF', + type: 'dashed' + }, + }, + { + xAxis: chartInfo.data?.scheduleTime || 0, // 真实数据分割线 + label: { + show: true, + formatter: '预测时间', + position: 'end', + color: '#5DFF9E' + }, + lineStyle: { + color: '#5DFF9E', + }, + } + ] + // 冲顶触底时间 + if (chartInfo.data?.overLimitTimes?.length > 0) { + chartInfo.data?.overLimitTimes.forEach(overLimitTime => { + markLineData.push({ + xAxis: overLimitTime, // 真实数据分割线 + label: { + show: false, + formatter: '预测时间', + position: 'end', + color: '#5DFF9E' + }, + lineStyle: { + color: '#ff0000', + }, + }) + }) + } + const option = { title: { text: chartInfo.name, @@ -160,22 +178,32 @@ }, tooltip: { trigger: 'axis' }, grid: { top: 30, left: '3%', right: '5%', bottom: 20 }, - xAxis: { - type: 'category', - data: chartInfo.data?.categories || [] - }, + xAxis: {type: 'category'}, yAxis: { type: 'value' }, dataZoom: [{ type: 'inside' }], series: [{ type: 'line', - data: chartInfo.data?.series?.[0]?.data || [], - lineStyle: { color: '#5B8FF9', width: 1 } + data: chartInfo.data?.dataList || [], + lineStyle: { color: '#5B8FF9', width: 1 }, + markLine: { + silent: true, + symbol: ['none', 'none'], + lineStyle: { + type: 'solid', + width: 1, + color: '#95E6FF', + }, + label: { + show: false, + }, + data: markLineData, + }, }] } chart.setOption(option) return chart - }).filter(Boolean) as echarts.ECharts[] + }) } </script> -- Gitblit v1.9.3