fix: 多选同步弹窗复用站点同步表单缓存
- 抽取站点地址与 Token 的 24 小时缓存工具 - 存储页与多选同步弹窗共用 pichost.site-sync-form - 弹窗打开时读取最新缓存,修改后写回 - 增加缓存读取与过期测试
This commit is contained in:
1 parent
58424fe55d
commit
366b8a4272
4 files changed
+122
-31
No files matched your search
@@ -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 {
|
||||
// 存储不可用时忽略
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user