feat: 增加管理员 AI 模型配置 (#200)
This commit is contained in:
@@ -16,6 +16,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"cmautobuy/admin/service"
|
||||
)
|
||||
|
||||
// Handler 持有各页面共用的依赖。
|
||||
@@ -25,14 +27,16 @@ type Handler struct {
|
||||
// 取「轮询周期 + 最长任务时长」,宽松一点,
|
||||
// 免得客户端执行长任务期间被误判成离线。
|
||||
onlineThreshold time.Duration
|
||||
aiSecrets service.AISecretStore
|
||||
aiPolicy service.AIEndpointPolicy
|
||||
}
|
||||
|
||||
// Register 把五个模块的页面路由挂上去。
|
||||
//
|
||||
// 五个模块的页面结构完全一致(顶部工具条 / 中间带勾选的表格 / 底部状态条),
|
||||
// 这是有意的,见 docs/admin/05-ui-specification.md §2。
|
||||
func Register(r *gin.Engine, db *sql.DB, onlineThreshold time.Duration) {
|
||||
h := &Handler{db: db, onlineThreshold: onlineThreshold}
|
||||
func Register(r *gin.Engine, db *sql.DB, onlineThreshold time.Duration, aiSecrets service.AISecretStore, aiPolicy service.AIEndpointPolicy) {
|
||||
h := &Handler{db: db, onlineThreshold: onlineThreshold, aiSecrets: aiSecrets, aiPolicy: aiPolicy}
|
||||
|
||||
// CSRF 只挂在页面路由上。初始化和登录是公开页面,但 POST 仍要 CSRF。
|
||||
// 给 Client 的 /api/v1/client/* 绝不能加——它不是浏览器、没有 Cookie。
|
||||
@@ -120,6 +124,16 @@ func Register(r *gin.Engine, db *sql.DB, onlineThreshold time.Duration) {
|
||||
integrations := pages.Group("/integrations", AdminRequired())
|
||||
integrations.GET("/catalog", h.CatalogHistory)
|
||||
integrations.GET("/catalog/detail", h.CatalogHistoryDetail)
|
||||
|
||||
// 8. AI 模型配置:密钥和系统级服务商配置仅管理员可见。
|
||||
aiSettings := pages.Group("/settings/ai", AdminRequired())
|
||||
aiSettings.GET("", h.AIConfigList)
|
||||
aiSettings.POST("/save", h.AIConfigSave)
|
||||
aiSettings.POST("/secret", h.AIConfigSecretSave)
|
||||
aiSettings.POST("/secret/clear", h.AIConfigSecretClear)
|
||||
aiSettings.POST("/test", h.AIConfigTest)
|
||||
aiSettings.POST("/enable", h.AIConfigEnable)
|
||||
aiSettings.POST("/disable", h.AIConfigDisable)
|
||||
}
|
||||
|
||||
// page 组装每个页面都要的公共数据(导航高亮、标题、CSRF token)。
|
||||
|
||||
Reference in New Issue
Block a user