From 746c9f31088011b2b4da7299a85af867c5e7a208 Mon Sep 17 00:00:00 2001 From: tbphp Date: Thu, 24 Jul 2025 16:34:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/handler/group_handler.go | 8 ++++++++ internal/types/types.go | 2 +- web/src/components/keys/GroupFormModal.vue | 24 ++++++++++++++++++++++ web/src/types/models.ts | 1 + web/src/views/Settings.vue | 8 ++++++-- 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/internal/handler/group_handler.go b/internal/handler/group_handler.go index 2caa5c2..41992aa 100644 --- a/internal/handler/group_handler.go +++ b/internal/handler/group_handler.go @@ -211,6 +211,7 @@ func (s *Server) CreateGroup(c *gin.Context) { ValidationEndpoint: validationEndpoint, ParamOverrides: req.ParamOverrides, Config: cleanedConfig, + ProxyKeys: strings.TrimSpace(req.ProxyKeys), } if err := s.DB.Create(&group).Error; err != nil { @@ -253,6 +254,7 @@ type GroupUpdateRequest struct { ValidationEndpoint *string `json:"validation_endpoint,omitempty"` ParamOverrides map[string]any `json:"param_overrides"` Config map[string]any `json:"config"` + ProxyKeys *string `json:"proxy_keys,omitempty"` } // UpdateGroup handles updating an existing group. @@ -351,6 +353,10 @@ func (s *Server) UpdateGroup(c *gin.Context) { group.Config = cleanedConfig } + if req.ProxyKeys != nil { + group.ProxyKeys = strings.TrimSpace(*req.ProxyKeys) + } + // Save the updated group object if err := tx.Save(&group).Error; err != nil { response.Error(c, app_errors.ParseDBError(err)) @@ -382,6 +388,7 @@ type GroupResponse struct { ValidationEndpoint string `json:"validation_endpoint"` ParamOverrides datatypes.JSONMap `json:"param_overrides"` Config datatypes.JSONMap `json:"config"` + ProxyKeys string `json:"proxy_keys"` LastValidatedAt *time.Time `json:"last_validated_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` @@ -412,6 +419,7 @@ func (s *Server) newGroupResponse(group *models.Group) *GroupResponse { ValidationEndpoint: group.ValidationEndpoint, ParamOverrides: group.ParamOverrides, Config: group.Config, + ProxyKeys: group.ProxyKeys, LastValidatedAt: group.LastValidatedAt, CreatedAt: group.CreatedAt, UpdatedAt: group.UpdatedAt, diff --git a/internal/types/types.go b/internal/types/types.go index b9bd904..abafa12 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -21,7 +21,7 @@ type SystemSettings struct { AppUrl string `json:"app_url" default:"http://localhost:3001" name:"项目地址" category:"基础参数" desc:"项目的基础 URL,用于拼接分组终端节点地址。系统配置优先于环境变量 APP_URL。"` RequestLogRetentionDays int `json:"request_log_retention_days" default:"7" name:"日志保留时长(天)" category:"基础参数" desc:"请求日志在数据库中的保留天数,0为不清理日志。" validate:"min=0"` RequestLogWriteIntervalMinutes int `json:"request_log_write_interval_minutes" default:"1" name:"日志延迟写入周期(分钟)" category:"基础参数" desc:"请求日志从缓存写入数据库的周期(分钟),0为实时写入数据。" validate:"min=0"` - ProxyKeys string `json:"proxy_keys" name:"全局代理密钥" category:"基础参数" desc:"全局代理密钥,用于访问所有代理端点。多个密钥请用逗号分隔。"` + ProxyKeys string `json:"proxy_keys" name:"全局代理密钥" category:"基础参数" desc:"全局代理密钥,用于访问所有分组的代理端点。多个密钥请用逗号分隔。"` // 请求设置 RequestTimeout int `json:"request_timeout" default:"600" name:"请求超时(秒)" category:"请求设置" desc:"转发请求的完整生命周期超时(秒)等。" validate:"min=1"` diff --git a/web/src/components/keys/GroupFormModal.vue b/web/src/components/keys/GroupFormModal.vue index 850a4a8..bd93092 100644 --- a/web/src/components/keys/GroupFormModal.vue +++ b/web/src/components/keys/GroupFormModal.vue @@ -59,6 +59,7 @@ interface GroupFormData { param_overrides: string; config: Record; configItems: ConfigItem[]; + proxy_keys: string; } // 表单数据 @@ -79,6 +80,7 @@ const formData = reactive({ param_overrides: "", config: {}, configItems: [] as ConfigItem[], + proxy_keys: "", }); const channelTypeOptions = ref<{ label: string; value: string }[]>([]); @@ -269,6 +271,7 @@ function resetForm() { param_overrides: "", config: {}, configItems: [], + proxy_keys: "", }); // 重置用户修改状态追踪 @@ -304,6 +307,7 @@ function loadGroupData() { param_overrides: JSON.stringify(props.group.param_overrides || {}, null, 2), config: {}, configItems, + proxy_keys: props.group.proxy_keys || "", }); } @@ -408,6 +412,7 @@ async function handleSubmit() { validation_endpoint: formData.validation_endpoint, param_overrides: paramOverrides, config, + proxy_keys: formData.proxy_keys, }; let res: Group; @@ -592,6 +597,25 @@ async function handleSubmit() {
+ + + + + +