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:
2026-09-23 09:41:55 +08:00
parent 66d6ab86b5
commit eb358d0ba1
16 changed files with 396 additions and 242 deletions
+47
View File
@@ -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}`
}