Files
sionrui/frontend/hooks/web/useCache.js
2025-11-12 22:45:29 +08:00

69 lines
1.5 KiB
JavaScript

/**
* 配置浏览器本地存储的方式,可直接存储对象数组。
*/
import WebStorageCache from 'web-storage-cache'
export const CACHE_KEY = {
// 用户相关
ROLE_ROUTERS: 'roleRouters',
USER: 'user',
VisitTenantId: 'visitTenantId',
// Token 相关
ACCESS_TOKEN: 'ACCESS_TOKEN',
REFRESH_TOKEN: 'REFRESH_TOKEN',
// 系统设置
IS_DARK: 'isDark',
LANG: 'lang',
THEME: 'theme',
LAYOUT: 'layout',
DICT_CACHE: 'dictCache',
// 登录表单
LoginForm: 'loginForm',
TenantId: 'tenantId'
}
export const useCache = (type ='localStorage') => {
const wsCache = new WebStorageCache({
storage: type
})
return {
wsCache
}
}
export const deleteUserCache = () => {
const { wsCache } = useCache()
wsCache.delete(CACHE_KEY.USER)
wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
wsCache.delete(CACHE_KEY.VisitTenantId)
// 注意,不要清理 LoginForm 登录表单
}
/**
* 删除所有 token 缓存
* 清空 wsCache 中所有可能的 token 键名变体
*/
export const deleteTokenCache = () => {
try {
const { wsCache } = useCache()
// 删除所有可能的 token 键名变体(大小写不同)
const tokenKeys = [
CACHE_KEY.ACCESS_TOKEN,
'access_token',
CACHE_KEY.REFRESH_TOKEN,
'refresh_token'
]
tokenKeys.forEach(key => {
try {
wsCache.delete(key)
} catch (e) {
// 忽略单个键删除失败
}
})
} catch (e) {
console.warn('删除 token 缓存失败:', e)
}
}