diff --git a/web/frontend/src/pages/LoginTasksPage.tsx b/web/frontend/src/pages/LoginTasksPage.tsx index 97bdb19..7f9d48a 100644 --- a/web/frontend/src/pages/LoginTasksPage.tsx +++ b/web/frontend/src/pages/LoginTasksPage.tsx @@ -36,6 +36,7 @@ export default function LoginTasksPage() { const [selectedIds, setSelectedIds] = useState([]); const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(false); + const [starting, setStarting] = useState(false); const [batchId, setBatchId] = useState(null); const [selectedTags, setSelectedTags] = useState([]); const [concurrency, setConcurrency] = useState(() => { @@ -136,6 +137,7 @@ export default function LoginTasksPage() { message.warning('请选择账号'); return; } + setStarting(true); setLoading(true); try { const result = await loginApi.createBatch({ @@ -146,11 +148,12 @@ export default function LoginTasksPage() { message.success(`已创建登录任务,共 ${result.count} 个账号`); connectLogs(`/api/login/ws/login/${result.batch_id}`, { - onClose: () => setBatchId(null), - onResult: () => setBatchId(null), + onClose: () => { setBatchId(null); setStarting(false); }, + onResult: () => { setBatchId(null); setStarting(false); }, }); } catch (e: unknown) { message.error(getErrorMessage(e)); + setStarting(false); } finally { setLoading(false); } @@ -343,7 +346,7 @@ export default function LoginTasksPage() { icon={} loading={loading} onClick={handleBatchLogin} - disabled={selectedIds.length === 0 || wsConnected} + disabled={selectedIds.length === 0 || starting} size="small" > 开始登录 @@ -380,6 +383,7 @@ export default function LoginTasksPage() { icon={} onClick={handleRetryFailed} loading={loading} + disabled={starting} > 重试失败 ({failedCount})