mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-03-16 04:03:17 +08:00
♻️ 重构脚本页面加载&执行逻辑
This commit is contained in:
@@ -48,7 +48,6 @@ import miscReq from "@req/miscReq.js";
|
||||
import painterReq from "@req/painterReq.js";
|
||||
import postReq from "@req/postReq.js";
|
||||
import useAppStore from "@store/app.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import TGNotify from "@utils/TGNotify.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
@@ -73,11 +72,16 @@ type ParseMission = {
|
||||
/** 完成次数 */
|
||||
cycleTimes?: number;
|
||||
};
|
||||
/** 任务组件参数 */
|
||||
type TusMissionProps = {
|
||||
/** 米社账号 */
|
||||
acCur: TGApp.App.Account.User | undefined;
|
||||
};
|
||||
|
||||
const { cookie, uid } = storeToRefs(useUserStore());
|
||||
const { cancelLike } = storeToRefs(useAppStore());
|
||||
|
||||
const loadScript = defineModel<boolean>();
|
||||
const props = defineProps<TusMissionProps>();
|
||||
|
||||
const todayPoints = ref<number>(0);
|
||||
const totalPoints = ref<number>(0);
|
||||
@@ -90,7 +94,7 @@ const missionList = shallowRef<Array<TGApp.BBS.Mission.MissionItem>>([]);
|
||||
defineExpose({ tryAuto });
|
||||
|
||||
watch(
|
||||
() => uid.value,
|
||||
() => props.acCur,
|
||||
() => {
|
||||
todayPoints.value = 0;
|
||||
totalPoints.value = 0;
|
||||
@@ -136,6 +140,10 @@ function mergeMission(
|
||||
}
|
||||
|
||||
async function tryRefresh(): Promise<void> {
|
||||
if (!props.acCur) {
|
||||
showSnackbar.warn("未检测到当前账号数据");
|
||||
return;
|
||||
}
|
||||
if (loadScript.value) {
|
||||
showSnackbar.warn("任务正在执行中,请稍后再试");
|
||||
return;
|
||||
@@ -144,19 +152,17 @@ async function tryRefresh(): Promise<void> {
|
||||
loadState.value = true;
|
||||
await TGLogger.ScriptSep("米游币任务");
|
||||
await TGLogger.Script("[米游币任务]刷新任务状态");
|
||||
if (!cookie.value) {
|
||||
await TGLogger.Script("[米游币任务]未检测到Cookie");
|
||||
showSnackbar.warn("当前账号未登录,请先登录");
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
return;
|
||||
}
|
||||
await refreshState(cookie.value);
|
||||
await refreshState(props.acCur.cookie);
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
loadScript.value = false;
|
||||
loadState.value = false;
|
||||
}
|
||||
|
||||
async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
if (!props.acCur) {
|
||||
showSnackbar.warn("未检测到当前账号数据");
|
||||
return;
|
||||
}
|
||||
if (loadScript.value) {
|
||||
showSnackbar.warn("任务正在执行中,请稍后再试");
|
||||
return;
|
||||
@@ -165,20 +171,14 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
loadMission.value = true;
|
||||
await TGLogger.ScriptSep("米游币任务");
|
||||
await TGLogger.Script("[米游币任务]开始执行任务");
|
||||
if (!cookie.value) {
|
||||
await TGLogger.Script("[米游币任务]未检测到Cookie");
|
||||
showSnackbar.warn("当前账号未登录,请先登录");
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
return;
|
||||
}
|
||||
await refreshState(cookie.value);
|
||||
await refreshState(props.acCur.cookie);
|
||||
if (parseMissions.value.length === 0 || missionList.value.length === 0) {
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
loadScript.value = false;
|
||||
loadMission.value = false;
|
||||
return;
|
||||
}
|
||||
await autoSign(cookie.value, skip);
|
||||
await autoSign(props.acCur.cookie, skip);
|
||||
const postFilter = parseMissions.value.filter((i) => i.key !== "continuous_sign");
|
||||
if (postFilter.every((i) => i.status)) {
|
||||
await TGLogger.Script("[米游币任务]所有任务已完成");
|
||||
@@ -198,8 +198,12 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
if (viewFind) viewCnt = viewFind.process;
|
||||
await TGLogger.Script("[米游币任务]获取帖子列表");
|
||||
const listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20);
|
||||
const ckShare = { stoken: cookie.value.stoken, stuid: cookie.value.stuid, mid: cookie.value.mid };
|
||||
const ckPost = { ltoken: cookie.value.ltoken, ltuid: cookie.value.ltuid };
|
||||
const ckShare = {
|
||||
stoken: props.acCur.cookie.stoken,
|
||||
stuid: props.acCur.cookie.stuid,
|
||||
mid: props.acCur.cookie.mid,
|
||||
};
|
||||
const ckPost = { ltoken: props.acCur.cookie.ltoken, ltuid: props.acCur.cookie.ltuid };
|
||||
for (const post of listResp.list) {
|
||||
if (!isShare) {
|
||||
await TGLogger.Script(`[米游币任务]正在分享帖子${post.post.post_id}`);
|
||||
@@ -256,7 +260,7 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
}
|
||||
}
|
||||
await TGLogger.Script("[米游币任务]任务执行完毕,即将刷新任务状态");
|
||||
await refreshState(cookie.value);
|
||||
await refreshState(props.acCur.cookie);
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
loadScript.value = false;
|
||||
loadMission.value = false;
|
||||
|
||||
@@ -62,7 +62,6 @@ import miscReq from "@req/miscReq.js";
|
||||
import takumiReq from "@req/takumiReq.js";
|
||||
import TSUserAccount from "@Sqlm/userAccount.js";
|
||||
import useBBSStore from "@store/bbs.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import TGNotify from "@utils/TGNotify.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
@@ -90,11 +89,17 @@ type SignAccount = {
|
||||
/** 奖励信息 */
|
||||
reward?: TGApp.BBS.Sign.HomeAward;
|
||||
};
|
||||
/** 签到组件参数 */
|
||||
type TusSignProps = {
|
||||
/** 米社账号 */
|
||||
acCur: TGApp.App.Account.User | undefined;
|
||||
};
|
||||
|
||||
const { cookie, uid } = storeToRefs(useUserStore());
|
||||
const { gameList } = storeToRefs(useBBSStore());
|
||||
|
||||
const loadScript = defineModel<boolean>();
|
||||
const props = defineProps<TusSignProps>();
|
||||
|
||||
const loadState = ref<boolean>(false);
|
||||
const loadSign = ref<boolean>(false);
|
||||
const signAccounts = ref<Array<SignAccount>>([]);
|
||||
@@ -103,7 +108,7 @@ const gameAccounts = shallowRef<Array<TGApp.Sqlite.Account.Game>>([]);
|
||||
defineExpose({ tryAuto });
|
||||
|
||||
watch(
|
||||
() => uid.value,
|
||||
() => props.acCur,
|
||||
async () => await loadData(),
|
||||
);
|
||||
|
||||
@@ -120,8 +125,8 @@ function getGameInfo(biz: string): SignGameInfo {
|
||||
async function loadData(): Promise<void> {
|
||||
gameAccounts.value = [];
|
||||
signAccounts.value = [];
|
||||
if (uid.value === undefined) return;
|
||||
gameAccounts.value = await TSUserAccount.game.getAccount(uid.value);
|
||||
if (props.acCur === undefined) return;
|
||||
gameAccounts.value = await TSUserAccount.game.getAccount(props.acCur.uid);
|
||||
for (const ac of gameAccounts.value) {
|
||||
const info = getGameInfo(ac.gameBiz);
|
||||
signAccounts.value.push({ selected: true, account: ac, info });
|
||||
@@ -147,6 +152,10 @@ async function deleteAccount(item: SignAccount): Promise<void> {
|
||||
}
|
||||
|
||||
async function tryRefresh(): Promise<void> {
|
||||
if (!props.acCur) {
|
||||
showSnackbar.warn("未检测到当前账号数据");
|
||||
return;
|
||||
}
|
||||
if (loadScript.value) {
|
||||
showSnackbar.warn("任务正在执行中,请稍后再试");
|
||||
return;
|
||||
@@ -155,15 +164,7 @@ async function tryRefresh(): Promise<void> {
|
||||
loadState.value = true;
|
||||
await TGLogger.ScriptSep("签到任务");
|
||||
await TGLogger.Script("[签到任务]刷新账户");
|
||||
if (!cookie.value) {
|
||||
await TGLogger.Script("[签到任务]未检测到Cookie");
|
||||
showSnackbar.warn("当前账户未登录,请先登录");
|
||||
await TGLogger.ScriptSep("签到任务", false);
|
||||
loadState.value = false;
|
||||
loadScript.value = false;
|
||||
return;
|
||||
}
|
||||
await refreshState(cookie.value);
|
||||
await refreshState(props.acCur.cookie, props.acCur.uid);
|
||||
await TGLogger.Script(`[签到任务]刷新账户成功,成功获取${signAccounts.value.length}个账户`);
|
||||
await TGLogger.ScriptSep("签到任务", false);
|
||||
loadScript.value = false;
|
||||
@@ -171,6 +172,10 @@ async function tryRefresh(): Promise<void> {
|
||||
}
|
||||
|
||||
async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
if (!props.acCur) {
|
||||
showSnackbar.warn("未检测到当前账号数据");
|
||||
return;
|
||||
}
|
||||
if (loadScript.value) {
|
||||
showSnackbar.warn("任务正在执行中,请稍后再试");
|
||||
return;
|
||||
@@ -179,17 +184,9 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
loadSign.value = true;
|
||||
await TGLogger.ScriptSep("签到任务");
|
||||
await TGLogger.Script("[签到任务]执行签到");
|
||||
if (!cookie.value) {
|
||||
await TGLogger.Script("[签到任务]未检测到Cookie");
|
||||
showSnackbar.warn("当前账户未登录,请先登录");
|
||||
await TGLogger.ScriptSep("签到任务", false);
|
||||
loadScript.value = false;
|
||||
loadSign.value = false;
|
||||
return;
|
||||
}
|
||||
if (signAccounts.value.length === 0 || signAccounts.value.some((i) => i.stat === undefined)) {
|
||||
await TGLogger.Script("[签到任务]未检测到游戏账户或签到状态,正在刷新");
|
||||
await refreshState(cookie.value);
|
||||
await refreshState(props.acCur.cookie, props.acCur.uid);
|
||||
}
|
||||
const selected = signAccounts.value.filter((i) => i.selected);
|
||||
if (selected.length === 0) {
|
||||
@@ -200,23 +197,22 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
loadSign.value = false;
|
||||
return;
|
||||
}
|
||||
await trySign(selected, cookie.value, skip);
|
||||
await refreshState(cookie.value);
|
||||
await trySign(selected, props.acCur.cookie, skip);
|
||||
await refreshState(props.acCur.cookie, props.acCur.uid);
|
||||
await TGLogger.Script("[签到任务]签到任务执行完毕");
|
||||
await TGLogger.ScriptSep("签到任务", false);
|
||||
loadScript.value = false;
|
||||
loadSign.value = false;
|
||||
}
|
||||
|
||||
async function refreshState(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
if (uid.value === undefined) return;
|
||||
async function refreshState(ck: TGApp.App.Account.Cookie, uid: string): Promise<void> {
|
||||
if (signAccounts.value.length === 0) {
|
||||
await TGLogger.Script("[签到任务]未检测到游戏账户,正在获取");
|
||||
const gameResp = await takumiReq.bind.gameRoles(ck);
|
||||
if (Array.isArray(gameResp)) {
|
||||
await TGLogger.Script("[签到任务]获取游戏账户成功");
|
||||
await TSUserAccount.game.saveAccounts(uid.value, gameResp);
|
||||
gameAccounts.value = await TSUserAccount.game.getAccount(uid.value);
|
||||
await TSUserAccount.game.saveAccounts(uid, gameResp);
|
||||
gameAccounts.value = await TSUserAccount.game.getAccount(uid);
|
||||
for (const ac of gameAccounts.value) {
|
||||
const info = getGameInfo(ac.gameBiz);
|
||||
const find = signAccounts.value.find((i) => i.account === ac);
|
||||
|
||||
@@ -32,18 +32,6 @@
|
||||
<span>{{ item.raw.brief.nickname }}</span>
|
||||
<span>UID:{{ item.raw.uid }}</span>
|
||||
</div>
|
||||
<div class="append">
|
||||
<v-icon v-if="item.raw.uid === uid" color="green" title="当前登录账号">
|
||||
mdi-account-check
|
||||
</v-icon>
|
||||
<v-icon
|
||||
v-else
|
||||
icon="mdi-account-convert"
|
||||
size="small"
|
||||
title="切换用户"
|
||||
@click="loadAccount(item.raw.uid)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</v-select>
|
||||
@@ -61,8 +49,8 @@
|
||||
<div class="us-page-container">
|
||||
<!-- 左侧脚本列表 -->
|
||||
<div class="us-scripts">
|
||||
<TusMission ref="mission" v-model="runScript" />
|
||||
<TusSign ref="sign" v-model="runScript" />
|
||||
<TusMission ref="mission" v-model="runScript" :ac-cur="curAccount" />
|
||||
<TusSign ref="sign" v-model="runScript" :ac-cur="curAccount" />
|
||||
</div>
|
||||
<!-- 右侧脚本输出 -->
|
||||
<TusOutput />
|
||||
@@ -81,6 +69,7 @@ import painterReq from "@req/painterReq.js";
|
||||
import TSUserAccount from "@Sqlm/userAccount.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import { exit } from "@tauri-apps/plugin-process";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import TGNotify from "@utils/TGNotify.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { onBeforeMount, onMounted, ref, shallowRef, useTemplateRef } from "vue";
|
||||
@@ -89,7 +78,7 @@ import { useRoute, useRouter } from "vue-router";
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
const { uid, briefInfo, cookie, account } = storeToRefs(useUserStore());
|
||||
const { uid } = storeToRefs(useUserStore());
|
||||
|
||||
// 路由参数
|
||||
const autoRun = ref<boolean>(false);
|
||||
@@ -97,10 +86,12 @@ const exitAfter = ref<boolean>(false);
|
||||
const skipGeetest = ref<boolean>(false);
|
||||
const targetUids = shallowRef<Array<string>>([]);
|
||||
|
||||
const accounts = shallowRef<Array<TGApp.App.Account.User>>([]);
|
||||
const curAccount = shallowRef<TGApp.App.Account.User>();
|
||||
const runScript = ref<boolean>(false);
|
||||
const runAll = ref<boolean>(false);
|
||||
|
||||
const accounts = shallowRef<Array<TGApp.App.Account.User>>([]);
|
||||
const curAccount = shallowRef<TGApp.App.Account.User>();
|
||||
|
||||
const missionEl = useTemplateRef("mission");
|
||||
const signEl = useTemplateRef("sign");
|
||||
|
||||
@@ -137,7 +128,12 @@ async function tryAutoRun(): Promise<void> {
|
||||
}
|
||||
const startTime = Date.now();
|
||||
for (const uid of uids) {
|
||||
await loadAccount(uid);
|
||||
const acFind = await TSUserAccount.account.getAccount(uid);
|
||||
if (!acFind) {
|
||||
await TGLogger.Script(`未检测到 ${uid} 对应账号数据,跳过`);
|
||||
continue;
|
||||
}
|
||||
curAccount.value = acFind;
|
||||
await tryExecAll();
|
||||
}
|
||||
if (exitAfter.value) {
|
||||
@@ -149,31 +145,9 @@ async function tryAutoRun(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function loadAccount(ac: string): Promise<void> {
|
||||
if (uid.value && ac === uid.value) {
|
||||
showSnackbar.warn("该账户已经登录,无需切换");
|
||||
return;
|
||||
}
|
||||
const accountGet = await TSUserAccount.account.getAccount(ac);
|
||||
if (!accountGet) {
|
||||
showSnackbar.warn(`未找到${uid}的账号信息,请重新登录`);
|
||||
return;
|
||||
}
|
||||
uid.value = ac;
|
||||
briefInfo.value = accountGet.brief;
|
||||
cookie.value = accountGet.cookie;
|
||||
const gameAccount = await TSUserAccount.game.getCurAccount(ac);
|
||||
if (!gameAccount) {
|
||||
showSnackbar.warn(`未找到${uid.value}的游戏账号信息,请尝试刷新`);
|
||||
return;
|
||||
}
|
||||
account.value = gameAccount;
|
||||
showSnackbar.success(`成功切换到用户${uid.value}`);
|
||||
}
|
||||
|
||||
async function tryCkVerify(): Promise<void> {
|
||||
if (!cookie.value) {
|
||||
showSnackbar.warn("当前账号未登录,请先登录");
|
||||
if (!curAccount.value) {
|
||||
showSnackbar.warn("未检测到当前登录账号");
|
||||
return;
|
||||
}
|
||||
const check = await showDialog.check("确定验证?", "将通过执行米社社区打卡以验证ck有效性");
|
||||
@@ -182,9 +156,9 @@ async function tryCkVerify(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
const ck = {
|
||||
stoken: cookie.value.stoken,
|
||||
stuid: cookie.value.stuid,
|
||||
mid: cookie.value.mid,
|
||||
stoken: curAccount.value.cookie.stoken,
|
||||
stuid: curAccount.value.cookie.stuid,
|
||||
mid: curAccount.value.cookie.mid,
|
||||
};
|
||||
let flag = false;
|
||||
let challenge: string | undefined = undefined;
|
||||
@@ -211,10 +185,6 @@ async function tryCkVerify(): Promise<void> {
|
||||
}
|
||||
|
||||
async function tryExecAll(): Promise<void> {
|
||||
if (!cookie.value) {
|
||||
showSnackbar.warn("当前账号未登录,请先登录");
|
||||
return;
|
||||
}
|
||||
if (!curAccount.value) {
|
||||
showSnackbar.warn("当前账号未选择,请先选择账号");
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user