/** * 存储配置管理模块 * * 提供统一的本地存储配置和工具方法 * * ## 主要功能 * * - 版本化存储键管理,支持多版本数据隔离 * - 存储键名生成和解析(带版本前缀) * - 版本号提取和验证 * - 存储键匹配的正则表达式生成 * - 旧版本存储键兼容处理 * - 升级和登出延迟配置 * - 主题存储键配置 * * ## 使用场景 * * - Pinia Store 持久化存储 * - 应用版本升级时的数据迁移 * - 多版本数据清理 * - 存储键的统一管理和规范 * * 存储键格式:sys-v{version}-{storeId} * 例如:sys-v1.0.0-user, sys-v1.0.0-setting * * @module utils/storage/storage-config * @author Art Design Pro Team */ export class StorageConfig { /** 当前应用版本 */ static readonly CURRENT_VERSION = __APP_VERSION__ /** 存储键前缀 */ static readonly STORAGE_PREFIX = 'sys-v' /** 版本键名 */ static readonly VERSION_KEY = 'sys-version' /** 主题键名(index.html中使用了,如果修改,需要同步修改) */ static readonly THEME_KEY = 'sys-theme' /** 上次登录用户ID键名(用于判断是否为同一用户登录) */ static readonly LAST_USER_ID_KEY = 'sys-last-user-id' /** 响应式布局切换时暂存桌面端菜单类型 */ static readonly RESPONSIVE_MENU_TYPE_KEY = 'sys-responsive-menu-type' /** 跳过升级检查的版本 */ static readonly SKIP_UPGRADE_VERSION = '1.0.0' /** 升级处理延迟时间(毫秒) */ static readonly UPGRADE_DELAY = 1000 /** 登出延迟时间(毫秒) */ static readonly LOGOUT_DELAY = 1000 /** * 生成版本化的存储键名 * @param storeId 存储ID * @param version 版本号,默认使用当前版本 */ static generateStorageKey(storeId: string, version: string = this.CURRENT_VERSION): string { return `${this.STORAGE_PREFIX}${version}-${storeId}` } /** * 生成旧版本的存储键名(不带分隔符) * @param version 版本号,默认使用当前版本 */ static generateLegacyKey(version: string = this.CURRENT_VERSION): string { return `${this.STORAGE_PREFIX}${version}` } /** * 创建存储键匹配的正则表达式 * @param storeId 存储ID */ static createKeyPattern(storeId: string): RegExp { return new RegExp(`^${this.STORAGE_PREFIX}[^-]+-${storeId}$`) } /** * 创建当前版本存储键匹配的正则表达式 */ static createCurrentVersionPattern(): RegExp { return new RegExp(`^${this.STORAGE_PREFIX}${this.CURRENT_VERSION}-`) } /** * 创建任意版本存储键匹配的正则表达式 */ static createVersionPattern(): RegExp { return new RegExp(`^${this.STORAGE_PREFIX}`) } /** * 检查是否为当前版本的键 */ static isCurrentVersionKey(key: string): boolean { return key.startsWith(`${this.STORAGE_PREFIX}${this.CURRENT_VERSION}`) } /** * 检查是否为版本化的键 */ static isVersionedKey(key: string): boolean { return key.startsWith(this.STORAGE_PREFIX) } /** * 从存储键中提取版本号 */ static extractVersionFromKey(key: string): string | null { const match = key.match(new RegExp(`^${this.STORAGE_PREFIX}([^-]+)`)) return match ? match[1] : null } /** * 从存储键中提取存储ID */ static extractStoreIdFromKey(key: string): string | null { const match = key.match(new RegExp(`^${this.STORAGE_PREFIX}[^-]+-(.+)$`)) return match ? match[1] : null } }