diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index fed8ae58d..2ff93b6b5 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1685,8 +1685,27 @@ const timezone = require("dayjs/plugin/timezone"); return localforage.removeItem(key) }, - IDBClear() { - return localforage.clear() + /** + * 清除缓存 + * @param {string[]} [keysToKeep] - 可选,需要保留的 key 数组 + * @returns {Promise} + */ + async IDBClear(keysToKeep = []) { + if (!keysToKeep || !keysToKeep.length) { + return localforage.clear(); + } + const cached = {}; + await Promise.all( + keysToKeep.map(async key => { + cached[key] = await this.IDBValue(key); + }) + ); + await localforage.clear(); + await Promise.all( + Object.entries(cached) + .filter(([, value]) => value !== null && value !== undefined) + .map(([key, value]) => this.IDBSet(key, value)) + ); }, IDBValue(key) { diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 0234118c6..0b02c32ad 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1127,30 +1127,28 @@ export default { ); // localForage - const cacheItems = { - clientId: await $A.IDBString("clientId"), - cacheServerUrl: await $A.IDBString("cacheServerUrl"), - cacheCalendarView: await $A.IDBString("cacheCalendarView"), - cacheProjectParameter: await $A.IDBArray("cacheProjectParameter"), - cacheLoginEmail: await $A.IDBString("cacheLoginEmail"), - cacheFileSort: await $A.IDBJson("cacheFileSort"), - cacheTranslationLanguage: await $A.IDBString("cacheTranslationLanguage"), - cacheTranscriptionLanguage: await $A.IDBString("cacheTranscriptionLanguage"), - cacheTranslations: await $A.IDBArray("cacheTranslations"), - cacheEmojis: await $A.IDBArray("cacheEmojis"), - userInfo: await $A.IDBJson("userInfo"), - mcpServerStatus: await $A.IDBJson("mcpServerStatus"), - cacheVersion: state.cacheVersion, - }; - await $A.IDBClear(); - await Promise.all( - Object.entries(cacheItems).map(([key, value]) => - $A.IDBSet(key, value) - ) - ); + const keysToKeep = [ + 'clientId', + 'cacheServerUrl', + 'cacheCalendarView', + 'cacheProjectParameter', + 'cacheLoginEmail', + 'cacheFileSort', + 'cacheTranslationLanguage', + 'cacheTranscriptionLanguage', + 'cacheTranslations', + 'cacheEmojis', + 'userInfo', + 'mcpServerStatus', + 'aiAssistant.model', + 'aiAssistant.sessions', + ]; + await $A.IDBClear(keysToKeep); + await $A.IDBSet('cacheVersion', state.cacheVersion); // userInfo - await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : cacheItems.userInfo) + const cachedUserInfo = await $A.IDBJson("userInfo"); + await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : cachedUserInfo) // readCache await dispatch("handleReadCache")