mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-03-21 04:49:46 +08:00
♻️ 重构颂愿页面数据刷新逻辑
This commit is contained in:
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user