From 366b8a4272c3ecdaff5d839c58244ed11c9d0c15 Mon Sep 17 00:00:00 2001 From: tianmo Date: Mon, 19 Oct 2026 16:10:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=9A=E9=80=89=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=A4=8D=E7=94=A8=E7=AB=99=E7=82=B9=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=A1=A8=E5=8D=95=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 抽取站点地址与 Token 的 24 小时缓存工具 - 存储页与多选同步弹窗共用 pichost.site-sync-form - 弹窗打开时读取最新缓存,修改后写回 - 增加缓存读取与过期测试 --- app/components/storage/SiteSyncCard.vue | 36 ++----------- .../storage/SiteSyncSelectedDialog.vue | 15 ++++++ app/utils/site-sync-form.test.ts | 50 ++++++++++++++++++ app/utils/site-sync-form.ts | 52 +++++++++++++++++++ 4 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 app/utils/site-sync-form.test.ts create mode 100644 app/utils/site-sync-form.ts diff --git a/app/components/storage/SiteSyncCard.vue b/app/components/storage/SiteSyncCard.vue index 1989e7d..5e7f03e 100644 --- a/app/components/storage/SiteSyncCard.vue +++ b/app/components/storage/SiteSyncCard.vue @@ -3,6 +3,7 @@ import type { SiteSyncDirection, SiteSyncRequest } from '~/types/backup' +import { loadSiteSyncForm, saveSiteSyncForm } from '~/utils/site-sync-form' const props = defineProps<{ busy: boolean @@ -30,42 +31,15 @@ const conflictMode = ref<'skip' | 'overwrite'>('skip') const direction = ref('push') const scope = ref<'all' | 'image' | 'video' | 'file'>('all') -/** 目标站点地址与 Token 自动保存 24 小时 */ -const FORM_STORAGE_KEY = 'pichost.site-sync-form' -const FORM_TTL_MS = 24 * 60 * 60 * 1000 - function loadSavedForm() { if (!import.meta.client) return - try { - const raw = localStorage.getItem(FORM_STORAGE_KEY) - if (!raw) return - const data = JSON.parse(raw) as { - targetBaseUrl?: string - token?: string - savedAt?: number - } - if (!data.savedAt || Date.now() - data.savedAt > FORM_TTL_MS) { - localStorage.removeItem(FORM_STORAGE_KEY) - return - } - if (data.targetBaseUrl) targetBaseUrl.value = data.targetBaseUrl - if (data.token) token.value = data.token - } catch { - localStorage.removeItem(FORM_STORAGE_KEY) - } + const saved = loadSiteSyncForm() + if (saved?.targetBaseUrl) targetBaseUrl.value = saved.targetBaseUrl + if (saved?.token) token.value = saved.token } function persistForm() { - if (!import.meta.client) return - try { - localStorage.setItem(FORM_STORAGE_KEY, JSON.stringify({ - targetBaseUrl: targetBaseUrl.value, - token: token.value, - savedAt: Date.now() - })) - } catch { - // 存储不可用时忽略 - } + saveSiteSyncForm(targetBaseUrl.value, token.value) } watch([targetBaseUrl, token], persistForm) diff --git a/app/components/storage/SiteSyncSelectedDialog.vue b/app/components/storage/SiteSyncSelectedDialog.vue index ac0827c..19a6323 100644 --- a/app/components/storage/SiteSyncSelectedDialog.vue +++ b/app/components/storage/SiteSyncSelectedDialog.vue @@ -1,4 +1,6 @@