package role import ( "github.com/veypi/OneBD/rest" "oa/models" "oa/cfg" ) var _ = Router.Get("/", listRoles) type listOpts struct { Page int `parse:"query" default:"1"` PageSize int `parse:"query" default:"20"` Keyword string `parse:"query" default:""` SortBy string `parse:"query" default:"created_at"` Order string `parse:"query" default:"desc"` } type listResponse struct { Total int64 `json:"total"` Items []*models.Role `json:"items"` } func listRoles(x *rest.X) (any, error) { // 解析参数 opts := &listOpts{} if err := x.Parse(opts); err != nil { return nil, err } // 构建查询 db := cfg.DB().Model(&models.Role{}) query := db // 应用关键词搜索 if opts.Keyword != "" { query = query.Where("name LIKE ? OR des LIKE ?", "%"+opts.Keyword+"%", "%"+opts.Keyword+"%") } // 计算总数 var total int64 if err := query.Count(&total).Error; err != nil { return nil, err } // 分页和排序 offset := (opts.Page - 1) * opts.PageSize query = query.Order(opts.SortBy + " " + opts.Order) query = query.Offset(offset).Limit(opts.PageSize) // 查询数据 var roles []*models.Role if err := query.Find(&roles).Error; err != nil { return nil, err } // 返回结果 return &listResponse{ Total: total, Items: roles, }, nil }