From c56a64fabdd0bb29416a47029a8fb3ac798b1f82 Mon Sep 17 00:00:00 2001 From: iMouseWu Date: Sat, 11 Jul 2026 18:31:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(account):=20=E8=B4=A6=E5=8F=B7=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=BC=B9=E7=AA=97=E6=94=AF=E6=8C=81=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E8=A6=86=E7=9B=96=20OpenAI=20=E8=AE=A2=E9=98=85=E6=A1=A3?= =?UTF-8?q?=E4=BD=8D=20plan=5Ftype(=E4=BB=85=20OAuth)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此前 plan_type(ChatGPT Plus/Pro/Free)只由系统自动写入(OAuth 换码/刷新、 429 同步、导入),UI 无编辑入口。现于 EditAccountModal 为 OpenAI OAuth 非影子 账号新增一个订阅档位下拉,可手动纠正(走既有 PUT /admin/accounts/:id 合并, plan_type 非敏感字段无需改后端)。 - 仅 OAuth 非影子账号显示/提交:setup-token 无订阅调度语义 (IsOpenAIChatGPTSubscription 要求 oauth),影子账号凭据由母账号管理 - 下拉:清空 + Plus/Pro/Free;别名(chatgptpro→Pro)与自定义值(team 等) 友好显示并保留 canonical 值,避免编辑丢失或写脏 - readPlanType 仅接受字符串,挡住脏数据;清空则删除该键(恢复自动识别) - 抽 buildPlanTypeOptions/applyPlanType/readPlanType/planTypeDisplayLabel 为 纯函数入 credentialsBuilder.ts,并补 12 个单测(别名去重、保留其余凭据键、 set/delete 语义) - 文案(zh/en)注明:令牌临期刷新或 429 会用真实档位自动覆盖手改值 经三方评审会(Claude + Codex + 作者)一轮交叉评审达成共识后落地。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/account/EditAccountModal.vue | 40 +++++++++ .../__tests__/credentialsBuilder.spec.ts | 89 +++++++++++++++++++ .../components/account/credentialsBuilder.ts | 84 +++++++++++++++++ .../src/i18n/locales/en/admin/accounts.ts | 4 + .../src/i18n/locales/zh/admin/accounts.ts | 3 + 5 files changed, 220 insertions(+) diff --git a/frontend/src/components/account/EditAccountModal.vue b/frontend/src/components/account/EditAccountModal.vue index 9b5ab82fc5..9984d2bc48 100644 --- a/frontend/src/components/account/EditAccountModal.vue +++ b/frontend/src/components/account/EditAccountModal.vue @@ -1838,6 +1838,24 @@ + +
+
+
+ +

+ {{ t('admin.accounts.openai.planTypeDesc') }} +

+
+
+