feat: add settings pages

This commit is contained in:
engigu
2025-12-20 12:00:08 +08:00
parent 70cc7c0f8c
commit c299ed67d6
23 changed files with 10462 additions and 130 deletions
@@ -1,6 +1,7 @@
package controllers
import (
"baihu/internal/constant"
"baihu/internal/database"
"baihu/internal/models"
"baihu/internal/services"
@@ -49,3 +50,10 @@ func (dc *DashboardController) GetStats(c *gin.Context) {
utils.Success(c, stats)
}
// GetSentence 获取随机古诗词
func (dc *DashboardController) GetSentence(c *gin.Context) {
utils.Success(c, gin.H{
"sentence": constant.GetRandomSentence(),
})
}
+55 -16
View File
@@ -7,18 +7,23 @@ import (
"baihu/internal/services"
"baihu/internal/utils"
"fmt"
"runtime"
"os"
"time"
"github.com/gin-gonic/gin"
"github.com/shirou/gopsutil/v3/process"
)
type SettingsController struct {
userService *services.UserService
userService *services.UserService
settingsService *services.SettingsService
}
func NewSettingsController(userService *services.UserService) *SettingsController {
return &SettingsController{userService: userService}
return &SettingsController{
userService: userService,
settingsService: services.NewSettingsService(),
}
}
// ChangePassword 修改密码
@@ -74,19 +79,50 @@ func (sc *SettingsController) CleanLogs(c *gin.Context) {
// GetSiteSettings 获取站点设置
func (sc *SettingsController) GetSiteSettings(c *gin.Context) {
config := services.Config
if config == nil {
utils.Success(c, gin.H{
"site_name": "白虎面板",
"port": 8080,
})
settings := sc.settingsService.GetSection("site")
utils.Success(c, settings)
}
// GetPublicSiteSettings 获取公开的站点设置(无需认证)
func (sc *SettingsController) GetPublicSiteSettings(c *gin.Context) {
settings := sc.settingsService.GetSection("site")
// 只返回公开信息
utils.Success(c, gin.H{
"title": settings["title"],
"subtitle": settings["subtitle"],
"icon": settings["icon"],
})
}
// UpdateSiteSettings 更新站点设置
func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
var req struct {
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Icon string `json:"icon"`
PageSize string `json:"page_size"`
CookieDays string `json:"cookie_days"`
}
if err := c.ShouldBindJSON(&req); err != nil {
utils.BadRequest(c, "参数错误")
return
}
utils.Success(c, gin.H{
"site_name": config.Server.SiteName,
"port": config.Server.Port,
})
values := map[string]string{
"title": req.Title,
"subtitle": req.Subtitle,
"icon": req.Icon,
"page_size": req.PageSize,
"cookie_days": req.CookieDays,
}
if err := sc.settingsService.SetSection("site", values); err != nil {
utils.ServerError(c, "保存失败")
return
}
utils.SuccessMsg(c, "保存成功")
}
// GetAbout 获取关于信息
@@ -97,9 +133,12 @@ func (sc *SettingsController) GetAbout(c *gin.Context) {
database.DB.Model(&models.EnvironmentVariable{}).Count(&envCount)
// 内存使用
var m runtime.MemStats
runtime.ReadMemStats(&m)
memUsage := formatBytes(m.Alloc)
memUsage := "N/A"
if p, err := process.NewProcess(int32(os.Getpid())); err == nil {
if memInfo, err := p.MemoryInfo(); err == nil {
memUsage = formatBytes(memInfo.RSS)
}
}
// 运行时间
uptime := formatDuration(time.Since(constant.StartTime))