From 830fc2c1cc4888bb6bf917fd5eeec41b30ffa847 Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Mon, 5 Oct 2026 22:36:25 +0800 Subject: [PATCH] fix(api): reflect disabled keys and platform counts Use the native disabled flag for individual keys, dim disabled rows, and mark partially disabled groups. Name the actual add action in the empty state, count easy-mode platforms by provider group, and use the Meta icon. --- src/i18n/easyMode.ts | 6 +-- src/i18n/ja.ts | 4 +- src/i18n/locales/en.ts | 4 +- src/i18n/locales/zh-CN.ts | 4 +- src/pages/ApiAccessPage.tsx | 47 ++++++++++++--------- src/pages/EasyModePage.tsx | 27 ++++++------- src/pages/UsageEventsView.css | 38 ++++++++--------- src/styles.css | 4 ++ src/styles/usage-subpages.css | 74 ++++++++++++++++++++++++++++++++-- src/styles/workspace-white.css | 9 +++-- tests/i18n.test.ts | 10 +++++ tests/providerConfig.test.ts | 22 ++++++++++ 12 files changed, 182 insertions(+), 67 deletions(-) diff --git a/src/i18n/easyMode.ts b/src/i18n/easyMode.ts index 9e0d5ee..d300047 100644 --- a/src/i18n/easyMode.ts +++ b/src/i18n/easyMode.ts @@ -30,7 +30,7 @@ export const easyModeZhCN = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition 账号授权登录", "easyMode.oauth.providerDesc.meta": "Muse / Meta 设备码授权登录", "easyMode.api.platformsConnected": "已接入 {count} 个平台", - "easyMode.api.supportedPlatforms": "支持 OpenAI、Anthropic、Codex、Gemini、DeepSeek", + "easyMode.api.supportedPlatforms": "支持 OpenAI、Anthropic、Codex、Gemini、DeepSeek、Vertex、xAI、Meta", "easyMode.api.platformName.openai": "OpenAI 格式", "easyMode.api.platformName.claude": "Anthropic 格式", "easyMode.api.platformName.codex": "Codex API", @@ -113,7 +113,7 @@ export const easyModeEn: Record = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition authorization sign-in", "easyMode.oauth.providerDesc.meta": "Muse / Meta device code sign-in", "easyMode.api.platformsConnected": "{count} platform(s) connected", - "easyMode.api.supportedPlatforms": "Supports OpenAI, Anthropic, Codex, Gemini, DeepSeek", + "easyMode.api.supportedPlatforms": "Supports OpenAI, Anthropic, Codex, Gemini, DeepSeek, Vertex, xAI, Meta", "easyMode.api.platformName.openai": "OpenAI Format", "easyMode.api.platformName.claude": "Anthropic Format", "easyMode.api.platformName.codex": "Codex API", @@ -196,7 +196,7 @@ export const easyModeJa: Record = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition アカウント認証ログイン", "easyMode.oauth.providerDesc.meta": "Muse / Meta デバイスコード認証ログイン", "easyMode.api.platformsConnected": "{count} 件のプラットフォームを接続済み", - "easyMode.api.supportedPlatforms": "OpenAI、Anthropic、Codex、Gemini、DeepSeek に対応", + "easyMode.api.supportedPlatforms": "OpenAI、Anthropic、Codex、Gemini、DeepSeek、Vertex、xAI、Meta に対応", "easyMode.api.platformName.openai": "OpenAI 形式", "easyMode.api.platformName.claude": "Anthropic 形式", "easyMode.api.platformName.codex": "Codex API", diff --git a/src/i18n/ja.ts b/src/i18n/ja.ts index 1b0ebf4..e728fd7 100644 --- a/src/i18n/ja.ts +++ b/src/i18n/ja.ts @@ -1536,7 +1536,7 @@ export const jaOverrides = { 'apiAccess.empty.filtered': '一致する接続がありません', 'apiAccess.empty.none': '接続設定がありません', 'apiAccess.empty.tryKeyword': '別のキーワードをお試しください', - 'apiAccess.empty.addFirst': '右上の「追加」から最初の接続を追加してください', + 'apiAccess.empty.addFirst': '右上の「{action}」から最初の接続を追加してください', 'apiAccess.keys.count': 'キー {count} 件', 'apiAccess.keys.summary': '{key} · 合計 {count} 件', 'apiAccess.remarkValue': 'メモ:{remark}', @@ -1628,7 +1628,7 @@ export const jaOverrides = { 'apiAccess.cloak.enableStrict': '厳格モードを有効化', 'apiAccess.cloak.cacheUser': 'ユーザー識別子をキャッシュ', 'apiAccess.cloak.cacheUserDescription': '偽装後のユーザー識別子を再利用します', - 'apiAccess.websocket.description': 'この Codex 接続で WebSocket を有効にします', + 'apiAccess.websocket.description': 'この Codex / xAI 接続で WebSocket を有効にします', 'apiAccess.websocket.enable': 'WebSocket を有効化', 'apiAccess.cooling.title': 'クールダウンを無効化', 'apiAccess.cooling.description': '上流でレート制限が発生しても、この接続を引き続き選択可能にします', diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 6e4a01c..81cb191 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -1537,7 +1537,7 @@ export const en: Record = { 'apiAccess.empty.filtered': 'No matching connections', 'apiAccess.empty.none': 'No API connections', 'apiAccess.empty.tryKeyword': 'Try a different keyword', - 'apiAccess.empty.addFirst': 'Click “Add” in the upper-right to create your first connection', + 'apiAccess.empty.addFirst': 'Click “{action}” in the upper-right to create your first connection', 'apiAccess.keys.count': '{count} keys', 'apiAccess.keys.summary': '{key} · {count} keys total', 'apiAccess.remarkValue': 'Remark: {remark}', @@ -1628,7 +1628,7 @@ export const en: Record = { 'apiAccess.cloak.enableStrict': 'Enable strict mode', 'apiAccess.cloak.cacheUser': 'Cache User ID', 'apiAccess.cloak.cacheUserDescription': 'Reuse the cloaked user identifier', - 'apiAccess.websocket.description': 'Enable WebSocket for this Codex connection', + 'apiAccess.websocket.description': 'Enable WebSocket for this Codex or xAI connection', 'apiAccess.websocket.enable': 'Enable WebSocket', 'apiAccess.cooling.title': 'Disable Cooldown', 'apiAccess.cooling.description': 'Allow this connection to remain selectable after upstream rate limiting', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 3c66e72..a011876 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -1536,7 +1536,7 @@ export const zhCN = { 'apiAccess.empty.filtered': '没有匹配的接入', 'apiAccess.empty.none': '暂无接入配置', 'apiAccess.empty.tryKeyword': '换个关键词试试', - 'apiAccess.empty.addFirst': '点击右上角“新增”添加第一个接入', + 'apiAccess.empty.addFirst': '点击右上角“{action}”添加第一个接入', 'apiAccess.keys.count': '{count} 个密钥', 'apiAccess.keys.summary': '{key} · 共 {count} 个密钥', 'apiAccess.remarkValue': '备注:{remark}', @@ -1627,7 +1627,7 @@ export const zhCN = { 'apiAccess.cloak.enableStrict': '启用严格模式', 'apiAccess.cloak.cacheUser': '缓存用户标识', 'apiAccess.cloak.cacheUserDescription': '复用伪装后的用户标识', - 'apiAccess.websocket.description': '为该 Codex 接入启用 WebSocket', + 'apiAccess.websocket.description': '为该 Codex / xAI 接入启用 WebSocket', 'apiAccess.websocket.enable': '启用 WebSocket', 'apiAccess.cooling.title': '禁用冷却', 'apiAccess.cooling.description': '上游限流后仍允许继续选择该接入', diff --git a/src/pages/ApiAccessPage.tsx b/src/pages/ApiAccessPage.tsx index 52c844f..647dc88 100644 --- a/src/pages/ApiAccessPage.tsx +++ b/src/pages/ApiAccessPage.tsx @@ -84,7 +84,7 @@ import { ProviderGroupTemplateFields, ProviderKeyTemplateFields, ProviderModelFi import { providerText } from '../i18n/providerTemplate'; import { cleanProviderGroup, effectiveProviderKey, providerGroupIdentity, providerGroupKeys, providerGroupStatus, - providerKeyDraft, serializeProviderKey, validateProviderGroupKeys, validateProviderTemplateRecord, type ProviderKeyDraft, + providerKeyDraft, providerKeyIsDisabled, serializeProviderKey, validateProviderGroupKeys, validateProviderTemplateRecord, type ProviderKeyDraft, } from '../services/providerGroups'; import { providerGroupsApi } from '../services/managementApi'; import { @@ -202,7 +202,7 @@ function SortableProviderRow({