fix(achievement): 优化数据合并逻辑,这一块速度还是慢了

This commit is contained in:
BTMuli
2023-04-04 01:18:00 +08:00
parent de0bb05c8c
commit acee353818

View File

@@ -127,23 +127,23 @@ import {
const achievementsStore = useAchievementsStore(); const achievementsStore = useAchievementsStore();
// loading // loading
const loading = ref(true); const loading = ref(true as boolean);
const loadingTitle = ref("正在加载数据"); const loadingTitle = ref("正在加载数据" as string);
// data // data
const title = ref(achievementsStore.title); const title = ref(achievementsStore.title as string);
const CardsInfo = ref([] as NameCard[]); const CardsInfo = ref([] as NameCard[]);
const getCardInfo = ref({} as NameCard); const getCardInfo = ref({} as NameCard);
// series // series
const seriesList = ref([] as TGSeries[]); const seriesList = ref([] as TGSeries[]);
const selectedIndex = ref(-1); const selectedIndex = ref(-1 as number);
const selectedSeries = ref(-1); const selectedSeries = ref(-1 as number);
const selectedAchievement = ref([] as TGAchievement[]); const selectedAchievement = ref([] as TGAchievement[]);
// render // render
const search = ref(""); const search = ref("" as string);
const snackbar = ref(false); const snackbar = ref(false as boolean);
const snackbarText = ref(""); const snackbarText = ref("" as string);
onMounted(async () => { onMounted(async () => {
await loadData(); await loadData();
@@ -218,9 +218,11 @@ function showMaterial(path: string) {
} }
async function searchCard() { async function searchCard() {
if (search.value === "") { if (search.value === "") {
await dialog.message("请输入关键字"); snackbarText.value = "请输入搜索内容";
snackbar.value = true;
return; return;
} }
loadingTitle.value = "正在搜索";
loading.value = true; loading.value = true;
const res: TGAchievement[] = []; const res: TGAchievement[] = [];
const allAchievements = await ReadAllTGData("Achievements"); const allAchievements = await ReadAllTGData("Achievements");
@@ -230,10 +232,12 @@ async function searchCard() {
} }
}); });
selectedIndex.value = -1; selectedIndex.value = -1;
search.value = ""; setTimeout(() => {
loading.value = false; loading.value = false;
}, 500);
if (res.length === 0) { if (res.length === 0) {
await dialog.message("没有找到相关成就"); snackbarText.value = "没有找到对应的成就";
snackbar.value = true;
selectedAchievement.value = allAchievements; selectedAchievement.value = allAchievements;
} else { } else {
res.sort((a, b) => { res.sort((a, b) => {
@@ -260,15 +264,16 @@ async function importJson() {
if (selectedFile && (await UIAF_Oper.checkUIAFData(<string>selectedFile))) { if (selectedFile && (await UIAF_Oper.checkUIAFData(<string>selectedFile))) {
const remoteRaw: string | false = await UIAF_Oper.readUIAFData(<string>selectedFile); const remoteRaw: string | false = await UIAF_Oper.readUIAFData(<string>selectedFile);
if (remoteRaw === false) { if (remoteRaw === false) {
await dialog.message("文件格式不正确,导入失败"); snackbarText.value = "读取 UIAF 数据失败,请检查文件是否符合规范";
snackbar.value = true;
return; return;
} }
let remoteData: Achievements = JSON.parse(remoteRaw); loadingTitle.value = "正在解析数据";
// loading
loading.value = true; loading.value = true;
// 遍历 remoteData let remoteData: Achievements = JSON.parse(remoteRaw);
loadingTitle.value = "正在合并成就数据";
await Promise.allSettled(
remoteData.list.map(async data => { remoteData.list.map(async data => {
// 获取 id
const id = data.id; const id = data.id;
let localData: TGAchievement = (await ReadTGDataByKey("Achievements", [id]))[0]; let localData: TGAchievement = (await ReadTGDataByKey("Achievements", [id]))[0];
// 获取 timeStamp 2023-03-15 00:00:00 // 获取 timeStamp 2023-03-15 00:00:00
@@ -299,9 +304,11 @@ async function importJson() {
await UpdateTGDataByKey("Achievements", localData); await UpdateTGDataByKey("Achievements", localData);
} }
} }
}); })
// 更新成就系列的完成数 );
const seriesDB = await ReadAllTGData("AchievementSeries"); loadingTitle.value = "正在更新成就系列数据";
let seriesDB = await ReadAllTGData("AchievementSeries");
await Promise.allSettled(
seriesDB.map(async data => { seriesDB.map(async data => {
const seriesId = data.id; const seriesId = data.id;
const achievementsDB = await ReadTGDataByIndex("Achievements", "series", seriesId); const achievementsDB = await ReadTGDataByIndex("Achievements", "series", seriesId);
@@ -309,12 +316,16 @@ async function importJson() {
return data.completed === true; return data.completed === true;
}).length; }).length;
await UpdateTGDataByKey("AchievementSeries", data); await UpdateTGDataByKey("AchievementSeries", data);
}); })
const achievementsDB = await ReadAllTGData("Achievements"); );
const fin_achievements = achievementsDB.filter(data => { loadingTitle.value = "正在刷新数据";
return data.completed === true; seriesDB = await ReadAllTGData("AchievementSeries");
}).length; const fin_achievements = seriesDB.reduce((a, b) => {
const total_achievements = achievementsDB.length; return a + b.completed_count;
}, 0);
const total_achievements = seriesDB.reduce((a, b) => {
return a + b.total_count;
}, 0);
achievementsStore.flushData(total_achievements, fin_achievements); achievementsStore.flushData(total_achievements, fin_achievements);
// 刷新数据 // 刷新数据
await loadData(); await loadData();
@@ -324,7 +335,8 @@ async function importJson() {
async function exportJson() { async function exportJson() {
// 判断是否有数据 // 判断是否有数据
if (achievementsStore.fin_achievements === 0) { if (achievementsStore.fin_achievements === 0) {
await dialog.message("没有数据可以导出"); snackbarText.value = "没有可导出的数据";
snackbar.value = true;
return; return;
} }
// 获取本地数据 // 获取本地数据