mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-15 09:48:14 +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,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;
|
||||||
}
|
}
|
||||||
// 获取本地数据
|
// 获取本地数据
|
||||||
|
|||||||
Reference in New Issue
Block a user