const STORAGE_PREFIX = import.meta.env.VITE_STORAGE_PREFIX interface StorageData { value: T expire: number | null } /** * LocalStorage部分操作 */ function createLocalStorage() { // 默认缓存期限为7天 function set(key: K, value: T[K], expire: number = 60 * 60 * 24 * 7) { const storageData: StorageData = { value, expire: new Date().getTime() + expire * 1000, } const json = JSON.stringify(storageData) window.localStorage.setItem(`${STORAGE_PREFIX}${String(key)}`, json) } function get(key: K) { const json = window.localStorage.getItem(`${STORAGE_PREFIX}${String(key)}`) if (!json) return null const storageData: StorageData | null = JSON.parse(json) if (storageData) { const { value, expire } = storageData if (expire === null || expire >= Date.now()) return value } remove(key) return null } function remove(key: keyof T) { window.localStorage.removeItem(`${STORAGE_PREFIX}${String(key)}`) } const clear = window.localStorage.clear return { set, get, remove, clear, } } /** * sessionStorage部分操作 */ function createSessionStorage() { function set(key: K, value: T[K]) { const json = JSON.stringify(value) window.sessionStorage.setItem(`${STORAGE_PREFIX}${String(key)}`, json) } function get(key: K) { const json = sessionStorage.getItem(`${STORAGE_PREFIX}${String(key)}`) if (!json) return null const storageData: T[K] | null = JSON.parse(json) if (storageData) return storageData return null } function remove(key: keyof T) { window.sessionStorage.removeItem(`${STORAGE_PREFIX}${String(key)}`) } const clear = window.sessionStorage.clear return { set, get, remove, clear, } } export const local = createLocalStorage() export const session = createSessionStorage()