294 lines
No EOL
7.5 KiB
JavaScript
294 lines
No EOL
7.5 KiB
JavaScript
// 存储工具类 - 对应Flutter的storage_util.dart
|
|
class StorageUtil {
|
|
constructor() {
|
|
this.prefix = 'lanmei_'; // 应用前缀,避免与其他应用冲突
|
|
}
|
|
|
|
// 初始化
|
|
init() {
|
|
console.log('存储工具初始化完成');
|
|
}
|
|
|
|
// 获取带前缀的key
|
|
getKey(key) {
|
|
return this.prefix + key;
|
|
}
|
|
|
|
// 设置数据
|
|
async set(key, value) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
const data = {
|
|
value: value,
|
|
timestamp: Date.now()
|
|
};
|
|
|
|
wx.setStorageSync(storageKey, data);
|
|
console.log(`存储数据: ${key} =`, value);
|
|
return true;
|
|
} catch (error) {
|
|
console.error(`存储数据失败: ${key}`, error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 获取数据
|
|
async get(key, defaultValue = null) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
const data = wx.getStorageSync(storageKey);
|
|
|
|
if (data && data.value !== undefined) {
|
|
console.log(`读取数据: ${key} =`, data.value);
|
|
return data.value;
|
|
} else {
|
|
console.log(`读取数据: ${key} = 默认值`, defaultValue);
|
|
return defaultValue;
|
|
}
|
|
} catch (error) {
|
|
console.error(`读取数据失败: ${key}`, error);
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
// 删除数据
|
|
async remove(key) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
wx.removeStorageSync(storageKey);
|
|
console.log(`删除数据: ${key}`);
|
|
return true;
|
|
} catch (error) {
|
|
console.error(`删除数据失败: ${key}`, error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 清除所有数据
|
|
async clear() {
|
|
try {
|
|
const storageInfo = wx.getStorageInfoSync();
|
|
const keys = storageInfo.keys.filter(key => key.startsWith(this.prefix));
|
|
|
|
keys.forEach(key => {
|
|
wx.removeStorageSync(key);
|
|
});
|
|
|
|
console.log(`清除所有数据: ${keys.length} 项`);
|
|
return true;
|
|
} catch (error) {
|
|
console.error('清除数据失败:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 检查数据是否存在
|
|
async exists(key) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
const data = wx.getStorageSync(storageKey);
|
|
return data !== '' && data !== null && data !== undefined;
|
|
} catch (error) {
|
|
console.error(`检查数据存在失败: ${key}`, error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 获取存储信息
|
|
async getInfo() {
|
|
try {
|
|
const storageInfo = wx.getStorageInfoSync();
|
|
const appKeys = storageInfo.keys.filter(key => key.startsWith(this.prefix));
|
|
|
|
return {
|
|
totalKeys: storageInfo.keys.length,
|
|
appKeys: appKeys.length,
|
|
currentSize: storageInfo.currentSize,
|
|
limitSize: storageInfo.limitSize,
|
|
keys: appKeys.map(key => key.replace(this.prefix, ''))
|
|
};
|
|
} catch (error) {
|
|
console.error('获取存储信息失败:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// 设置过期数据
|
|
async setWithExpire(key, value, expireTime) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
const data = {
|
|
value: value,
|
|
timestamp: Date.now(),
|
|
expire: Date.now() + expireTime * 1000 // expireTime为秒数
|
|
};
|
|
|
|
wx.setStorageSync(storageKey, data);
|
|
console.log(`存储带过期时间的数据: ${key} =`, value, `过期时间: ${expireTime}秒`);
|
|
return true;
|
|
} catch (error) {
|
|
console.error(`存储带过期时间的数据失败: ${key}`, error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 获取数据(检查过期时间)
|
|
async getWithExpireCheck(key, defaultValue = null) {
|
|
try {
|
|
const storageKey = this.getKey(key);
|
|
const data = wx.getStorageSync(storageKey);
|
|
|
|
if (!data || data.value === undefined) {
|
|
return defaultValue;
|
|
}
|
|
|
|
// 检查是否过期
|
|
if (data.expire && Date.now() > data.expire) {
|
|
console.log(`数据已过期,删除: ${key}`);
|
|
await this.remove(key);
|
|
return defaultValue;
|
|
}
|
|
|
|
console.log(`读取数据: ${key} =`, data.value);
|
|
return data.value;
|
|
} catch (error) {
|
|
console.error(`读取数据失败: ${key}`, error);
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
// 清理过期数据
|
|
async clearExpiredData() {
|
|
try {
|
|
const storageInfo = wx.getStorageInfoSync();
|
|
const appKeys = storageInfo.keys.filter(key => key.startsWith(this.prefix));
|
|
let clearedCount = 0;
|
|
|
|
appKeys.forEach(storageKey => {
|
|
try {
|
|
const data = wx.getStorageSync(storageKey);
|
|
if (data && data.expire && Date.now() > data.expire) {
|
|
wx.removeStorageSync(storageKey);
|
|
clearedCount++;
|
|
console.log(`清理过期数据: ${storageKey}`);
|
|
}
|
|
} catch (error) {
|
|
console.error(`清理过期数据失败: ${storageKey}`, error);
|
|
}
|
|
});
|
|
|
|
console.log(`清理过期数据完成: ${clearedCount} 项`);
|
|
return clearedCount;
|
|
} catch (error) {
|
|
console.error('清理过期数据失败:', error);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// 批量设置数据
|
|
async setBatch(dataMap) {
|
|
try {
|
|
const results = [];
|
|
for (const [key, value] of Object.entries(dataMap)) {
|
|
const result = await this.set(key, value);
|
|
results.push({ key, success: result });
|
|
}
|
|
|
|
const successCount = results.filter(r => r.success).length;
|
|
console.log(`批量设置数据: ${successCount}/${results.length} 成功`);
|
|
return results;
|
|
} catch (error) {
|
|
console.error('批量设置数据失败:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
// 批量获取数据
|
|
async getBatch(keys, defaultValue = null) {
|
|
try {
|
|
const results = {};
|
|
for (const key of keys) {
|
|
results[key] = await this.get(key, defaultValue);
|
|
}
|
|
|
|
console.log(`批量获取数据: ${keys.length} 项`);
|
|
return results;
|
|
} catch (error) {
|
|
console.error('批量获取数据失败:', error);
|
|
return {};
|
|
}
|
|
}
|
|
|
|
// 用户相关数据操作的便捷方法
|
|
async setUserData(userData) {
|
|
return await this.set('userInfo', userData);
|
|
}
|
|
|
|
async getUserData() {
|
|
return await this.get('userInfo');
|
|
}
|
|
|
|
async setToken(token) {
|
|
return await this.set('token', token);
|
|
}
|
|
|
|
async getToken() {
|
|
return await this.get('token');
|
|
}
|
|
|
|
async setCustomId(customId) {
|
|
return await this.set('customId', customId);
|
|
}
|
|
|
|
async getCustomId() {
|
|
return await this.get('customId');
|
|
}
|
|
|
|
// 应用设置相关
|
|
async setAppSettings(settings) {
|
|
return await this.set('appSettings', settings);
|
|
}
|
|
|
|
async getAppSettings() {
|
|
return await this.get('appSettings', {
|
|
theme: 'auto',
|
|
language: 'zh',
|
|
notifications: true,
|
|
locationPrivacy: 1,
|
|
autoLocation: true
|
|
});
|
|
}
|
|
|
|
// 缓存数据操作
|
|
async setCacheData(key, data, expireTime = 3600) {
|
|
return await this.setWithExpire(`cache_${key}`, data, expireTime);
|
|
}
|
|
|
|
async getCacheData(key) {
|
|
return await this.getWithExpireCheck(`cache_${key}`);
|
|
}
|
|
|
|
async clearCache() {
|
|
try {
|
|
const storageInfo = wx.getStorageInfoSync();
|
|
const cacheKeys = storageInfo.keys.filter(key =>
|
|
key.startsWith(this.prefix + 'cache_')
|
|
);
|
|
|
|
cacheKeys.forEach(key => {
|
|
wx.removeStorageSync(key);
|
|
});
|
|
|
|
console.log(`清除缓存数据: ${cacheKeys.length} 项`);
|
|
return cacheKeys.length;
|
|
} catch (error) {
|
|
console.error('清除缓存数据失败:', error);
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 创建单例
|
|
const storageUtil = new StorageUtil();
|
|
|
|
module.exports = storageUtil;
|