♻️ 重构颂愿页面数据刷新逻辑

This commit is contained in:
BTMuli
2026-02-17 12:43:58 +08:00
parent be48c32d0d
commit f2fc45204f

View File

@@ -8,7 +8,7 @@
<v-select
v-model="uidCur"
:hide-details="true"
:items="selectItem"
:items="uidList"
density="compact"
label="游戏UID"
variant="outlined"
@@ -95,8 +95,8 @@ import GbrTable from "@comp/userGacha/gbr-table.vue";
import UgoUid from "@comp/userGacha/ugo-uid.vue";
import hk4eReq from "@req/hk4eReq.js";
import takumiReq from "@req/takumiReq.js";
import TSUserAccount from "@Sqlm/userAccount.js";
import TSUserGachaB from "@Sqlm/userGachaB.js";
import useAppStore from "@store/app.js";
import useUserStore from "@store/user.js";
import { path } from "@tauri-apps/api";
import { open } from "@tauri-apps/plugin-dialog";
@@ -108,7 +108,6 @@ import { useRouter } from "vue-router";
import { AppGachaBData } from "@/data/index.js";
const router = useRouter();
const { isLogin } = storeToRefs(useAppStore());
const { account, cookie } = storeToRefs(useUserStore());
const ovMode = ref<"export" | "import">("import");
@@ -118,32 +117,23 @@ const ovFpi = ref<string>();
const authkey = ref<string>("");
const uidCur = ref<string>();
const tab = ref<string>("overview");
const selectItem = shallowRef<Array<string>>([]);
const uidList = shallowRef<Array<string>>([]);
const gachaListCur = shallowRef<Array<TGApp.Sqlite.Gacha.GachaB>>([]);
onMounted(async () => {
await TGLogger.Info("[UserGachaB][onMounted] 进入千星奇域页面");
await showLoading.start("正在加载千星奇域祈愿数据", "正在获取UID列表...");
await reloadUid();
if (uidCur.value) {
await showLoading.update(`UID: ${uidCur.value}`);
gachaListCur.value = await TSUserGachaB.getGachaRecords(uidCur.value);
await TGLogger.Info(`[UserGachaB][onMounted] 祈愿记录数: ${gachaListCur.value.length}`);
}
await showLoading.end();
showSnackbar.success(`加载完成,共 ${gachaListCur.value.length} 条祈愿记录`);
});
watch(
() => uidCur.value,
async (newUid) => {
if (!newUid) return;
gachaListCur.value = await TSUserGachaB.getGachaRecords(newUid);
showSnackbar.success(`成功获取 ${gachaListCur.value.length} 条祈愿数据`);
await TGLogger.Info(
`[UserGachaB][${newUid}][watch] 成功获取 ${gachaListCur.value.length} 条祈愿数据`,
);
},
async () => await loadGachaBList(),
);
watch(
() => account.value,
async () => await reloadUid(),
);
/**
@@ -153,14 +143,24 @@ async function toGacha(): Promise<void> {
await router.push({ name: "祈愿记录" });
}
async function reloadUid(): Promise<void> {
selectItem.value = await TSUserGachaB.getUidList();
if (selectItem.value.includes(account.value.gameUid)) uidCur.value = account.value.gameUid;
else if (selectItem.value.length > 0) uidCur.value = selectItem.value[0];
else if (isLogin.value) {
selectItem.value = [account.value.gameUid];
uidCur.value = account.value.gameUid;
} else uidCur.value = undefined;
async function loadGachaBList(): Promise<void> {
if (uidCur.value === undefined || uidCur.value === "") return;
gachaListCur.value = await TSUserGachaB.getGachaRecords(uidCur.value);
showSnackbar.success(`成功获取 ${uidCur.value}${gachaListCur.value.length} 条祈愿数据`);
await TGLogger.Info(
`[GachaB][loadGachaBList] 成功获取 ${uidCur.value}${gachaListCur.value.length} 条祈愿数据`,
);
}
async function reloadUid(uid?: string): Promise<void> {
uidList.value = await TSUserGachaB.getUidList();
if (uidList.value.length === 0) uidList.value = [account.value.gameUid];
if (uidList.value.includes(account.value.gameUid)) {
if (uid === undefined) uidCur.value = account.value.gameUid;
} else {
uidList.value = [account.value.gameUid, ...uidList.value];
if (uid === undefined) uidCur.value = uidList.value[0];
}
}
/**
@@ -169,65 +169,74 @@ async function reloadUid(): Promise<void> {
* @return {Promise<void>} void
*/
async function confirmRefresh(force: boolean): Promise<void> {
if (!isLogin.value || !cookie.value) {
showSnackbar.warn("请先登录账号");
return;
}
await TGLogger.Info(`[UserGachaB][${account.value.gameUid}] 开始刷新千星奇域祈愿数据`);
if (uidCur.value && uidCur.value !== account.value.gameUid) {
const switchCheck = await showDialog.check(
"是否切换游戏账户",
`确认则尝试切换至 ${uidCur.value}`,
);
if (switchCheck) {
await useUserStore().switchGameAccount(uidCur.value);
await confirmRefresh(force);
let rfAccount = account.value;
let rfCk = cookie.value;
if (!uidCur.value) {
if (!rfCk) {
showSnackbar.warn("请先登录");
await TGLogger.Warn(`[GachaB][confirmRefresh][${rfAccount.gameUid}] 未登录`);
return;
}
const freshCheck = await showDialog.check(
"确定刷新?",
`用户${account.value.gameUid}与当前UID${uidCur.value}不一致`,
);
if (!freshCheck) {
showSnackbar.cancel("已取消祈愿数据刷新");
return;
} else {
const gcFind = await TSUserAccount.game.getAccountByGid(uidCur.value.toString());
console.log(uidCur.value, gcFind);
if (!gcFind) {
const check = await showDialog.check(
`确定刷新?`,
`未找到 ${uidCur.value} 对应 UID将刷新 ${rfAccount.gameUid} 数据`,
);
if (!check) return;
} else {
const acFind = await TSUserAccount.account.getAccount(gcFind.uid);
if (!acFind) {
const check = await showDialog.check(
`确定刷新?`,
`未找到 ${uidCur.value} 对应 CK将刷新 ${rfAccount.gameUid} 数据`,
);
if (!check) return;
} else {
rfAccount = gcFind;
rfCk = acFind.cookie;
}
}
}
await showLoading.start(`正在刷新祈愿数据`, `UID:${account.value.gameUid},正在获取 authkey`);
const authkeyRes = await takumiReq.bind.authKey(cookie.value, account.value);
await TGLogger.Info(`[GachaB][${rfAccount.gameUid}] 开始刷新千星奇域祈愿数据`);
await showLoading.start(`正在刷新祈愿数据`, `UID:${rfAccount.gameUid},正在获取 authkey`);
const authkeyRes = await takumiReq.bind.authKey(rfCk!, rfAccount);
if (typeof authkeyRes === "string") {
authkey.value = authkeyRes;
await TGLogger.Info(`[UserGacha][${account.value.gameUid}] 成功获取 authkey`);
await TGLogger.Info(`[GachaB][${rfAccount.gameUid}] 成功获取 authkey`);
} else {
showSnackbar.error("获取 authkey 失败");
await TGLogger.Error(`[UserGacha][${account.value.gameUid}] 获取 authkey 失败`);
await TGLogger.Error(`[GachaB][${rfAccount.gameUid}] 获取 authkey 失败`);
await TGLogger.Error(
`[UserGachaB][${account.value.gameUid}] ${authkeyRes.retcode} ${authkeyRes.message}`,
`[GachaB][${rfAccount.gameUid}] ${authkeyRes.retcode} ${authkeyRes.message}`,
);
await showLoading.end();
return;
}
await refreshGachaPool("1000", "常驻颂愿", force);
await refreshGachaPool("2000", "活动颂愿", force);
// await refreshGachaPool("20011", "活动颂愿·男", force);
// await refreshGachaPool("20012", "活动颂愿·男2", force);
// await refreshGachaPool("20021", "活动颂愿·女", force);
// await refreshGachaPool("20022", "活动颂愿·女2", force);
await showLoading.end();
await refreshGachaPool(rfAccount, "1000", "常驻颂愿", force);
await refreshGachaPool(rfAccount, "2000", "活动颂愿", force);
// await refreshGachaPool(rfAccount, "20011", "活动颂愿·男", force);
// await refreshGachaPool(rfAccount, "20012", "活动颂愿·男2", force);
// await refreshGachaPool(rfAccount, "20021", "活动颂愿·女", force);
// await refreshGachaPool(rfAccount, "20022", "活动颂愿·女2", force);
await TGLogger.Info(`[UserGacha][${account.value.gameUid}] 刷新祈愿数据完成`);
showSnackbar.success("祈愿数据刷新完成,即将刷新页面");
await new Promise<void>((resolve) => setTimeout(resolve, 1500));
window.location.reload();
await reloadUid(uidCur.value);
await loadGachaBList();
await showLoading.end();
}
/**
* 刷新指定祈愿池数据
* @param {string} gachaType 祈愿池类型
* @param {string} gachaName 祈愿池名称
* @param {boolean} force 是否强制刷新
* @return {Promise<void>} void
* @param ac - 刷新账号
* @param gachaType - 祈愿池类型
* @param gachaName - 祈愿池名称
* @param force - 是否强制刷新
* @returns Promise<void>
*/
async function refreshGachaPool(
ac: TGApp.Sqlite.Account.Game,
gachaType: string,
gachaName: string,
force: boolean,
@@ -237,7 +246,7 @@ async function refreshGachaPool(
let page = 0;
await showLoading.start(`正在刷新${gachaName}数据`, "");
if (!force) {
endId = (await TSUserGachaB.getGachaCheck(account.value.gameUid, gachaType)) ?? "0";
endId = (await TSUserGachaB.getGachaCheck(ac.gameUid, gachaType)) ?? "0";
}
while (true) {
page++;
@@ -245,11 +254,9 @@ async function refreshGachaPool(
console.log(gachaRes);
if (!Array.isArray(gachaRes)) {
showSnackbar.error(`[${gachaType}][${gachaRes.retcode}] ${gachaRes.message}`);
await TGLogger.Error(`[GachaB][${ac.gameUid}][refreshGachaPool] 获取祈愿数据失败`);
await TGLogger.Error(
`[UserGachaB][${account.value.gameUid}][refreshGachaPool] 获取祈愿数据失败`,
);
await TGLogger.Error(
`[UserGachaB][${account.value.gameUid}][refreshGachaPool] ${gachaRes.retcode} ${gachaRes.message}`,
`[GachaB][${ac.gameUid}][refreshGachaPool] ${gachaRes.retcode} ${gachaRes.message}`,
);
await new Promise<void>((resolve) => setTimeout(resolve, 1000));
break;
@@ -273,7 +280,7 @@ async function refreshGachaPool(
};
uigfList.push(tempItem);
}
await TSUserGachaB.insertGachaList(account.value.gameUid, uigfList);
await TSUserGachaB.insertGachaList(ac.gameUid, uigfList);
if (!force && gachaRes.some((i) => i.id.toString() === endId.toString())) break;
reqId = gachaRes[gachaRes.length - 1].id.toString();
if (force) await new Promise<void>((resolve) => setTimeout(resolve, 1000));
@@ -289,14 +296,14 @@ async function deleteGacha(): Promise<void> {
showSnackbar.error("暂无祈愿数据");
return;
}
await TGLogger.Info(`[UserGachaB][${uidCur.value}][deleteGacha] 删除祈愿数据`);
await TGLogger.Info(`[GachaB][${uidCur.value}][deleteGacha] 删除祈愿数据`);
const delCheck = await showDialog.check(
"确定删除祈愿数据?",
`UID${uidCur.value},共 ${gachaListCur.value.length} 条数据`,
);
if (!delCheck) {
showSnackbar.cancel("已取消祈愿数据删除");
await TGLogger.Info(`[UserGachaB][${uidCur.value}][deleteGacha] 已取消祈愿数据删除`);
await TGLogger.Info(`[GachaB][${uidCur.value}][deleteGacha] 已取消祈愿数据删除`);
return;
}
const uidList = await TSUserGachaB.getUidList();
@@ -309,13 +316,13 @@ async function deleteGacha(): Promise<void> {
}
await showLoading.start("正在删除祈愿数据", `UID:${uidCur.value}`);
await TSUserGachaB.deleteRecords(uidCur.value);
await showLoading.end();
showSnackbar.success(`已成功删除 ${uidCur.value} 的祈愿数据,即将刷新页面`);
await TGLogger.Info(
`[UserGachaB][${uidCur.value}][deleteGacha] 成功删除 ${gachaListCur.value.length} 条祈愿数据`,
);
await new Promise<void>((resolve) => setTimeout(resolve, 1500));
window.location.reload();
showSnackbar.success(`已成功删除 ${uidCur.value} 的祈愿数据,即将刷新页面`);
await reloadUid();
await loadGachaBList();
await showLoading.end();
}
async function importUigf(): Promise<void> {