♻️ 重构脚本页面加载&执行逻辑

This commit is contained in:
BTMuli
2026-02-22 18:36:15 +08:00
parent 6e40784682
commit 8664d46938
3 changed files with 69 additions and 99 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;