美化排版前端管理后台

This commit is contained in:
2026-06-29 16:59:56 +08:00
parent f0dce7ad91
commit ec7ee7ba56
122 changed files with 18418 additions and 38 deletions

View File

@@ -22,6 +22,36 @@ func NewAdminHandler(store *storage.ProductStore, cfg *config.Config, siteStore
return &AdminHandler{store: store, cfg: cfg, siteStore: siteStore, orderStore: orderStore, chatStore: chatStore}
}
// GetAnnouncement 公开获取公告内容。
func (h *AdminHandler) GetAnnouncement(c *gin.Context) {
ann, err := h.siteStore.GetAnnouncement()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"data": ann})
}
// SetAnnouncement 管理员更新公告内容。
func (h *AdminHandler) SetAnnouncement(c *gin.Context) {
if !h.requireAdmin(c) {
return
}
var payload struct {
Content string `json:"content"`
}
if err := c.ShouldBindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid body"})
return
}
if err := h.siteStore.SetAnnouncement(payload.Content); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
ann, _ := h.siteStore.GetAnnouncement()
c.JSON(http.StatusOK, gin.H{"data": ann})
}
// requireAdmin 校验管理员令牌。
// 优先级X-Admin-Token 请求头 > Authorization 请求头 > ?token 查询参数(旧版兼容)。
func (h *AdminHandler) requireAdmin(c *gin.Context) bool {

View File

@@ -2,6 +2,7 @@ package storage
import (
"strconv"
"time"
"gorm.io/gorm"
"gorm.io/gorm/clause"
@@ -9,6 +10,28 @@ import (
"mengyastore-backend/internal/database"
)
type Announcement struct {
Content string `json:"content"`
Version string `json:"version"`
}
func (s *SiteStore) GetAnnouncement() (Announcement, error) {
content, err := s.get("announcementContent")
if err != nil {
return Announcement{}, err
}
version, _ := s.get("announcementVersion")
return Announcement{Content: content, Version: version}, nil
}
func (s *SiteStore) SetAnnouncement(content string) error {
version := strconv.FormatInt(time.Now().UnixMilli(), 10)
if err := s.set("announcementContent", content); err != nil {
return err
}
return s.set("announcementVersion", version)
}
type SiteStore struct {
db *gorm.DB
}

View File

@@ -241,6 +241,7 @@ func main() {
statusHandler := handlers.NewSystemStatusHandler(cfg, db, mqClient, startedAt)
// 公开路由
r.GET("/api/announcement", adminHandler.GetAnnouncement)
r.GET("/api/products", publicHandler.ListProducts)
r.POST("/api/checkout", orderHandler.CreateOrder)
r.GET("/api/orders/:id/payment-status", orderHandler.GetOrderPaymentStatus)
@@ -260,6 +261,7 @@ func main() {
r.PUT("/api/admin/products/:id", adminHandler.UpdateProduct)
r.PATCH("/api/admin/products/:id/status", adminHandler.ToggleProduct)
r.DELETE("/api/admin/products/:id", adminHandler.DeleteProduct)
r.PUT("/api/admin/announcement", adminHandler.SetAnnouncement)
r.POST("/api/admin/site/maintenance", adminHandler.SetMaintenance)
r.GET("/api/admin/site/smtp", adminHandler.GetSMTPConfig)
r.POST("/api/admin/site/smtp", adminHandler.SetSMTPConfig)