From 418a354a0d4c1095f1f4aecb943efe06106184cf Mon Sep 17 00:00:00 2001 From: Mohan Date: Mon, 10 Aug 2026 21:45:36 +0800 Subject: [PATCH] feat(editor): add auto-save with 60s countdown and offline detection - 60s countdown timer, auto-save every 60s - Offline detection: pause countdown, show red warning - Auto-save: edit mode via PUT, create mode via localStorage draft - beforeunload + onBeforeRouteLeave double protection for unsaved changes - Draft restore from localStorage on new article mount --- src/views/admin/ArticleEditorView.vue | 254 ++++++++++++++++++++++---- 1 file changed, 220 insertions(+), 34 deletions(-) diff --git a/src/views/admin/ArticleEditorView.vue b/src/views/admin/ArticleEditorView.vue index 3b1151c..d57be4d 100644 --- a/src/views/admin/ArticleEditorView.vue +++ b/src/views/admin/ArticleEditorView.vue @@ -1,6 +1,6 @@ @@ -140,6 +279,21 @@ onMounted(() => {

{{ error }}

+
+
+ + {{ countdown }}s 后自动保存 + + 保存中... + + {{ autoSaveMessage }} + +
+
+
{ max-width: 1200px; } +.editor-header { + display: flex; + justify-content: flex-end; + align-items: center; + margin-bottom: 16px; +} + +.auto-save-status { + display: flex; + align-items: center; + gap: 12px; + font-size: 13px; + color: var(--ac-text-secondary); +} + +.countdown { + font-variant-numeric: tabular-nums; +} + +.saving { + color: var(--ac-primary-ink); +} + +.save-message.success { + color: var(--ac-success-ink); +} + +.save-message.error { + color: var(--ac-danger-ink); + font-weight: 500; +} + .error-text { color: var(--ac-danger); margin-bottom: 12px;