mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-14 18:58:13 +00:00
feat: 优化 IDBClear 方法,支持保留指定键的缓存项
This commit is contained in:
parent
501ff21e55
commit
0d8e10b60e
23
resources/assets/js/functions/common.js
vendored
23
resources/assets/js/functions/common.js
vendored
@ -1685,8 +1685,27 @@ const timezone = require("dayjs/plugin/timezone");
|
|||||||
return localforage.removeItem(key)
|
return localforage.removeItem(key)
|
||||||
},
|
},
|
||||||
|
|
||||||
IDBClear() {
|
/**
|
||||||
return localforage.clear()
|
* 清除缓存
|
||||||
|
* @param {string[]} [keysToKeep] - 可选,需要保留的 key 数组
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
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) {
|
IDBValue(key) {
|
||||||
|
|||||||
42
resources/assets/js/store/actions.js
vendored
42
resources/assets/js/store/actions.js
vendored
@ -1127,30 +1127,28 @@ export default {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// localForage
|
// localForage
|
||||||
const cacheItems = {
|
const keysToKeep = [
|
||||||
clientId: await $A.IDBString("clientId"),
|
'clientId',
|
||||||
cacheServerUrl: await $A.IDBString("cacheServerUrl"),
|
'cacheServerUrl',
|
||||||
cacheCalendarView: await $A.IDBString("cacheCalendarView"),
|
'cacheCalendarView',
|
||||||
cacheProjectParameter: await $A.IDBArray("cacheProjectParameter"),
|
'cacheProjectParameter',
|
||||||
cacheLoginEmail: await $A.IDBString("cacheLoginEmail"),
|
'cacheLoginEmail',
|
||||||
cacheFileSort: await $A.IDBJson("cacheFileSort"),
|
'cacheFileSort',
|
||||||
cacheTranslationLanguage: await $A.IDBString("cacheTranslationLanguage"),
|
'cacheTranslationLanguage',
|
||||||
cacheTranscriptionLanguage: await $A.IDBString("cacheTranscriptionLanguage"),
|
'cacheTranscriptionLanguage',
|
||||||
cacheTranslations: await $A.IDBArray("cacheTranslations"),
|
'cacheTranslations',
|
||||||
cacheEmojis: await $A.IDBArray("cacheEmojis"),
|
'cacheEmojis',
|
||||||
userInfo: await $A.IDBJson("userInfo"),
|
'userInfo',
|
||||||
mcpServerStatus: await $A.IDBJson("mcpServerStatus"),
|
'mcpServerStatus',
|
||||||
cacheVersion: state.cacheVersion,
|
'aiAssistant.model',
|
||||||
};
|
'aiAssistant.sessions',
|
||||||
await $A.IDBClear();
|
];
|
||||||
await Promise.all(
|
await $A.IDBClear(keysToKeep);
|
||||||
Object.entries(cacheItems).map(([key, value]) =>
|
await $A.IDBSet('cacheVersion', state.cacheVersion);
|
||||||
$A.IDBSet(key, value)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// userInfo
|
// 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
|
// readCache
|
||||||
await dispatch("handleReadCache")
|
await dispatch("handleReadCache")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user