From d6b97d7c7049c8c3ecbf5280db2ee5db1546ef80 Mon Sep 17 00:00:00 2001 From: tianma Date: Sun, 28 Jun 2026 09:46:16 +0800 Subject: [PATCH] Localize token scope labels --- apps/web/src/components/SettingsPane.tsx | 52 ++++++++++++++++-------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/apps/web/src/components/SettingsPane.tsx b/apps/web/src/components/SettingsPane.tsx index 9841205c..11d49bed 100644 --- a/apps/web/src/components/SettingsPane.tsx +++ b/apps/web/src/components/SettingsPane.tsx @@ -10,7 +10,29 @@ import { cn, formatDateTime } from "@/lib/utils"; import { AppConfirmDialog } from "./dialogs/ConfirmDialogs"; import type { ApiToken, AuthUser } from "@edgeever/shared"; -const DEFAULT_TOKEN_SCOPES = ["read:notebooks", "read:memos", "read:tags"]; +const ALL_TOKEN_SCOPES = [ + "read:notebooks", + "write:notebooks", + "read:memos", + "write:memos", + "read:resources", + "write:resources", + "read:tags", + "write:tags", +]; + +const TOKEN_SCOPE_LABELS: Record = { + "read:notebooks": "读取笔记本", + "write:notebooks": "创建与修改笔记本", + "read:memos": "读取笔记", + "write:memos": "创建与修改笔记", + "read:resources": "读取附件资源", + "write:resources": "上传与修改附件", + "read:tags": "读取标签", + "write:tags": "创建与修改标签", +}; + +const getTokenScopeLabel = (scope: string) => TOKEN_SCOPE_LABELS[scope] ?? scope; interface SettingsPaneProps { user: AuthUser | null; @@ -33,7 +55,7 @@ export const SettingsPane = ({ }: SettingsPaneProps) => { const queryClient = useQueryClient(); const [name, setName] = useState("MCP Agent"); - const [selectedScopes, setSelectedScopes] = useState>(() => new Set(DEFAULT_TOKEN_SCOPES)); + const [selectedScopes, setSelectedScopes] = useState>(() => new Set(ALL_TOKEN_SCOPES)); const [createdToken, setCreatedToken] = useState<{ token: string; apiToken: ApiToken } | null>(null); const [tokenRevokeConfirmation, setTokenRevokeConfirmation] = useState(null); @@ -42,23 +64,14 @@ export const SettingsPane = ({ queryFn: () => api.listApiTokens(), }); - const availableScopes = tokensQuery.data?.availableScopes ?? [ - "read:notebooks", - "write:notebooks", - "read:memos", - "write:memos", - "read:resources", - "write:resources", - "read:tags", - "write:tags", - ]; + const availableScopes = tokensQuery.data?.availableScopes ?? ALL_TOKEN_SCOPES; const createMutation = useMutation({ mutationFn: api.createApiToken, onSuccess: async (data) => { setCreatedToken(data); setName(""); - setSelectedScopes(new Set(DEFAULT_TOKEN_SCOPES)); + setSelectedScopes(new Set(availableScopes)); await queryClient.invalidateQueries({ queryKey: ["api-tokens"] }); }, }); @@ -212,7 +225,7 @@ export const SettingsPane = ({
- 选择 Scope 权限范围: + 选择 Token 权限范围:
{availableScopes.map((scope) => ( ))}
@@ -255,8 +270,11 @@ export const SettingsPane = ({ > {token.name} - - {token.scopes.join(", ") || "no scopes"} + + {token.scopes.map(getTokenScopeLabel).join("、") || "无权限"} {token.lastUsedAt ? `上次调用时间:${formatDateTime(token.lastUsedAt)}` : "从未被调用"}