fix: 无法清理数据缓存的情况

This commit is contained in:
kuaifan 2024-11-03 07:35:24 +08:00
parent 7e951196bf
commit 257e69268b

View File

@ -21,7 +21,7 @@ export default {
action = "handleClearCache" action = "handleClearCache"
} }
await $A.IDBRemove("clearCache") await $A.IDBRemove("clearCache")
await $A.IDBRemove("cacheVersion") await $A.IDBSet("cacheVersion", "clear")
} }
const cacheVersion = await $A.IDBString("cacheVersion") const cacheVersion = await $A.IDBString("cacheVersion")
if (cacheVersion && cacheVersion !== state.cacheVersion) { if (cacheVersion && cacheVersion !== state.cacheVersion) {
@ -812,39 +812,39 @@ export default {
handleClearCache({state, dispatch}, userData) { handleClearCache({state, dispatch}, userData) {
return new Promise(async resolve => { return new Promise(async resolve => {
// localStorage // localStorage
const themeConf = window.localStorage.getItem("__system:themeConf__"); const keys = ['themeConf', 'languageName', 'keyboardConf'];
const languageName = window.localStorage.getItem("__system:languageName__"); const savedData = keys.reduce((acc, key) => ({
const keyboardConf = window.localStorage.getItem("__system:keyboardConf__"); ...acc,
[key]: window.localStorage.getItem(`__system:${key}__`)
}), {});
window.localStorage.clear(); window.localStorage.clear();
window.localStorage.setItem("__system:themeConf__", themeConf) keys.forEach(key =>
window.localStorage.setItem("__system:languageName__", languageName) window.localStorage.setItem(`__system:${key}__`, savedData[key])
window.localStorage.setItem("__system:keyboardConf__", keyboardConf) );
// localForage // localForage
const clientId = await $A.IDBString("clientId") const cacheItems = {
const cacheServerUrl = await $A.IDBString("cacheServerUrl") clientId: await $A.IDBString("clientId"),
const cacheProjectParameter = await $A.IDBArray("cacheProjectParameter") cacheServerUrl: await $A.IDBString("cacheServerUrl"),
const cacheLoginEmail = await $A.IDBString("cacheLoginEmail"); cacheProjectParameter: await $A.IDBArray("cacheProjectParameter"),
const cacheFileSort = await $A.IDBJson("cacheFileSort"); cacheLoginEmail: await $A.IDBString("cacheLoginEmail"),
const cacheTaskBrowse = await $A.IDBArray("cacheTaskBrowse") cacheFileSort: await $A.IDBJson("cacheFileSort"),
const cacheTranslationLanguage = await $A.IDBString("cacheTranslationLanguage") cacheTaskBrowse: await $A.IDBArray("cacheTaskBrowse"),
const cacheTranslations = await $A.IDBArray("cacheTranslations") cacheTranslationLanguage: await $A.IDBString("cacheTranslationLanguage"),
const cacheEmojis = await $A.IDBArray("cacheEmojis") cacheTranslations: await $A.IDBArray("cacheTranslations"),
const userInfo = await $A.IDBJson("userInfo") cacheEmojis: await $A.IDBArray("cacheEmojis"),
userInfo: await $A.IDBJson("userInfo"),
cacheVersion: state.cacheVersion,
};
await $A.IDBClear(); await $A.IDBClear();
await $A.IDBSet("clientId", clientId); await Promise.all(
await $A.IDBSet("cacheServerUrl", cacheServerUrl); Object.entries(cacheItems).map(([key, value]) =>
await $A.IDBSet("cacheProjectParameter", cacheProjectParameter); $A.IDBSet(key, value)
await $A.IDBSet("cacheLoginEmail", cacheLoginEmail); )
await $A.IDBSet("cacheFileSort", cacheFileSort); );
await $A.IDBSet("cacheTaskBrowse", cacheTaskBrowse);
await $A.IDBSet("cacheTranslationLanguage", cacheTranslationLanguage);
await $A.IDBSet("cacheTranslations", cacheTranslations);
await $A.IDBSet("cacheEmojis", cacheEmojis);
await $A.IDBSet("cacheVersion", state.cacheVersion)
// userInfo // userInfo
await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : userInfo) await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : cacheItems.userInfo)
// readCache // readCache
await dispatch("handleReadCache") await dispatch("handleReadCache")
@ -861,45 +861,77 @@ export default {
*/ */
handleReadCache({state}) { handleReadCache({state}) {
return new Promise(async resolve => { return new Promise(async resolve => {
state.clientId = await $A.IDBString("clientId") // 定义需要获取的数据映射
state.cacheServerUrl = await $A.IDBString("cacheServerUrl") const dataMap = {
state.cacheUserBasic = await $A.IDBArray("cacheUserBasic") string: [
state.cacheDialogs = (await $A.IDBArray("cacheDialogs")).map(item => Object.assign(item, {loading: false, extra_draft_has: item.extra_draft_content ? 1 : 0})) 'clientId',
state.cacheProjects = await $A.IDBArray("cacheProjects") 'cacheServerUrl',
state.cacheColumns = await $A.IDBArray("cacheColumns") 'cacheTranslationLanguage'
state.cacheTasks = await $A.IDBArray("cacheTasks") ],
state.cacheProjectParameter = await $A.IDBArray("cacheProjectParameter") array: [
state.cacheTaskBrowse = await $A.IDBArray("cacheTaskBrowse") 'cacheUserBasic',
state.cacheTranslationLanguage = await $A.IDBString("cacheTranslationLanguage") 'cacheProjects',
state.cacheTranslations = await $A.IDBArray("cacheTranslations") 'cacheColumns',
state.dialogMsgs = await $A.IDBArray("dialogMsgs") 'cacheTasks',
state.fileLists = await $A.IDBArray("fileLists") 'cacheProjectParameter',
state.userInfo = await $A.IDBJson("userInfo") 'cacheTaskBrowse',
state.callAt = await $A.IDBArray("callAt") 'cacheTranslations',
state.cacheEmojis = await $A.IDBArray("cacheEmojis") 'dialogMsgs',
'fileLists',
'callAt',
'cacheEmojis',
'cacheDialogs'
],
json: [
'userInfo'
]
};
// TranslationLanguage // 批量获取数据
typeof languageList[state.cacheTranslationLanguage] === "undefined" && (state.cacheTranslationLanguage = languageName) const data = await Promise.all([
...dataMap.string.map(key => $A.IDBString(key)),
...dataMap.array.map(key => $A.IDBArray(key)),
...dataMap.json.map(key => $A.IDBJson(key))
]);
// 会员信息 // 更新state
[...dataMap.string, ...dataMap.array, ...dataMap.json].forEach((key, index) => {
state[key] = data[index];
});
// 特殊处理cacheDialogs
state.cacheDialogs = state.cacheDialogs.map(item => ({
...item,
loading: false,
extra_draft_has: item.extra_draft_content ? 1 : 0
}));
// TranslationLanguage检查
if (typeof languageList[state.cacheTranslationLanguage] === "undefined") {
state.cacheTranslationLanguage = languageName;
}
// 处理用户信息
if (state.userInfo.userid) { if (state.userInfo.userid) {
state.userId = state.userInfo.userid = $A.runNum(state.userInfo.userid) state.userId = state.userInfo.userid = $A.runNum(state.userInfo.userid);
state.userToken = state.userInfo.token state.userToken = state.userInfo.token;
state.userIsAdmin = $A.inArray("admin", state.userInfo.identity) state.userIsAdmin = $A.inArray("admin", state.userInfo.identity);
}
const localId = $A.runNum(window.localStorage.getItem("__system:userId__"))
const localToken = window.localStorage.getItem("__system:userToken__") || ""
if (state.userId === 0 && localId && localToken) {
state.userId = localId
state.userToken = localToken
} }
// ServerUrl // 处理本地存储的用户信息
const localId = $A.runNum(window.localStorage.getItem("__system:userId__"));
const localToken = window.localStorage.getItem("__system:userToken__") || "";
if (state.userId === 0 && localId && localToken) {
state.userId = localId;
state.userToken = localToken;
}
// 处理ServerUrl
if (state.cacheServerUrl) { if (state.cacheServerUrl) {
window.systemInfo.apiUrl = state.cacheServerUrl window.systemInfo.apiUrl = state.cacheServerUrl
} }
resolve() resolve();
}) })
}, },