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 }
|