From 4cfada967f7e9ac23f6f2c2977b6c71874a85f60 Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Tue, 14 Jul 2026 17:21:50 +0800 Subject: [PATCH] =?UTF-8?q?task=201:=20=E8=87=AA=E5=8A=A8=E4=BF=9D?= =?UTF-8?q?=E5=AD=98(30s)=20=E2=80=94=20=E6=96=B0=E5=A2=9EautoSaveTimer?= =?UTF-8?q?=E6=AF=8F30=E7=A7=92=E9=9D=99=E9=BB=98=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E8=8D=89=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/MapCanvas.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/MapCanvas.vue b/frontend/src/views/MapCanvas.vue index cb58ff4c..9e4aa5ca 100644 --- a/frontend/src/views/MapCanvas.vue +++ b/frontend/src/views/MapCanvas.vue @@ -708,6 +708,7 @@ async function deleteNode(dimKey: string, oi: number) { // ── 保存 ── let saveTimer: ReturnType | null = null +let autoSaveTimer: ReturnType | null = null let isSaving = false function debouncedSaveCanvas() { @@ -716,7 +717,7 @@ function debouncedSaveCanvas() { saveTimer = setTimeout(() => { saveCanvas() }, 500) } -async function saveCanvas() { +async function saveCanvas(silent?: boolean) { if (!selectedMap.value) return if (isSaving) return isSaving = true @@ -730,7 +731,7 @@ async function saveCanvas() { canvas_data: { connections: connections.value }, version_num: currentMap.value?.version_num, }) - ElMessage.success("已保存") + if (!silent) ElMessage.success("已保存") } catch (e: any) { if (e?.response?.status === 409) { ElMessage.warning("地图已被修改,刷新后重试") @@ -927,12 +928,17 @@ onMounted(async () => { for (const kpi of allKpis.value) { if (kpi.kpi_code) kpiNameMap[kpi.kpi_code] = kpi.kpi_name || kpi.kpi_code } + // 自动保存:每30秒自动保存草稿 + autoSaveTimer = setInterval(() => { + if (currentMap?.status === 'draft') saveCanvas(true) + }, 30000) window.addEventListener('resize', triggerRecalc) }) onUnmounted(() => { window.removeEventListener('resize', triggerRecalc) if (saveTimer) clearTimeout(saveTimer) + if (autoSaveTimer) clearInterval(autoSaveTimer) })