refactor: 前端本地偏好统一为公共存储层
- 新增 frontend/src/utils/storageKeys.ts 集中维护存储键常量并登记旧键迁移 - 新增 frontend/src/utils/storage.ts 统一 localStorage/sessionStorage 读写与异常容错 - 新增 frontend/src/composables/usePreference.ts 提供 useStringPreference 响应式字符串偏好 - 新增 frontend/src/utils/transactionFilterPrefs.ts 抽出收支筛选偏好字段定义与共享读写 - 存储键统一以 finance. 前缀命名,locale、emailBill.tab、logs.tab 迁移到新键并自动迁移旧值 - 各页面与组件改用公共层,移除重复的 try/catch 与跨组件重复的序列化逻辑 - 认证凭据 token 属登录状态,保持原键名不纳入 finance. 前缀
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// 本地存储键常量:界面/用户偏好统一以 finance. 前缀命名,作为唯一来源供路由与各页面复用
|
||||
|
||||
/** 当前使用的本地存储键 */
|
||||
export const STORAGE_KEYS = {
|
||||
// 语言偏好
|
||||
locale: 'finance.locale',
|
||||
// 邮箱账单页标签页
|
||||
emailBillTab: 'finance.emailBill.tab',
|
||||
// 系统日志页标签页
|
||||
logsTab: 'finance.logs.tab',
|
||||
// 账单导入的账单类型
|
||||
billImportBillType: 'finance.billImport.billType',
|
||||
// 统计面板偏好
|
||||
dashboardPrefs: 'finance.dashboard.prefs',
|
||||
// 统计面板 AI 查询历史
|
||||
dashboardAiSearchHistory: 'finance.dashboard.aiSearchHistory',
|
||||
// 统计面板 AI 查询浮窗位置尺寸
|
||||
dashboardAiQueryWindow: 'finance.dashboard.aiQueryWindow',
|
||||
// 收支记录 AI 建议范围
|
||||
transactionAiScope: 'finance.transaction.aiScope',
|
||||
// 收支记录 AI 记账方式
|
||||
transactionAiRecordTab: 'finance.transaction.aiRecordTab',
|
||||
// 收支记录备注关键词历史
|
||||
transactionRemarkHistory: 'finance.transaction.remarkHistory',
|
||||
// 收支记录筛选偏好(收支记录页与统计面板共用)
|
||||
transactionFilterPrefs: 'finance.transaction.filterPrefs',
|
||||
// 账单关系类型
|
||||
transactionRelationType: 'finance.transaction.relationType',
|
||||
// 收支记录 AI 查询历史
|
||||
transactionAiQueryHistory: 'finance.transaction.aiQueryHistory',
|
||||
// 收支记录 AI 查询浮窗位置尺寸
|
||||
transactionAiQueryWindow: 'finance.transaction.aiQueryWindow',
|
||||
// 内容区滚动位置(sessionStorage,按路由拼接后缀)
|
||||
scrollPrefix: 'finance.scroll.',
|
||||
} as const
|
||||
|
||||
/** 历史遗留的存储键(未带 finance. 前缀),首次读取时迁移到新键 */
|
||||
export const LEGACY_STORAGE_KEYS = {
|
||||
locale: 'locale',
|
||||
emailBillTab: 'emailBill.tab',
|
||||
logsTab: 'logs.tab',
|
||||
} as const
|
||||
|
||||
/** 生成指定路由的滚动位置存储键 */
|
||||
export function scrollKey(path: string): string {
|
||||
return `${STORAGE_KEYS.scrollPrefix}${path}`
|
||||
}
|
||||
Reference in New Issue
Block a user