Files

136 lines
4.5 KiB
JavaScript

/**
* 本地工具类(无需接口的功能)
*/
// ===================== 本地缓存清理(核心实现) =====================
/**
* 清理小程序缓存
* @returns {Promise<{size: string, success: boolean}>}
*/
export function clearCache() {
return new Promise((resolve) => {
try {
// 1. 清理本地存储(除了token,避免清理后直接退出)
const token = uni.getStorageSync('user_token') // 保留登录态
uni.clearStorageSync()
if (token) uni.setStorageSync('user_token', token) // 恢复token
// 2. 清理临时文件(如图片、视频缓存)
uni.getFileSystemManager().rmdir({
dirPath: `${wx.env.USER_DATA_PATH}/tmp`, // 微信小程序临时目录
recursive: true,
fail: () => {} // 目录不存在时忽略
})
// 3. 计算清理的缓存大小(模拟,真实场景可通过getStorageInfo获取)
uni.getStorageInfo({
success: (res) => {
const clearSize = (res.currentSize || 0).toFixed(2)
uni.showToast({ title: `清理完成,释放${clearSize}KB`, icon: 'success' })
resolve({
success: true,
size: `${clearSize}KB`
})
},
fail: () => {
uni.showToast({ title: '缓存清理成功', icon: 'success' })
resolve({ success: true, size: '未知' })
}
})
} catch (err) {
console.error('清理缓存失败:', err)
uni.showToast({ title: '缓存清理失败', icon: 'none' })
resolve({ success: false, size: '0KB' })
}
})
}
// ===================== 偏好设置管理(适配后端接口) =====================
// 偏好设置本地存储键名
const PREFERENCE_KEY = 'user_preferences'
/**
* 默认偏好设置(后端易适配的核心配置)
*/
const DEFAULT_PREFERENCES = {
theme: 'light', // 主题:light(浅色)/dark(深色)/auto(跟随系统)
listStyle: 'card', // 列表样式:card(卡片)/list(列表)
budgetWarn: true, // 预算超限提醒:true/false
autoSync: true, // 自动同步(后端接口适配:true-后台自动同步/false-手动同步)
remindTime: '08:00', // 待办提醒时间:HH:mm
monthBudget: 5000, // 月预算(数字,后端用于超限提醒)
currency: 'CNY' // 货币单位(后端统一适配)
}
/**
* 获取偏好设置(本地优先,无则返回默认值)
*/
export function getPreferences() {
try {
const localPrefs = uni.getStorageSync(PREFERENCE_KEY)
if (localPrefs && typeof localPrefs === 'object') {
// 合并默认值(避免新增配置项缺失)
return { ...DEFAULT_PREFERENCES, ...localPrefs }
}
return { ...DEFAULT_PREFERENCES }
} catch (err) {
console.error('获取偏好设置失败:', err)
return { ...DEFAULT_PREFERENCES }
}
}
/**
* 保存偏好设置(本地+可选同步到后端)
* @param {Object} prefs - 要修改的偏好设置
* @param {boolean} [syncToServer=true] - 是否同步到后端
* @returns {Promise<Object>} 最新的偏好设置
*/
export async function savePreferences(prefs, syncToServer = true) {
try {
// 1. 合并并保存到本地
const currentPrefs = getPreferences()
const newPrefs = { ...currentPrefs, ...prefs }
uni.setStorageSync(PREFERENCE_KEY, newPrefs)
// 2. 同步到后端(可选)
if (syncToServer) {
try {
// 导入request(避免循环依赖)
const request = (await import('./request.js')).default
await request.post('/settings/save', { preferences: newPrefs })
} catch (err) {
console.warn('偏好设置同步后端失败:', err)
// 同步失败不影响本地保存
}
}
uni.showToast({ title: '设置保存成功', icon: 'success' })
return newPrefs
} catch (err) {
console.error('保存偏好设置失败:', err)
uni.showToast({ title: '设置保存失败', icon: 'none' })
return getPreferences()
}
}
/**
* 重置偏好设置为默认值
*/
export function resetPreferences() {
uni.setStorageSync(PREFERENCE_KEY, DEFAULT_PREFERENCES)
uni.showToast({ title: '已恢复默认设置', icon: 'success' })
return { ...DEFAULT_PREFERENCES }
}
// ===================== 其他本地实用功能 =====================
/**
* 获取小程序版本信息
*/
export function getAppVersion() {
const systemInfo = uni.getSystemInfoSync()
return {
version: systemInfo.version || '未知',
platform: systemInfo.platform || '未知',
appName: '备忘录' // 替换为你的小程序名称
}
}