From 667aa6fb94e699bc371a155745ebeb99a84e4f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=AE=E6=A3=83?= Date: Mon, 10 Mar 2025 15:12:05 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E7=99=BB=E5=BD=95=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/pageConfig/tco-gameLogin.vue | 76 ++++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/src/components/pageConfig/tco-gameLogin.vue b/src/components/pageConfig/tco-gameLogin.vue index 61c03a73..cdde2f53 100644 --- a/src/components/pageConfig/tco-gameLogin.vue +++ b/src/components/pageConfig/tco-gameLogin.vue @@ -26,11 +26,12 @@ import TOverlay from "@comp/app/t-overlay.vue"; import showLoading from "@comp/func/loading.js"; import showSnackbar from "@comp/func/snackbar.js"; import QrcodeVue from "qrcode.vue"; -import { computed, onUnmounted, ref, watch } from "vue"; +import { onUnmounted, ref, watch } from "vue"; import { generateShareImg } from "@/utils/TGShare.js"; import hk4eReq from "@/web/request/hk4eReq.js"; import PassportReq from "@/web/request/passportReq.js"; +import passportReq from "@/web/request/passportReq.js"; import takumiReq from "@/web/request/takumiReq.js"; type ToGameLoginEmits = (e: "success", data: TGApp.App.Account.Cookie) => void; @@ -39,21 +40,28 @@ type ToGameLoginEmits = (e: "success", data: TGApp.App.Account.Cookie) => void; let cycleTimer: NodeJS.Timeout | null = null; const model = defineModel({ default: false }); -const isLauncherCode = defineModel("launcher", { default: false }); +const isLauncherCode = defineModel("launcher", { default: true }); const emits = defineEmits(); const codeUrl = ref(); -const codeTicket = computed(() => { - if (!codeUrl.value) return ""; - const url = new URL(codeUrl.value); - return url.searchParams.get("ticket") || ""; -}); +const codeTicket = ref(""); -watch(model, async (value) => { - if (value) { - await freshQr(); - cycleTimer = setInterval(cycleGetData, 1000); - } -}); +watch( + () => model.value, + async () => { + if (model.value) { + await freshQr(); + if (cycleTimer) { + clearInterval(cycleTimer); + cycleTimer = null; + } + if (isLauncherCode.value) cycleTimer = setInterval(cycleGetDataLauncher, 1000); + else cycleTimer = setInterval(cycleGetDataGame, 5000); + } else { + if (cycleTimer) clearInterval(cycleTimer); + cycleTimer = null; + } + }, +); async function share(): Promise { const shareDom = document.querySelector(".tog-box"); @@ -65,25 +73,26 @@ async function share(): Promise { } async function freshQr(): Promise { - let res; - if (isLauncherCode.value) res = await PassportReq.qrLogin.create(); - else res = await hk4eReq.loginQr.create(); - console.log(res); - if ("retcode" in res) { - showSnackbar.error(`[${res.retcode}] ${res.message}`); + if (isLauncherCode.value) { + const resp = await passportReq.qrLogin.create(); + if ("retcode" in resp) { + showSnackbar.error(`[${resp.retcode}] ${resp.message}`); + return; + } + codeUrl.value = resp.url; + codeTicket.value = resp.ticket; return; } - codeUrl.value = res.url; + const resp = await hk4eReq.loginQr.create(); + if ("retcode" in resp) { + showSnackbar.error(`[${resp.retcode}] ${resp.message}`); + return; + } + codeUrl.value = resp.url; + codeTicket.value = new URL(codeUrl.value).searchParams.get("ticket") || ""; } -async function cycleGetData() { - if (cycleTimer === null || codeTicket.value === "") return; - if (isLauncherCode.value) await cycleGetDataLauncher(cycleTimer); - else await cycleGetDataGame(cycleTimer); -} - -// eslint-disable-next-line no-undef -async function cycleGetDataLauncher(timer: NodeJS.Timeout): Promise { +async function cycleGetDataLauncher(): Promise { const res = await PassportReq.qrLogin.query(codeTicket.value); console.log(res); if ("retcode" in res) { @@ -91,7 +100,7 @@ async function cycleGetDataLauncher(timer: NodeJS.Timeout): Promise { if (res.retcode === -106) { await freshQr(); } else { - clearInterval(timer); + if (cycleTimer) clearInterval(cycleTimer); cycleTimer = null; model.value = false; } @@ -99,7 +108,7 @@ async function cycleGetDataLauncher(timer: NodeJS.Timeout): Promise { } if (res.status === "Created" || res.status === "Scanned") return; if (res.status === "Confirmed") { - clearInterval(timer); + if (cycleTimer) clearInterval(cycleTimer); cycleTimer = null; const ck: TGApp.App.Account.Cookie = { account_id: res.user_info.aid, @@ -115,8 +124,7 @@ async function cycleGetDataLauncher(timer: NodeJS.Timeout): Promise { } } -// eslint-disable-next-line no-undef -async function cycleGetDataGame(timer: NodeJS.Timeout): Promise { +async function cycleGetDataGame(): Promise { const res = await hk4eReq.loginQr.state(codeTicket.value); console.log(res); if ("retcode" in res) { @@ -124,7 +132,7 @@ async function cycleGetDataGame(timer: NodeJS.Timeout): Promise { if (res.retcode === -106) { await freshQr(); } else { - clearInterval(timer); + if (cycleTimer) clearInterval(cycleTimer); cycleTimer = null; model.value = false; } @@ -132,7 +140,7 @@ async function cycleGetDataGame(timer: NodeJS.Timeout): Promise { } if (res.stat === "Init" || res.stat === "Scanned") return; if (res.stat === "Confirmed") { - clearInterval(timer); + if (cycleTimer) clearInterval(cycleTimer); cycleTimer = null; if (res.payload.proto === "Raw") { showSnackbar.error(`返回数据异常:${res.payload}`);