108 lines
2.9 KiB
Go
108 lines
2.9 KiB
Go
// Banner 模块:首页轮播图接口
|
|
package banner
|
|
|
|
import (
|
|
"com.sclktx/m/v2/internal/common/model"
|
|
"com.sclktx/m/v2/internal/common/response"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// BannerHandler Banner 处理器
|
|
type BannerHandler struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewBannerHandler 创建 Banner 处理器
|
|
func NewBannerHandler(db *gorm.DB) *BannerHandler {
|
|
return &BannerHandler{db: db}
|
|
}
|
|
|
|
// BannerVO Banner 视图对象(只返回前端需要的字段)
|
|
type BannerVO struct {
|
|
ImageURL string `json:"image_url"` // 图片地址
|
|
JumpPath string `json:"jump_path"` // 跳转链接(空字符串表示不可跳转)
|
|
IsJump bool `json:"is_jump"` // 是否可跳转
|
|
}
|
|
|
|
// @Summary 获取首页轮播图列表
|
|
// @Description 获取首页轮播图列表(公开接口)
|
|
// @Tags 公共
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=[]banner.BannerVO} "success"
|
|
// @Router /api/v1/banners [get]
|
|
// GetBanners 获取首页轮播图列表(公开接口)
|
|
func (h *BannerHandler) GetBanners(c *gin.Context) {
|
|
var banners []model.Banner
|
|
if err := h.db.Where("is_valid = ?", true).
|
|
Order("sort ASC, id DESC").
|
|
Find(&banners).Error; err != nil {
|
|
response.InternalError(c, "查询失败")
|
|
return
|
|
}
|
|
|
|
result := make([]BannerVO, 0, len(banners))
|
|
for _, b := range banners {
|
|
result = append(result, BannerVO{
|
|
ImageURL: b.ImageURL,
|
|
JumpPath: b.JumpPath,
|
|
IsJump: b.IsJump,
|
|
})
|
|
}
|
|
|
|
// 如果没有数据,返回空数组而非 null
|
|
if result == nil {
|
|
result = []BannerVO{
|
|
{
|
|
ImageURL: "//mmbiz.qpic.cn/mmbiz_jpg/XekA4rfc3lcLOadSAicKvm3ZXFgn9TtZUOh5tSgaJeQrqs6JhWKfszMHBQhXaicPpgVM09U3dnHBfoEriaM9fKPXYCDvsB2fiaib4TAjXMGV2Ql0/0?from=appmsg",
|
|
JumpPath: "",
|
|
IsJump: false,
|
|
},
|
|
}
|
|
}
|
|
|
|
response.Success(c, result)
|
|
}
|
|
|
|
// NoticeVO 通知视图对象
|
|
type NoticeVO struct {
|
|
ID uint `json:"id"`
|
|
Title string `json:"title"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
// @Summary 获取有效通知列表
|
|
// @Description 获取有效通知列表(公开接口)
|
|
// @Tags 公共
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=[]banner.NoticeVO} "success"
|
|
// @Router /api/v1/notices [get]
|
|
// GetNotices 获取有效通知列表(公开接口)
|
|
func (h *BannerHandler) GetNotices(c *gin.Context) {
|
|
var notices []model.Notice
|
|
h.db.Where("is_valid = ?", true).Order("sort ASC, id DESC").Find(¬ices)
|
|
|
|
result := make([]NoticeVO, 0, len(notices))
|
|
for _, n := range notices {
|
|
result = append(result, NoticeVO{
|
|
ID: n.ID,
|
|
Title: n.Title,
|
|
Content: n.Content,
|
|
})
|
|
}
|
|
if result == nil {
|
|
result = []NoticeVO{}
|
|
}
|
|
|
|
response.Success(c, result)
|
|
}
|
|
|
|
// RegisterRoutes 注册 Banner 路由(公开接口,无需认证)
|
|
func (h *BannerHandler) RegisterRoutes(r *gin.RouterGroup) {
|
|
r.GET("/banners", h.GetBanners)
|
|
r.GET("/notices", h.GetNotices)
|
|
}
|