architecture: 数据唯一权威迁至服务器——本地降级为实时缓存,写后即时推送+快照重建;账号登录转为云端原生(新增 /api/auth/password、/api/auth/delete、每日自动备份)

This commit is contained in:
root
2026-10-16 16:13:38 +08:00
parent 7517eb0ad9
commit e5f99d46d8
16 changed files with 641 additions and 478 deletions
+40
View File
@@ -0,0 +1,40 @@
// 服务器访问基础层:同步服务地址与登录令牌的本地持久化
// 这些信息必须保存在本地(登录前就需要知道服务器地址),不属于业务数据,不参与同步
export const DEFAULT_SYNC_BASE = 'https://daywk.linyux.cn'
const BASE_KEY = 'dsh_sync_base'
const TOKEN_KEY = 'dsh_sync_token'
function lsGet(key: string): string {
try { return localStorage.getItem(key) || '' } catch { return '' }
}
function lsSet(key: string, value: string): void {
try { localStorage.setItem(key, value) } catch { /* 隐私模式忽略 */ }
}
function lsDel(key: string): void {
try { localStorage.removeItem(key) } catch { /* 忽略 */ }
}
export async function getSyncBase(): Promise<string> {
return lsGet(BASE_KEY) || DEFAULT_SYNC_BASE
}
export async function setSyncBaseOverride(value: string): Promise<void> {
const v = (value || '').trim().replace(/\/+$/, '')
if (v && v !== DEFAULT_SYNC_BASE) lsSet(BASE_KEY, v)
else lsDel(BASE_KEY)
}
export function getToken(): string {
const raw = lsGet(TOKEN_KEY)
if (!raw) return ''
try {
// 令牌形如 payload.sig;过期由服务端判断,401 时上层负责重登
return raw
} catch { return '' }
}
export function setToken(token: string): void {
if (token) lsSet(TOKEN_KEY, token)
else lsDel(TOKEN_KEY)
}