From 12de8be0cf01fbb9f664f4daee8c7335dfa82995 Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Sun, 31 May 2026 11:38:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=A1=E7=90=86=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BC=9A=E8=AF=9D=E5=AD=98=E5=82=A8=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E7=8A=B6=E6=80=81=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 仪表盘新增「会话存储后端」卡片,显示 Redis/内存 模式 - 降级时显示「已降级」标签 + 降级说明 - 内存模式下显示活跃会话数 - 新增 stat-red / stat-desc / stat-badge / badge-warn CSS 样式 --- internal/controller/admin/admin_controller.go | 10 ++++++++-- internal/controller/admin/interfaces.go | 4 +++- internal/service/admin_service.go | 5 +++++ templates/admin/html/dashboard/index.html | 17 +++++++++++++++++ templates/admin/static/css/common.css | 4 ++++ 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/internal/controller/admin/admin_controller.go b/internal/controller/admin/admin_controller.go index 2849f7f..f32ec00 100644 --- a/internal/controller/admin/admin_controller.go +++ b/internal/controller/admin/admin_controller.go @@ -29,9 +29,15 @@ func (ac *AdminController) Dashboard(c *gin.Context) { if err != nil { totalUsers = 0 } + storeMetrics := ac.adminService.GetStoreMetrics() c.HTML(http.StatusOK, "admin/dashboard/index.html", common.BuildAdminPageData(c, gin.H{ - "Title": "管理首页", - "TotalUsers": totalUsers, + "Title": "管理首页", + "TotalUsers": totalUsers, + "StoreType": storeMetrics.Type, + "StoreHealthy": storeMetrics.Healthy, + "StoreDegraded": storeMetrics.Degraded, + "DegradedNote": storeMetrics.DegradedNote, + "ActiveSessions": storeMetrics.ActiveCount, })) } diff --git a/internal/controller/admin/interfaces.go b/internal/controller/admin/interfaces.go index 68ad123..cd12271 100644 --- a/internal/controller/admin/interfaces.go +++ b/internal/controller/admin/interfaces.go @@ -3,14 +3,16 @@ package admin import ( "metazone.cc/metalab/internal/model" "metazone.cc/metalab/internal/service" + "metazone.cc/metalab/internal/session" ) -// adminUseCase AdminController 对 AdminService 的最小依赖(ISP:4 个方法) +// adminUseCase AdminController 对 AdminService 的最小依赖(ISP:5 个方法) type adminUseCase interface { ListUsers(params service.ListUsersParams) (*service.ListUsersResult, error) UpdateUserStatus(operatorUID, targetUID uint, newStatus string) error ResetUserToken(operatorUID, targetUID uint) error CountUsers() (int64, error) + GetStoreMetrics() session.StoreMetrics } // auditUseCase AuditController 对 AuditService 的最小依赖(ISP:3 个方法) diff --git a/internal/service/admin_service.go b/internal/service/admin_service.go index 2f8bfd6..aaa78ae 100644 --- a/internal/service/admin_service.go +++ b/internal/service/admin_service.go @@ -112,6 +112,11 @@ func (s *AdminService) CountUsers() (int64, error) { return s.userRepo.CountSearchUsers("", "", "") } +// GetStoreMetrics 返回会话存储状态信息(管理首页用) +func (s *AdminService) GetStoreMetrics() session.StoreMetrics { + return s.sessionManager.GetStoreMetrics() +} + // checkAndOperate 通用权限检查 + 执行操作 func (s *AdminService) checkAndOperate(operatorUID, targetUID uint, operate func(*model.User, *model.User) error) error { // 1. 不可操作自己 diff --git a/templates/admin/html/dashboard/index.html b/templates/admin/html/dashboard/index.html index a0948be..15c91d1 100644 --- a/templates/admin/html/dashboard/index.html +++ b/templates/admin/html/dashboard/index.html @@ -19,6 +19,23 @@ +
+
+
+ +
+
+
会话存储后端
+
+ {{if eq .StoreType "redis"}}Redis{{else}}内存{{end}} + {{if .StoreDegraded}}已降级{{end}} +
+ {{if .DegradedNote}}
{{.DegradedNote}}
{{end}} + {{if ge .ActiveSessions 0}}
活跃会话数:{{.ActiveSessions}}
{{end}} +
+
+
+

快速开始