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

+52
View File
@@ -0,0 +1,52 @@
export const SITE_SYNC_FORM_STORAGE_KEY = 'pichost.site-sync-form'
export const SITE_SYNC_FORM_TTL_MS = 24 * 60 * 60 * 1000
export interface SiteSyncFormCache {
targetBaseUrl: string
token: string
}
function getStorage(): Storage | null {
return typeof localStorage === 'undefined' ? null : localStorage
}
export function loadSiteSyncForm(): SiteSyncFormCache | null {
const storage = getStorage()
if (!storage) return null
try {
const raw = storage.getItem(SITE_SYNC_FORM_STORAGE_KEY)
if (!raw) return null
const data = JSON.parse(raw) as {
targetBaseUrl?: unknown
token?: unknown
savedAt?: unknown
}
if (typeof data.savedAt !== 'number' || Date.now() - data.savedAt > SITE_SYNC_FORM_TTL_MS) {
storage.removeItem(SITE_SYNC_FORM_STORAGE_KEY)
return null
}
return {
targetBaseUrl: typeof data.targetBaseUrl === 'string' ? data.targetBaseUrl : '',
token: typeof data.token === 'string' ? data.token : ''
}
} catch {
storage.removeItem(SITE_SYNC_FORM_STORAGE_KEY)
return null
}
}
export function saveSiteSyncForm(targetBaseUrl: string, token: string): void {
const storage = getStorage()
if (!storage) return
try {
storage.setItem(SITE_SYNC_FORM_STORAGE_KEY, JSON.stringify({
targetBaseUrl,
token,
savedAt: Date.now()
}))
} catch {
// 存储不可用时忽略
}
}