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,61 +264,68 @@ 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);
remoteData.list.map(async data => { loadingTitle.value = "正在合并成就数据";
// 获取 id await Promise.allSettled(
const id = data.id; remoteData.list.map(async data => {
let localData: TGAchievement = (await ReadTGDataByKey("Achievements", [id]))[0]; const id = data.id;
// 获取 timeStamp 2023-03-15 00:00:00 let localData: TGAchievement = (await ReadTGDataByKey("Achievements", [id]))[0];
const localTime = localData.completed_time; // 获取 timeStamp 2023-03-15 00:00:00
// 如果本地数据不存在,或者本地数据的 timeStamp 小于远程数据的 timeStamp更新数据 const localTime = localData.completed_time;
if (data.timestamp !== 0) { // 如果本地数据不存在,或者本地数据的 timeStamp 小于远程数据的 timeStamp,更新数据
const fin_time = new Date(data.timestamp * 1000).toLocaleString("zh", { if (data.timestamp !== 0) {
year: "numeric", const fin_time = new Date(data.timestamp * 1000).toLocaleString("zh", {
month: "2-digit", year: "numeric",
day: "2-digit", month: "2-digit",
hour: "2-digit", day: "2-digit",
minute: "2-digit", hour: "2-digit",
second: "2-digit", minute: "2-digit",
}); second: "2-digit",
if (fin_time !== localTime || localData.progress !== data.current) { });
localData.completed_time = fin_time; if (fin_time !== localTime || localData.progress !== data.current) {
localData.progress = data.current; localData.completed_time = fin_time;
localData.completed = true; localData.progress = data.current;
// 更新数据 localData.completed = true;
await UpdateTGDataByKey("Achievements", localData); // 更新数据
await UpdateTGDataByKey("Achievements", localData);
}
} else {
if (localData.progress !== data.current) {
localData.completed_time = "";
localData.progress = data.current;
localData.completed = false;
// 更新数据
await UpdateTGDataByKey("Achievements", localData);
}
} }
} else { })
if (localData.progress !== data.current) { );
localData.completed_time = ""; loadingTitle.value = "正在更新成就系列数据";
localData.progress = data.current; let seriesDB = await ReadAllTGData("AchievementSeries");
localData.completed = false; await Promise.allSettled(
// 更新数据 seriesDB.map(async data => {
await UpdateTGDataByKey("Achievements", localData); const seriesId = data.id;
} const achievementsDB = await ReadTGDataByIndex("Achievements", "series", seriesId);
} data.completed_count = achievementsDB.filter(data => {
}); return data.completed === true;
// 更新成就系列的完成数 }).length;
const seriesDB = await ReadAllTGData("AchievementSeries"); await UpdateTGDataByKey("AchievementSeries", data);
seriesDB.map(async data => { })
const seriesId = data.id; );
const achievementsDB = await ReadTGDataByIndex("Achievements", "series", seriesId); loadingTitle.value = "正在刷新数据";
data.completed_count = achievementsDB.filter(data => { seriesDB = await ReadAllTGData("AchievementSeries");
return data.completed === true; const fin_achievements = seriesDB.reduce((a, b) => {
}).length; return a + b.completed_count;
await UpdateTGDataByKey("AchievementSeries", data); }, 0);
}); const total_achievements = seriesDB.reduce((a, b) => {
const achievementsDB = await ReadAllTGData("Achievements"); return a + b.total_count;
const fin_achievements = achievementsDB.filter(data => { }, 0);
return data.completed === true;
}).length;
const total_achievements = achievementsDB.length;
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;
} }
// 获取本地数据 // 获取本地数据