fix: 多选同步弹窗复用站点同步表单缓存

- 抽取站点地址与 Token 的 24 小时缓存工具
- 存储页与多选同步弹窗共用 pichost.site-sync-form
- 弹窗打开时读取最新缓存,修改后写回
- 增加缓存读取与过期测试
This commit is contained in:
tianmo committed 2026-10-19 16:10:48 +08:00
1 parent 58424fe55d
commit 366b8a4272
4 files changed
+122 -31

No files matched your search

+5 -31
View File
@@ -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<SiteSyncDirection>('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)