diff --git a/src/routes/admin.js b/src/routes/admin.js index 718bc198..162610a2 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -688,10 +688,12 @@ router.post('/api-keys/batch', authenticateAdmin, async (req, res) => { claudeConsoleAccountId, geminiAccountId, openaiAccountId, + bedrockAccountId, permissions, concurrencyLimit, rateLimitWindow, rateLimitRequests, + rateLimitCost, enableModelRestriction, restrictedModels, enableClientRestriction, @@ -735,10 +737,12 @@ router.post('/api-keys/batch', authenticateAdmin, async (req, res) => { claudeConsoleAccountId, geminiAccountId, openaiAccountId, + bedrockAccountId, permissions, concurrencyLimit, rateLimitWindow, rateLimitRequests, + rateLimitCost, enableModelRestriction, restrictedModels, enableClientRestriction, diff --git a/src/services/claudeAccountService.js b/src/services/claudeAccountService.js index 94454200..f61eb8b7 100644 --- a/src/services/claudeAccountService.js +++ b/src/services/claudeAccountService.js @@ -1200,9 +1200,13 @@ class ClaudeAccountService { accountData.schedulable = 'true' delete accountData.rateLimitAutoStopped logger.info(`✅ Auto-resuming scheduling for account ${accountId} after rate limit cleared`) - logger.info(`📊 Account ${accountId} state after recovery: schedulable=${accountData.schedulable}`) + logger.info( + `📊 Account ${accountId} state after recovery: schedulable=${accountData.schedulable}` + ) } else { - logger.info(`ℹ️ Account ${accountId} did not need auto-resume: autoStopped=${accountData.rateLimitAutoStopped}, schedulable=${accountData.schedulable}`) + logger.info( + `ℹ️ Account ${accountId} did not need auto-resume: autoStopped=${accountData.rateLimitAutoStopped}, schedulable=${accountData.schedulable}` + ) } await redis.setClaudeAccount(accountId, accountData) diff --git a/web/admin-spa/src/views/AccountsView.vue b/web/admin-spa/src/views/AccountsView.vue index 779d140d..79ca5a3c 100644 --- a/web/admin-spa/src/views/AccountsView.vue +++ b/web/admin-spa/src/views/AccountsView.vue @@ -585,7 +585,10 @@
@@ -872,7 +875,7 @@
@@ -2009,13 +2012,26 @@ const formatRelativeTime = (dateString) => { } // 获取会话窗口进度条的样式类 -const getSessionProgressBarClass = (status) => { +const getSessionProgressBarClass = (status, account = null) => { // 根据状态返回不同的颜色类,包含防御性检查 if (!status) { // 无状态信息时默认为蓝色 return 'bg-gradient-to-r from-blue-500 to-indigo-600' } + // 检查账号是否处于限流状态 + const isRateLimited = + account && + (account.isRateLimited || + account.status === 'rate_limited' || + (account.rateLimitStatus && account.rateLimitStatus.isRateLimited) || + account.rateLimitStatus === 'limited') + + // 如果账号处于限流状态,显示红色 + if (isRateLimited) { + return 'bg-gradient-to-r from-red-500 to-red-600' + } + // 转换为小写进行比较,避免大小写问题 const normalizedStatus = String(status).toLowerCase()