From 0c73c40e8ad74fc8009654397e9839c41ca9e310 Mon Sep 17 00:00:00 2001 From: haoslm <6083297@qq.com> Date: Tue, 21 Jul 2026 14:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=8A=A5=E8=A1=A8=E6=97=B6=E7=9A=84=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/js/report.js | 158 +++++++++++++++++++++++++++++++++++++ templates/index.html | 4 +- 2 files changed, 160 insertions(+), 2 deletions(-) diff --git a/public/static/js/report.js b/public/static/js/report.js index bd8ece0..4f16101 100644 --- a/public/static/js/report.js +++ b/public/static/js/report.js @@ -12,6 +12,8 @@ async function loadGenerateConfigs() { ${c.config_name} `).join(''); + + initGenerateState(); } } catch (error) { console.error('加载配置失败:', error); @@ -94,8 +96,129 @@ function formatDateDisplay(dateStr) { return String(dateStr); } +let isGenerating = false; +let generatePollTimer = null; + +// 保存生成状态到 localStorage +function saveGenerateState(configIds, startTime) { + const state = { + configIds: configIds, + startTime: startTime + }; + localStorage.setItem('report_generate_state', JSON.stringify(state)); +} + +// 从 localStorage 读取生成状态 +function getGenerateState() { + const stateStr = localStorage.getItem('report_generate_state'); + if (!stateStr) return null; + try { + return JSON.parse(stateStr); + } catch (e) { + return null; + } +} + +// 清除生成状态 +function clearGenerateState() { + localStorage.removeItem('report_generate_state'); +} + +// 检查生成是否完成 +async function checkGenerateComplete() { + const state = getGenerateState(); + if (!state) { + stopGeneratePolling(); + setGenerateControlsDisabled(false); + isGenerating = false; + return; + } + + const { configIds, startTime } = state; + + try { + const response = await fetch('/api/report/history?page=1&page_size=50'); + const result = await response.json(); + + if (result.success && result.data && result.data.list) { + const historyList = result.data.list; + let allDone = true; + + for (const configId of configIds) { + const configHistory = historyList.filter(h => h.config_id === configId); + if (configHistory.length === 0) { + allDone = false; + break; + } + const latest = configHistory[0]; + const latestTime = new Date(latest.start_time).getTime(); + if (latestTime < startTime) { + allDone = false; + break; + } + } + + if (allDone) { + stopGeneratePolling(); + clearGenerateState(); + setGenerateControlsDisabled(false); + isGenerating = false; + + const resultDiv = document.getElementById('generate-result'); + if (resultDiv && !resultDiv.innerHTML.includes('生成完成')) { + resultDiv.innerHTML = '