mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-16 09:58:13 +08:00
fix(achievement): 优化数据合并逻辑,这一块速度还是慢了
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
// 获取本地数据
|
// 获取本地数据
|
||||||
|
|||||||
Reference in New Issue
Block a user