From 825ea421712d3417da533a3236043fab2aa9e002 Mon Sep 17 00:00:00 2001 From: huangjinysf Date: Sat, 27 Dec 2025 04:06:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(EnamellingMachineStatus):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE=E9=99=8D=E9=87=87?= =?UTF-8?q?=E6=A0=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当查询时间范围超过一周时,自动对历史数据进行降采样处理,仅保留关键时间点的数据。添加了日期范围判断和降采样工具函数,减少大数据量时的渲染压力。 --- src/views/plan/EnamellingMachineStatus.vue | 66 +++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/views/plan/EnamellingMachineStatus.vue b/src/views/plan/EnamellingMachineStatus.vue index 3d6b46b..d96b988 100644 --- a/src/views/plan/EnamellingMachineStatus.vue +++ b/src/views/plan/EnamellingMachineStatus.vue @@ -299,6 +299,60 @@ const equipmentAxlesMap = { 'QB034': ['左边', '右边'] }; +const isMoreThanOneWeek = (startDate, endDate) => { + if (!startDate || !endDate) return false; + const start = new Date(startDate); + const end = new Date(endDate); + const diffDays = (end - start) / (1000 * 60 * 60 * 24); + return diffDays > 7; +}; + +const downsampleHistoryToKeyTimes = (records, targetHours = [8, 12, 16, 18]) => { + if (!records?.length) return []; + + const groups = new Map(); + records.forEach(item => { + const dt = new Date(item.create_time); + const dateKey = dt.toISOString().split('T')[0]; + if (!groups.has(dateKey)) groups.set(dateKey, []); + groups.get(dateKey).push({ dt, item }); + }); + + const result = []; + + groups.forEach((items, dateKey) => { + items.sort((a, b) => a.dt - b.dt); + + const selected = new Map(); + + targetHours.forEach(targetH => { + let closest = null; + let minDiff = Infinity; + + items.forEach(({ dt, item }) => { + const diff = Math.abs((dt.getHours() - targetH) * 60 + dt.getMinutes()); + if (diff < minDiff) { + minDiff = diff; + closest = item; + } + }); + + if (closest && minDiff <= 90) { + selected.set(targetH, closest); + } + }); + + targetHours.forEach(h => { + if (selected.has(h)) { + result.push(selected.get(h)); + } + }); + }); + + result.sort((a, b) => new Date(a.create_time) - new Date(b.create_time)); + return result; +}; + // 判断是否应该显示轴 const shouldShowAxle = (degree) => { if (!degree) return false; @@ -512,8 +566,16 @@ const fetchHistoryData = (model, specification, wireDisc) => { .then(response => response.json()) .then(data => { if (data.code === 200 && data.data && data.data.records) { - historyData.value = data.data.records; - hasHistoryData.value = historyData.value.length > 0; + let records = data.data.records; + + if (isMoreThanOneWeek(dateRange.start_date, dateRange.end_date)) { + const beforeCount = records.length; + records = downsampleHistoryToKeyTimes(records); + console.log(`库存数据降采样:${beforeCount} → ${records.length} 条 (时间范围超过1周)`); + } + + historyData.value = records; + hasHistoryData.value = records.length > 0; nextTick(() => { setTimeout(() => {