From 100b3f6e21906e488f99fcffe6d0686db5f092f5 Mon Sep 17 00:00:00 2001 From: farion1231 Date: Thu, 7 Aug 2025 23:05:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=A4=A7=E5=8A=9F=E8=83=BD=E6=94=B9?= =?UTF-8?q?=E8=BF=9B=EF=BC=9A=E6=B7=BB=E5=8A=A0=E7=A6=81=E6=AD=A2=20Claude?= =?UTF-8?q?=20Code=20=E7=AD=BE=E5=90=8D=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增功能: - 在添加供应商和编辑供应商窗口都增加"禁止 Claude Code 签名"选择框 - 自动同步 JSON 配置中的 includeCoAuthoredBy 字段 - 支持双向同步:手动编辑 JSON 时选择框状态自动更新 代码优化: - 提取通用函数到 providerConfigUtils.ts 工具文件 - 重构代码避免重复,提高可维护性 - 保持原有自动提取官网地址功能 UI改进: - 优化选择框与标签的对齐样式 - 统一两个窗口的交互体验 --- src/renderer/components/AddProviderModal.css | 30 +++++++++++ src/renderer/components/AddProviderModal.tsx | 54 ++++++++++++------- src/renderer/components/EditProviderModal.tsx | 52 ++++++++++++++++-- src/renderer/utils/providerConfigUtils.ts | 47 ++++++++++++++++ 4 files changed, 162 insertions(+), 21 deletions(-) create mode 100644 src/renderer/utils/providerConfigUtils.ts diff --git a/src/renderer/components/AddProviderModal.css b/src/renderer/components/AddProviderModal.css index 5ffbedb..6e3ff37 100644 --- a/src/renderer/components/AddProviderModal.css +++ b/src/renderer/components/AddProviderModal.css @@ -149,4 +149,34 @@ color: #7f8c8d; font-size: 0.8rem; line-height: 1.3; +} + +/* 添加标签和选择框的样式 */ +.label-with-checkbox { + display: flex; + justify-content: space-between; + align-items: baseline; + margin-bottom: 0.5rem; +} + +.label-with-checkbox label:first-child { + margin-bottom: 0; +} + +.checkbox-label { + display: flex; + align-items: center; + gap: 0.3rem; + font-size: 0.85rem; + color: #666; + font-weight: normal; + margin-bottom: 0; + cursor: pointer; +} + +.checkbox-label input[type="checkbox"] { + width: auto; + margin: 2px; + cursor: pointer; + transform: translateY(2px); } \ No newline at end of file diff --git a/src/renderer/components/AddProviderModal.tsx b/src/renderer/components/AddProviderModal.tsx index 08a86bd..5c6a478 100644 --- a/src/renderer/components/AddProviderModal.tsx +++ b/src/renderer/components/AddProviderModal.tsx @@ -1,5 +1,6 @@ import React, { useState } from "react"; import { Provider } from "../../shared/types"; +import { updateCoAuthoredSetting, checkCoAuthoredSetting, extractWebsiteUrl } from "../utils/providerConfigUtils"; import "./AddProviderModal.css"; interface AddProviderModalProps { @@ -17,6 +18,7 @@ const AddProviderModal: React.FC = ({ settingsConfig: "" }); const [error, setError] = useState(""); + const [disableCoAuthored, setDisableCoAuthored] = useState(false); // 预设的供应商配置模板 const presets = [ @@ -82,22 +84,6 @@ const AddProviderModal: React.FC = ({ }); }; - // 从JSON配置中提取并处理官网地址 - const extractWebsiteUrl = (jsonString: string): string => { - try { - const config = JSON.parse(jsonString); - const baseUrl = config?.env?.ANTHROPIC_BASE_URL; - - if (baseUrl && typeof baseUrl === 'string') { - // 去掉 "api." 前缀 - return baseUrl.replace(/^https?:\/\/api\./, 'https://'); - } - } catch (err) { - // 忽略JSON解析错误 - } - return ''; - }; - const handleChange = ( e: React.ChangeEvent ) => { @@ -107,6 +93,10 @@ const AddProviderModal: React.FC = ({ // 当用户修改配置时,尝试自动提取官网地址 const extractedWebsiteUrl = extractWebsiteUrl(value); + // 同时检查并同步选择框状态 + const hasCoAuthoredDisabled = checkCoAuthoredSetting(value); + setDisableCoAuthored(hasCoAuthoredDisabled); + setFormData({ ...formData, [name]: value, @@ -121,12 +111,30 @@ const AddProviderModal: React.FC = ({ } }; + // 处理选择框变化 + const handleCoAuthoredToggle = (checked: boolean) => { + setDisableCoAuthored(checked); + + // 更新JSON配置 + const updatedConfig = updateCoAuthoredSetting(formData.settingsConfig, checked); + setFormData({ + ...formData, + settingsConfig: updatedConfig, + }); + }; + const applyPreset = (preset: typeof presets[0]) => { + const configString = JSON.stringify(preset.settingsConfig, null, 2); + setFormData({ name: preset.name, websiteUrl: preset.websiteUrl, - settingsConfig: JSON.stringify(preset.settingsConfig, null, 2) + settingsConfig: configString }); + + // 同步选择框状态 + const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString); + setDisableCoAuthored(hasCoAuthoredDisabled); }; return ( @@ -179,7 +187,17 @@ const AddProviderModal: React.FC = ({
- +
+ + +