diff --git a/zhandianxinxi/光谱数据监控/src/views/Dashboard.vue b/zhandianxinxi/光谱数据监控/src/views/Dashboard.vue index 0120ee6..ccc3224 100644 --- a/zhandianxinxi/光谱数据监控/src/views/Dashboard.vue +++ b/zhandianxinxi/光谱数据监控/src/views/Dashboard.vue @@ -535,7 +535,22 @@ const handleAddDeviceSubmit = async () => { if (!newDeviceForm.name) return; awa const handleDeviceClick = (row) => { if (!row.is_hidden && dataMonitorRef.value) dataMonitorRef.value.open(row) } const openLogCenter = (row) => { if (maintenanceLogsRef.value) maintenanceLogsRef.value.open(row ? { deviceName: row.name } : null) } const openIoTBinder = () => { if (iotBinderRef.value) iotBinderRef.value.open() } -const runManualMonitor = async () => { runningTask.value=true; await axios.post(`${API_BASE}/api/run_monitor`); setTimeout(()=>fetchData(), 3000); setTimeout(()=>runningTask.value=false, 1000) } +const runManualMonitor = async () => { + if (runningTask.value) return; // 防止重复点击 + runningTask.value = true; + try { + // 后端 execute_monitor_task() 是同步阻塞的,105 台设备逐个登录+下载要跑几分钟, + // 必须给足超时,否则请求会先断开、爬虫却还在后台跑 + await axios.post(`${API_BASE}/api/run_monitor`, {}, { timeout: 600000 }); + ElMessage.success('手动采集完成!'); + await fetchData(); // 等后端真正跑完再取数,不再用固定 setTimeout 瞎猜 + } catch (error) { + console.error("手动采集失败:", error); + ElMessage.error('采集失败或超时:' + (error.response?.data?.message || error.message)); + } finally { + runningTask.value = false; // 无论成功失败都关掉 loading + } +} const handleEditSite = (row) => { row.tempSite = row.install_site; row.isEditingSite = true; nextTick(() => document.querySelector('.site-input-inner input')?.focus()) } const saveSite = async (row) => { if(!row.isEditingSite)return; row.isEditingSite=false; await axios.post(`${API_BASE}/api/update_site`, {name:row.name, site:row.tempSite}); row.install_site=row.tempSite } const handleMaintenanceBeforeChange = (row) => { return new Promise(r => { axios.post(`${API_BASE}/api/toggle_maintenance`, {name:row.name, is_maintaining:!row.is_maintaining}).then(() => {row.is_maintaining=!row.is_maintaining; fetchData(); r(true)}).catch(()=>r(false)) }) }