前端请求:
{current: 1, size: 10, total: 0, resourceType: "lovePhoto", classify: "旅游"}
后端代码:
func ListResourcePath(c *gin.Context) {
// 定义结构体 接受前端传递的数据分页,查询
type RequestParams struct {
Current int `json:"current"` // 当前页码
Size int `json:"size"` // 每页大小
ResourceType string `json:"resourceType"`
Classify string `json:"classify"` // 分类名称
}
// 初始化请求参数变量并绑定请求体
var requestParams RequestParams
if err := c.ShouldBindJSON(&requestParams); err != nil {
response.FailWithMessage("绑定数据失败", c)
return
}
// 计算Offset值
offset := (requestParams.Current - 1) * requestParams.Size
var homes []system.SysHome
// 使用关联查询 链式操作
db := global.GVA_DB.Preload("HomeImgs")
if requestParams.Classify != "" {
db = db.Where("name = ?", requestParams.Classify) // 添加分类查询条件
}
//offset limit 分页查询
if err := db.Offset(offset).Limit(requestParams.Size).Find(&homes).Error; err != nil {
response.FailWithMessage("查询数据失败", c)
return
}
// 转换结果为前端需要的格式
var results []map[string]interface{}
for _, home := range homes {
for _, img := range home.HomeImgs {
result := map[string]interface{}{
"ID": img.ID,
"Title": img.Title,
"Classify": home.Name, // 从 SysHome 获取分类名称
"Cover": img.Cover,
"Introduction": img.Introduction,
// 格式化时间
"CreateTime": img.CreatedAt.Format("2006-01-02 15:04:05"),
}
results = append(results, result)
}
}
// 计算总记录数,用于分页
var totalHomes int64
if err := global.GVA_DB.Model(&system.SysHome{}).Where("name = ?", requestParams.Classify).Count(&totalHomes).Error; err != nil {
response.FailWithMessage("查询总数失败", c)
return
}
// 创建包含results的响应数据结构
var responseData = map[string]interface{}{
"records": results,
"total": int(totalHomes), // 总记录数
"size": requestParams.Size,
"current": requestParams.Current,
"currentTimeMillis": time.Now().UnixNano() / int64(time.Millisecond), // 当前时间的时间戳
}
// 返回包含"data"层的响应数据
response.OkWithDetailed(responseData, "获取数据成功", c)
}