diff --git a/src/views/perfManage/overview/index.vue b/src/views/perfManage/overview/index.vue index 8bd80482..546d2b15 100644 --- a/src/views/perfManage/overview/index.vue +++ b/src/views/perfManage/overview/index.vue @@ -399,7 +399,8 @@ async function fetchMosData(neId: string) { console.log('MOS数据响应:', res) if (res.code === 1 && Array.isArray(res.data)) { - mosData.value = res.data + // 使用24小时数据补全功能 + mosData.value = generate24HourTimeSeries(res.data, 'mosAvg') console.log('MOS数据加载完成:', mosData.value) // 更新MOS图表 @@ -440,7 +441,8 @@ async function fetchCctData(neId: string) { console.log('CCT数据响应:', res) if (res.code === 1 && Array.isArray(res.data)) { - cctData.value = res.data + // 使用24小时数据补全功能 + cctData.value = generate24HourTimeSeries(res.data, 'cctAvg') console.log('CCT数据加载完成:', cctData.value) // 更新CCT图表 @@ -2123,6 +2125,55 @@ function calculateMosCctTimeDifference(latestData: any, previousData: any) { } } +// 生成24小时完整时间序列数据(用于MOS/CCT数据补全) +function generate24HourTimeSeries(rawData: any[], dataField: string) { + if (!rawData || rawData.length === 0) { + // 如果没有数据,返回24个0值 + return Array.from({ length: 24 }, (_, i) => ({ + timeGroup: Math.floor(Date.now() / 1000) - (23 - i) * 3600, + [dataField]: 0 + })) + } + + // 获取当前时间(秒级时间戳) + const now = Math.floor(Date.now() / 1000) + + // 生成过去24小时的完整时间点(每小时一个点) + const timePoints = Array.from({ length: 24 }, (_, i) => { + const hourTimestamp = now - (23 - i) * 3600 + return { + timestamp: hourTimestamp, + hourStart: Math.floor(hourTimestamp / 3600) * 3600 // 整点时间 + } + }) + + // 将原始数据按时间分组 + const dataMap = new Map() + rawData.forEach(item => { + const timeGroup = Number(item.timeGroup) || 0 + const hourStart = Math.floor(timeGroup / 3600) * 3600 + dataMap.set(hourStart, item) + }) + + // 补全24小时数据 + const completeData = timePoints.map(({ hourStart }) => { + const existingData = dataMap.get(hourStart) + if (existingData) { + return { + timeGroup: hourStart, + [dataField]: Number(existingData[dataField]) || 0 + } + } else { + return { + timeGroup: hourStart, + [dataField]: 0 + } + } + }) + + return completeData +} + // 辅助函数:从数据中计算MO值 function calculateMOValueFromData(kpiEvent: any) { const scscf05 = Number(kpiEvent['SCSCF.05']) || 0