mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-03-15 03:53:16 +08:00
♻️ 调整成就排序&搜索逻辑
This commit is contained in:
@@ -36,7 +36,7 @@ import TopNameCard from "@comp/app/top-nameCard.vue";
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import VpOverlaySearch from "@comp/viewPost/vp-overlay-search.vue";
|
||||
import TSUserAchi from "@Sqlm/userAchi.js";
|
||||
import { computed, onMounted, ref, shallowRef, watch } from "vue";
|
||||
import { computed, nextTick, onMounted, ref, shallowRef, watch } from "vue";
|
||||
|
||||
import TuaAchiOverlay from "./tua-achi-overlay.vue";
|
||||
import TuaAchi from "./tua-achi.vue";
|
||||
@@ -51,7 +51,7 @@ type TuaAchiListProps = {
|
||||
isSearch: boolean;
|
||||
};
|
||||
type TuaAchiListEmits = {
|
||||
(e: "update:series", v: number | undefined): void;
|
||||
(e: "update:series", v: number): void;
|
||||
(e: "update:isSearch", v: boolean): false;
|
||||
};
|
||||
|
||||
@@ -93,17 +93,21 @@ async function searchAchi(): Promise<void> {
|
||||
}
|
||||
nameCard.value = undefined;
|
||||
ncData.value = undefined;
|
||||
achievements.value = await TSUserAchi.searchAchi(props.uid, props.search);
|
||||
const searchRes = await TSUserAchi.searchAchi(props.uid, props.search);
|
||||
if (showOverlay.value) showOverlay.value = false;
|
||||
if (achievements.value.length > 0) {
|
||||
if (searchRes.length > 0) {
|
||||
achievements.value = searchRes;
|
||||
showSnackbar.success(`成功获取${achievements.value.length}条成就`);
|
||||
emits("update:series", undefined);
|
||||
emits("update:series", -1);
|
||||
await nextTick();
|
||||
} else {
|
||||
showSnackbar.warn("未搜索到相关成就");
|
||||
}
|
||||
emits("update:isSearch", false);
|
||||
}
|
||||
|
||||
async function loadAchi(): Promise<void> {
|
||||
if (props.isSearch || props.series === undefined) return;
|
||||
if (props.isSearch) return;
|
||||
achievements.value = await TSUserAchi.getAchievements(props.uid, props.series);
|
||||
const ov = await TSUserAchi.getOverview(props.uid, props.series);
|
||||
isFinish.value = ov.fin === ov.total;
|
||||
|
||||
@@ -123,6 +123,27 @@ async function getAchi(
|
||||
return res[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* 对混合系列成就数据进行排序
|
||||
* @since Beta v0.9.2
|
||||
* @param data - 成旧数据
|
||||
* @returns 排序后的成就数据
|
||||
*/
|
||||
function sortMixAchi(
|
||||
data: Array<TGApp.App.Achievement.RenderItem>,
|
||||
): Array<TGApp.App.Achievement.RenderItem> {
|
||||
return data.sort((a, b) => {
|
||||
if (a.isCompleted !== b.isCompleted) return Number(a.isCompleted) - Number(b.isCompleted);
|
||||
if (!a.isCompleted) {
|
||||
if (a.version !== b.version) return Number(b.version) - Number(a.version);
|
||||
return a.order - b.order;
|
||||
}
|
||||
if (b.completedTime !== a.completedTime) return b.completedTime.localeCompare(a.completedTime);
|
||||
if (a.version !== b.version) return Number(b.version) - Number(a.version);
|
||||
return b.order - a.order;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取成就数据
|
||||
* @since Beta v0.9.2
|
||||
@@ -135,7 +156,7 @@ async function getAchievements(
|
||||
series?: number,
|
||||
): Promise<Array<TGApp.App.Achievement.RenderItem>> {
|
||||
const db = await TGSqlite.getDB();
|
||||
const res: Array<TGApp.App.Achievement.RenderItem> = [];
|
||||
let res: Array<TGApp.App.Achievement.RenderItem> = [];
|
||||
const userData = await db.select<Array<TGApp.Sqlite.Achievement.TableRaw>>(
|
||||
"SELECT * FROM Achievements WHERE uid = ?;",
|
||||
[uid],
|
||||
@@ -148,13 +169,11 @@ async function getAchievements(
|
||||
const achievement = getRenderAchi(achi, uid, achiFind);
|
||||
res.push(achievement);
|
||||
}
|
||||
res.sort(
|
||||
(a, b) =>
|
||||
Number(a.isCompleted) - Number(b.isCompleted) ||
|
||||
b.version.localeCompare(a.version) ||
|
||||
b.series - a.series ||
|
||||
b.order - a.order,
|
||||
);
|
||||
if (series && series !== -1) {
|
||||
res.sort((a, b) => Number(a.isCompleted) - Number(b.isCompleted) || a.order - b.order);
|
||||
} else {
|
||||
res = sortMixAchi(res);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -177,7 +196,7 @@ async function searchAchi(
|
||||
const versionReg = /^v\d+(\.\d+)?$/;
|
||||
const idReg = /^i\d+$/;
|
||||
let rawData: Array<TGApp.App.Achievement.Item>;
|
||||
const res: Array<TGApp.App.Achievement.RenderItem> = [];
|
||||
let res: Array<TGApp.App.Achievement.RenderItem> = [];
|
||||
if (versionReg.test(keyword)) {
|
||||
const version = keyword.replace("v", "");
|
||||
rawData = AppAchievementsData.filter((i) => i.version.includes(version));
|
||||
@@ -197,9 +216,7 @@ async function searchAchi(
|
||||
else achievement = getRenderAchi(data, uid, achiFind);
|
||||
res.push(achievement);
|
||||
}
|
||||
res.sort(
|
||||
(a, b) => a.isCompleted.toString().localeCompare(b.isCompleted.toString()) || a.order - b.order,
|
||||
);
|
||||
res = sortMixAchi(res);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,8 @@ export async function tryCopyYae(): Promise<boolean> {
|
||||
await copyFile(srcDllPath, targetPath);
|
||||
const check2 = await exists(targetPath);
|
||||
if (!check2) {
|
||||
showSnackbar.warn("移动 dll 失败");
|
||||
showSnackbar.warn("移动 dll 失败,请手动移动");
|
||||
// TODO: 跳转手动移动说明站点
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user