()
| 1020 | |
| 1021 | // 更新批量操作按钮 |
| 1022 | function updateBatchButtons() { |
| 1023 | const count = getEffectiveCount(); |
| 1024 | const baseDisabled = count === 0 || isQuickWorkflowRunning || isTaskPausing || isTaskResuming; |
| 1025 | elements.batchDeleteBtn.disabled = baseDisabled; |
| 1026 | elements.batchRefreshBtn.disabled = baseDisabled || isBatchRefreshing; |
| 1027 | elements.batchValidateBtn.disabled = baseDisabled || isBatchValidating; |
| 1028 | elements.batchUploadBtn.disabled = baseDisabled; |
| 1029 | elements.batchCheckSubBtn.disabled = baseDisabled || isBatchCheckingSubscription; |
| 1030 | elements.exportBtn.disabled = count === 0; |
| 1031 | if (elements.quickRefreshBtn) { |
| 1032 | elements.quickRefreshBtn.disabled = true; |
| 1033 | elements.quickRefreshBtn.textContent = '⚡ 一键刷新(已禁用)'; |
| 1034 | } |
| 1035 | |
| 1036 | elements.batchDeleteBtn.textContent = count > 0 ? `🗑️ 删除 (${count})` : '🗑️ 批量删除'; |
| 1037 | elements.batchRefreshBtn.textContent = count > 0 ? `🔄 刷新 (${count})` : '🔄 刷新Token'; |
| 1038 | elements.batchValidateBtn.textContent = count > 0 ? `✅ 验证 (${count})` : '✅ 验证Token'; |
| 1039 | elements.batchUploadBtn.textContent = count > 0 ? `☁️ 上传 (${count})` : '☁️ 上传'; |
| 1040 | elements.batchCheckSubBtn.textContent = count > 0 ? `🔍 检测 (${count})` : '🔍 检测订阅'; |
| 1041 | |
| 1042 | const pausableCount = getPausableBatchTasks().length; |
| 1043 | const resumableCount = getResumableBatchTasks().length; |
| 1044 | if (elements.batchPauseBtn) { |
| 1045 | elements.batchPauseBtn.disabled = pausableCount === 0 || isTaskPausing; |
| 1046 | elements.batchPauseBtn.textContent = isTaskPausing |
| 1047 | ? '⏸️ 暂停中...' |
| 1048 | : (pausableCount > 0 ? `⏸️ 暂停(${pausableCount})` : '⏸️ 暂停'); |
| 1049 | } |
| 1050 | if (elements.batchResumeBtn) { |
| 1051 | elements.batchResumeBtn.disabled = resumableCount === 0 || isTaskResuming; |
| 1052 | elements.batchResumeBtn.textContent = isTaskResuming |
| 1053 | ? '▶️ 继续中...' |
| 1054 | : (resumableCount > 0 ? `▶️ 继续(${resumableCount})` : '▶️ 继续'); |
| 1055 | } |
| 1056 | } |
| 1057 | |
| 1058 | // 刷新单个账号Token |
| 1059 | async function refreshToken(id) { |
no test coverage detected