import { router } from '@/router' import { useUserStore } from '@/store/modules/user' import { StorageConfig } from '@/utils/storage/storage-config' class StorageCompatibilityManager { /** * 获取系统版本号 */ getSystemVersion() { return localStorage.getItem(StorageConfig.VERSION_KEY) } /** * 获取系统存储数据(兼容旧格式) */ getSystemStorage() { const version = this.getSystemVersion() || StorageConfig.CURRENT_VERSION const legacyKey = StorageConfig.generateLegacyKey(version) const data = localStorage.getItem(legacyKey) return data ? JSON.parse(data) : null } /** * 检查当前版本是否有存储数据 */ hasCurrentVersionStorage() { const storageKeys = Object.keys(localStorage) const currentVersionPattern = StorageConfig.createCurrentVersionPattern() return storageKeys.some( (key) => currentVersionPattern.test(key) && localStorage.getItem(key) !== null ) } /** * 检查是否存在任何版本的存储数据 */ hasAnyVersionStorage() { const storageKeys = Object.keys(localStorage) const versionPattern = StorageConfig.createVersionPattern() return storageKeys.some((key) => versionPattern.test(key) && localStorage.getItem(key) !== null) } /** * 获取旧格式的本地存储数据 */ getLegacyStorageData() { try { const systemStorage = this.getSystemStorage() return systemStorage || {} } catch (error) { console.warn('[Storage] 解析旧格式存储数据失败:', error) return {} } } /** * 显示存储错误消息 */ showStorageError() { ElMessage({ type: 'error', offset: 40, duration: 5e3, message: '系统检测到本地数据异常,请重新登录系统恢复使用!' }) } /** * 执行系统登出 */ performSystemLogout() { setTimeout(() => { try { localStorage.clear() useUserStore().logOut() router.push({ name: 'Login' }) console.info('[Storage] 已执行系统登出') } catch (error) { console.error('[Storage] 系统登出失败:', error) } }, StorageConfig.LOGOUT_DELAY) } /** * 处理存储异常 */ handleStorageError() { this.showStorageError() this.performSystemLogout() } /** * 验证存储数据完整性 * @param requireAuth 是否需要验证登录状态(默认 false) */ validateStorageData(requireAuth = false) { try { if (this.hasCurrentVersionStorage()) { return true } if (this.hasAnyVersionStorage()) { return true } const legacyData = this.getLegacyStorageData() if (Object.keys(legacyData).length === 0) { if (requireAuth) { console.warn('[Storage] 未发现任何存储数据,需要重新登录') this.performSystemLogout() return false } return true } console.debug('[Storage] 发现旧版本存储数据') return true } catch (error) { console.error('[Storage] 存储数据验证失败:', error) if (requireAuth) { this.handleStorageError() return false } return true } } /** * 检查存储是否为空 */ isStorageEmpty() { if (this.hasCurrentVersionStorage()) { return false } if (this.hasAnyVersionStorage()) { return false } const legacyData = this.getLegacyStorageData() return Object.keys(legacyData).length === 0 } /** * 检查存储兼容性 * @param requireAuth 是否需要验证登录状态(默认 false) */ checkCompatibility(requireAuth = false) { try { const isValid = this.validateStorageData(requireAuth) const isEmpty = this.isStorageEmpty() if (isValid || isEmpty) { return true } console.warn('[Storage] 存储兼容性检查失败') return false } catch (error) { console.error('[Storage] 兼容性检查异常:', error) return false } } } const storageManager = new StorageCompatibilityManager() function getSystemStorage() { return storageManager.getSystemStorage() } function getSysVersion() { return storageManager.getSystemVersion() } function validateStorageData(requireAuth = false) { return storageManager.validateStorageData(requireAuth) } function checkStorageCompatibility(requireAuth = false) { return storageManager.checkCompatibility(requireAuth) } export { checkStorageCompatibility, getSysVersion, getSystemStorage, validateStorageData }