🚸 确保同一时间只能执行一个脚本

close #144
This commit is contained in:
目棃
2025-02-26 09:05:39 +08:00
parent 1b1abb9b88
commit beb457a884
2 changed files with 29 additions and 7 deletions

View File

@@ -3,8 +3,8 @@
<div class="tusm-top"> <div class="tusm-top">
<div class="tusm-title">米游币任务({{ todayPoints }}/{{ totalPoints }})</div> <div class="tusm-title">米游币任务({{ todayPoints }}/{{ totalPoints }})</div>
<div class="tusm-acts"> <div class="tusm-acts">
<v-btn @click="tryRefresh()" class="tusm-btn">刷新</v-btn> <v-btn @click="tryRefresh()" class="tusm-btn" :loading="loadState">刷新</v-btn>
<v-btn @click="tryAuto()" class="tusm-btn">执行</v-btn> <v-btn @click="tryAuto()" class="tusm-btn" :loading="loadMission">执行</v-btn>
</div> </div>
</div> </div>
<div class="tusm-content"> <div class="tusm-content">
@@ -55,6 +55,9 @@ const parseMissions = shallowRef<Array<ParseMission>>([]);
const missionList = shallowRef<Array<TGApp.BBS.Mission.MissionItem>>([]); const missionList = shallowRef<Array<TGApp.BBS.Mission.MissionItem>>([]);
const todayPoints = ref<number>(0); const todayPoints = ref<number>(0);
const totalPoints = ref<number>(0); const totalPoints = ref<number>(0);
const loadScript = defineModel<boolean>();
const loadState = ref<boolean>(false);
const loadMission = ref<boolean>(false);
function mergeMission( function mergeMission(
list: Array<TGApp.BBS.Mission.MissionItem>, list: Array<TGApp.BBS.Mission.MissionItem>,
@@ -90,6 +93,12 @@ function mergeMission(
} }
async function tryRefresh(): Promise<void> { async function tryRefresh(): Promise<void> {
if (loadScript.value) {
showSnackbar.warn("任务正在执行中,请稍后再试");
return;
}
loadScript.value = true;
loadState.value = true;
await TGLogger.ScriptSep("米游币任务"); await TGLogger.ScriptSep("米游币任务");
await TGLogger.Script("[米游币任务]刷新任务状态"); await TGLogger.Script("[米游币任务]刷新任务状态");
if (!cookie.value) { if (!cookie.value) {
@@ -105,9 +114,17 @@ async function tryRefresh(): Promise<void> {
}; };
await refreshState(ck); await refreshState(ck);
await TGLogger.ScriptSep("米游币任务", false); await TGLogger.ScriptSep("米游币任务", false);
loadScript.value = false;
loadState.value = false;
} }
async function tryAuto(): Promise<void> { async function tryAuto(): Promise<void> {
if (loadScript.value) {
showSnackbar.warn("任务正在执行中,请稍后再试");
return;
}
loadScript.value = true;
loadMission.value = true;
await TGLogger.ScriptSep("米游币任务"); await TGLogger.ScriptSep("米游币任务");
await TGLogger.Script("[米游币任务]开始执行任务"); await TGLogger.Script("[米游币任务]开始执行任务");
if (!cookie.value) { if (!cookie.value) {
@@ -133,6 +150,8 @@ async function tryAuto(): Promise<void> {
if (postFilter.every((i) => i.status)) { if (postFilter.every((i) => i.status)) {
await TGLogger.Script("[米游币任务]所有任务已完成"); await TGLogger.Script("[米游币任务]所有任务已完成");
await TGLogger.ScriptSep("米游币任务", false); await TGLogger.ScriptSep("米游币任务", false);
loadScript.value = false;
loadMission.value = false;
return; return;
} }
let isShare = false; let isShare = false;
@@ -202,6 +221,8 @@ async function tryAuto(): Promise<void> {
await TGLogger.Script("[米游币任务]任务执行完毕,即将刷新任务状态"); await TGLogger.Script("[米游币任务]任务执行完毕,即将刷新任务状态");
await refreshState(ck); await refreshState(ck);
await TGLogger.ScriptSep("米游币任务", false); await TGLogger.ScriptSep("米游币任务", false);
loadScript.value = false;
loadMission.value = false;
} }
async function refreshState(ck: Record<string, string>): Promise<void> { async function refreshState(ck: Record<string, string>): Promise<void> {

View File

@@ -47,16 +47,16 @@
</div> </div>
</template> </template>
<template #append> <template #append>
<span class="top-hint" @click="tryCkVerify()" title="点击验证" <span class="top-hint" @click="tryCkVerify()" title="点击验证">
>需要验证码登录所需cookie</span 需要验证码登录所需cookie
> </span>
</template> </template>
</v-app-bar> </v-app-bar>
<div class="us-page-container"> <div class="us-page-container">
<!-- 左侧脚本列表 --> <!-- 左侧脚本列表 -->
<div class="us-scripts"> <div class="us-scripts">
<div class="us-title">脚本列表</div> <div class="us-title">脚本列表</div>
<TusMission /> <TusMission v-model="runScript" />
</div> </div>
<!-- 右侧脚本输出 --> <!-- 右侧脚本输出 -->
<TusOutput /> <TusOutput />
@@ -70,7 +70,7 @@ import TusMission from "@comp/userScripts/tus-mission.vue";
import TusOutput from "@comp/userScripts/tus-output.vue"; import TusOutput from "@comp/userScripts/tus-output.vue";
import TSUserAccount from "@Sqlite/modules/userAccount.js"; import TSUserAccount from "@Sqlite/modules/userAccount.js";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { onMounted, shallowRef } from "vue"; import { onMounted, ref, shallowRef } from "vue";
import { useUserStore } from "@/store/modules/user.js"; import { useUserStore } from "@/store/modules/user.js";
import apiHubReq from "@/web/request/apiHubReq.js"; import apiHubReq from "@/web/request/apiHubReq.js";
@@ -78,6 +78,7 @@ import apiHubReq from "@/web/request/apiHubReq.js";
const { uid, briefInfo, cookie, account } = storeToRefs(useUserStore()); const { uid, briefInfo, cookie, account } = storeToRefs(useUserStore());
const accounts = shallowRef<Array<TGApp.App.Account.User>>([]); const accounts = shallowRef<Array<TGApp.App.Account.User>>([]);
const curAccount = shallowRef<TGApp.App.Account.User>(); const curAccount = shallowRef<TGApp.App.Account.User>();
const runScript = ref<boolean>(false);
onMounted(async () => { onMounted(async () => {
accounts.value = await TSUserAccount.account.getAllAccount(); accounts.value = await TSUserAccount.account.getAllAccount();