From 9c2fa25380f2c120ad6c2fb724cd8a133ab08caa Mon Sep 17 00:00:00 2001 From: HouYunFei <1844025705@qq.com> Date: Fri, 22 May 2026 08:11:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=9B=B4=E6=96=B0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=85=8D=E7=BD=AE=E9=BB=98=E8=AE=A4=E5=80=BC=E5=92=8C?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 allowCustomChannel 默认值从 false 改为 true - 修改 allowCustomChannel 字段类型为指针类型以支持默认值设置 - 更新相关文档中对 allowCustomChannel 功能的描述 - 修复画布页面中对话框节点打开逻辑,避免文本节点意外触发编辑对话框 - 将用户配置中的渠道模式默认值从 remote 改为 local --- docs/backend-database.md | 2 +- docs/system-settings.md | 6 +++--- model/setting.go | 2 +- service/settings.go | 4 ++++ web/src/app/(admin)/admin/settings/page.tsx | 2 +- web/src/app/(user)/canvas/[id]/canvas-client-page.tsx | 5 ++--- web/src/stores/use-config-store.ts | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/backend-database.md b/docs/backend-database.md index 597777b..0bcc21f 100644 --- a/docs/backend-database.md +++ b/docs/backend-database.md @@ -122,7 +122,7 @@ | `defaultImageModel` | string | 默认图片模型 | | `defaultTextModel` | string | 默认文本模型 | | `systemPrompt` | string | 系统提示词 | -| `allowCustomChannel` | bool | 是否允许用户自定义渠道,允许时前端可提供走后端渠道和自定义 baseUrl 直连两种模式 | +| `allowCustomChannel` | bool | 是否允许用户自定义渠道,默认允许,关闭后前端只提供走后端渠道的模式 | `private.value` 当前字段: diff --git a/docs/system-settings.md b/docs/system-settings.md index 5d29f83..4cf49a2 100644 --- a/docs/system-settings.md +++ b/docs/system-settings.md @@ -17,7 +17,7 @@ "defaultImageModel": "gpt-image-2", "defaultTextModel": "gpt-5.5", "systemPrompt": "", - "allowCustomChannel": false + "allowCustomChannel": true } } ``` @@ -35,14 +35,14 @@ | `defaultImageModel` | string | 默认图片模型,从 `availableModels` 中选择 | | `defaultTextModel` | string | 默认文本模型,从 `availableModels` 中选择 | | `systemPrompt` | string | 系统提示词 | -| `allowCustomChannel` | boolean | 是否允许用户在配置弹窗中切换为本地直连渠道 | +| `allowCustomChannel` | boolean | 是否允许用户在配置弹窗中切换为本地直连渠道,默认允许 | 用户侧请求模式: | 模式 | 说明 | | --- | --- | | 云端渠道 | 使用后端 `/api/v1/*` 代理接口,请求会按模型名匹配 `private.value.channels` 中的可用渠道 | -| 本地直连 | 仅 `allowCustomChannel` 为 `true` 时可选,用户在浏览器本地配置 `baseUrl`、`apiKey` 和模型列表后直接请求模型接口 | +| 本地直连 | 默认可选;`allowCustomChannel` 关闭后不可选,用户在浏览器本地配置 `baseUrl`、`apiKey` 和模型列表后直接请求模型接口 | ## private.value diff --git a/model/setting.go b/model/setting.go index 636840e..d0ef79b 100644 --- a/model/setting.go +++ b/model/setting.go @@ -28,7 +28,7 @@ type PublicModelChannelSetting struct { DefaultImageModel string `json:"defaultImageModel"` DefaultTextModel string `json:"defaultTextModel"` SystemPrompt string `json:"systemPrompt"` - AllowCustomChannel bool `json:"allowCustomChannel"` + AllowCustomChannel *bool `json:"allowCustomChannel"` } // PublicSetting 公开配置。 diff --git a/service/settings.go b/service/settings.go index f8aa7bf..d9b68be 100644 --- a/service/settings.go +++ b/service/settings.go @@ -33,6 +33,10 @@ func normalizePublicSetting(setting model.PublicSetting) model.PublicSetting { if setting.ModelChannel.AvailableModels == nil { setting.ModelChannel.AvailableModels = []string{} } + if setting.ModelChannel.AllowCustomChannel == nil { + enabled := true + setting.ModelChannel.AllowCustomChannel = &enabled + } return setting } diff --git a/web/src/app/(admin)/admin/settings/page.tsx b/web/src/app/(admin)/admin/settings/page.tsx index fce4811..b06d2d4 100644 --- a/web/src/app/(admin)/admin/settings/page.tsx +++ b/web/src/app/(admin)/admin/settings/page.tsx @@ -32,7 +32,7 @@ const emptySettings: AdminSettings = { defaultImageModel: "", defaultTextModel: "", systemPrompt: "", - allowCustomChannel: false, + allowCustomChannel: true, }, }, private: { channels: [] }, diff --git a/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx b/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx index c17488e..10770c2 100644 --- a/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx +++ b/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx @@ -488,7 +488,7 @@ function InfiniteCanvasPage() { setConnections((prev) => [...prev, { id: nanoid(), ...connection }]); setSelectedNodeIds(new Set([newNode.id])); setSelectedConnectionId(null); - setDialogNodeId(newNode.id); + if (type !== CanvasNodeType.Text) setDialogNodeId(newNode.id); setPendingConnectionCreate(null); setConnecting(null); }, [effectiveConfig.imageModel, effectiveConfig.model, effectiveConfig.size, message, setConnecting]); @@ -598,7 +598,7 @@ function InfiniteCanvasPage() { setNodes((prev) => [...prev, newNode]); setSelectedNodeIds(new Set([newNode.id])); setSelectedConnectionId(null); - setDialogNodeId(newNode.id); + if (type !== CanvasNodeType.Text) setDialogNodeId(newNode.id); }, [effectiveConfig.imageModel, effectiveConfig.model, effectiveConfig.size, getCanvasCenter], ); @@ -1782,7 +1782,6 @@ function InfiniteCanvasPage() { setNodes((prev) => [...prev, node]); setSelectedNodeIds(new Set([node.id])); setSelectedConnectionId(null); - setDialogNodeId(node.id); }, [screenToCanvas, size.height, size.width]); const handleAssetInsert = useCallback((payload: InsertAssetPayload) => { diff --git a/web/src/stores/use-config-store.ts b/web/src/stores/use-config-store.ts index 6869961..56b7a61 100644 --- a/web/src/stores/use-config-store.ts +++ b/web/src/stores/use-config-store.ts @@ -24,7 +24,7 @@ export type AiConfig = { export const CONFIG_STORE_KEY = "infinite-canvas:ai_config_store"; export const defaultConfig: AiConfig = { - channelMode: "remote", + channelMode: "local", baseUrl: "https://api.openai.com", apiKey: "", model: "gpt-image-2",