This commit is contained in:
XOF
2025-11-20 12:24:05 +08:00
commit f28bdc751f
164 changed files with 64248 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
// Filename: internal/webhandlers/page_handler.go (测试前版本)
package webhandlers
import (
"encoding/json"
"gemini-balancer/internal/service"
"net/http"
"github.com/gin-gonic/gin"
)
// PageHandler
type PageHandler struct {
queryService *service.DashboardQueryService
}
// 构造函数注入新依赖
func NewPageHandler(queryService *service.DashboardQueryService) *PageHandler {
return &PageHandler{queryService: queryService}
}
// ShowDashboardPage 渲染现代化的监控面板页面
func (h *PageHandler) ShowDashboardPage(c *gin.Context) {
// [核心改造] 调用高速缓存读取方法,为模板准备数据
overviewData, err := h.queryService.GetDashboardOverviewData()
if err != nil {
// 在SSR模式下如果缓存未就绪我们可以传递一个空对象或默认值
// 这样页面至少可以渲染出骨架,而不是直接报错
c.HTML(http.StatusOK, "dashboard.html", gin.H{
"PageID": "dashboard",
"pageTitle": "监控面板",
"overview": nil, // 或者一个默认的空结构体实例
"error": "Dashboard data is currently being generated. Please refresh in a moment.",
"ssr_error": err.Error(),
})
return
}
c.HTML(http.StatusOK, "dashboard.html", gin.H{
"PageID": "dashboard",
"pageTitle": "监控面板",
"overview": overviewData,
"ssr_error": nil,
})
}
// ShowConfigEditorPage 渲染配置编辑页面。
func (h *PageHandler) ShowConfigEditorPage(c *gin.Context) {
c.HTML(http.StatusOK, "settings.html", gin.H{
"PageID": "settings",
"pageTitle": "配置编辑",
"currentPage": "settings",
})
}
// ShowErrorLogsPage 渲染错误日志页面。
func (h *PageHandler) ShowErrorLogsPage(c *gin.Context) {
c.HTML(http.StatusOK, "logs.html", gin.H{
"PageID": "logs",
"pageTitle": "错误日志",
})
}
// ShowKeysPage 渲染密钥管理页面。
func (h *PageHandler) ShowKeysPage(c *gin.Context) {
c.HTML(http.StatusOK, "keys.html", gin.H{
"PageID": "keys",
"pageTitle": "密钥管理",
})
}
// ShowTasksPage renders the M:N testing page.
func (h *PageHandler) ShowTasksPage(c *gin.Context) {
c.HTML(http.StatusOK, "tasks.html", gin.H{
"PageID": "tasks",
"pageTitle": "计划任务",
})
}
// ShowTasksPage renders the M:N testing page.
func (h *PageHandler) ShowChatPage(c *gin.Context) {
c.HTML(http.StatusOK, "chat.html", gin.H{
"PageID": "chat",
"pageTitle": "Webchat",
})
}
// 它只负责从 DashboardQueryService 获取数据并将其作为JSON字符串渲染出来。
func (h *PageHandler) ShowDashboardDebugPage(c *gin.Context) {
// 1. 调用与正式Dashboard完全相同的数据获取方法
overviewData, err := h.queryService.GetDashboardOverviewData()
if err != nil {
// 如果出错,直接将错误信息打印出来
c.HTML(http.StatusInternalServerError, "dashboard_debug.html", gin.H{
"PageID": "dashboard_debug",
"pageTitle": "Dashboard 诊断 - 错误",
"overview_json": "获取数据时发生错误: " + err.Error(),
})
return
}
// 2. 将获取到的Go数据结构格式化美化成JSON字符串
// 使用 MarshalIndent 是为了让输出的JSON带缩进便于阅读
jsonData, err := json.MarshalIndent(overviewData, "", " ")
if err != nil {
// 如果JSON序列化出错也直接打印错误
c.HTML(http.StatusInternalServerError, "dashboard_debug.html", gin.H{
"PageID": "dashboard_debug",
"pageTitle": "Dashboard 诊断 - 错误",
"overview_json": "序列化JSON时发生错误: " + err.Error(),
})
return
}
// 3. 将这个JSON字符串直接传递给一个极简的HTML模板
c.HTML(http.StatusOK, "dashboard_debug.html", gin.H{
"PageID": "dashboard-debug",
"pageTitle": "Dashboard 诊断 - 成功",
"overview_json": string(jsonData), // 将 []byte 转换为 string
})
}