From a3923ebcdb93a1d68f0d3a2c0a0a7c0b4a7bb985 Mon Sep 17 00:00:00 2001 From: veypi Date: Sat, 14 Feb 2026 01:54:55 +0800 Subject: [PATCH] update --- api/user/user.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++-- init.go | 2 +- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/api/user/user.go b/api/user/user.go index 031393d..8c5967d 100644 --- a/api/user/user.go +++ b/api/user/user.go @@ -5,7 +5,6 @@ import ( "github.com/veypi/vbase/libs/auth" "github.com/veypi/vbase/models" "github.com/veypi/vigo" - "github.com/veypi/vigo/contrib/crud" ) type userIDReq struct { @@ -33,7 +32,57 @@ func userGet(x *vigo.X, req *userIDReq) (*models.User, error) { return data, err } -var _ = Router.Get("/", "用户列表", auth.Check("user", "", auth.DoUpdate), crud.List(cfg.DB, &models.User{})) +type listReq struct { + Page int `src:"query" json:"page" desc:"页码"` + PageSize int `src:"query" json:"page_size" desc:"每页数量"` + Keyword string `src:"query" json:"keyword" desc:"搜索关键词"` +} + +type listResp struct { + Items []*models.User `json:"items"` + Total int64 `json:"total"` + Page int `json:"page"` + PageSize int `json:"page_size"` + TotalPages int `json:"total_pages"` +} + +func userList(x *vigo.X, req *listReq) (*listResp, error) { + if req.Page <= 0 { + req.Page = 1 + } + if req.PageSize <= 0 || req.PageSize > 100 { + req.PageSize = 10 + } + + var total int64 + query := cfg.DB().Model(&models.User{}) + + if req.Keyword != "" { + query = query.Where("username LIKE ? OR nickname LIKE ? OR email LIKE ?", "%"+req.Keyword+"%", "%"+req.Keyword+"%", "%"+req.Keyword+"%") + } + + if err := query.Count(&total).Error; err != nil { + return nil, err + } + + var items []*models.User + offset := (req.Page - 1) * req.PageSize + if err := query.Offset(offset).Limit(req.PageSize).Find(&items).Error; err != nil { + return nil, err + } + + totalPages := int((total + int64(req.PageSize) - 1) / int64(req.PageSize)) + + return &listResp{ + Items: items, + Total: total, + Page: req.Page, + PageSize: req.PageSize, + TotalPages: totalPages, + }, nil +} + +var _ = Router.Get("/", "用户列表", auth.Check("user", "", auth.DoUpdate), userList) var _ = Router.Patch("/{user_id}", "更新用户", auth.Check("user", "user_id", auth.DoUpdate, checkOwner), userPatch) diff --git a/init.go b/init.go index fcdc92c..769dcd0 100644 --- a/init.go +++ b/init.go @@ -10,10 +10,10 @@ import ( "embed" "github.com/veypi/vbase/api" + "github.com/veypi/vhtml" vhtmlui "github.com/veypi/vhtml-ui" "github.com/veypi/vigo" "github.com/veypi/vigo/contrib/cors" - "github.com/veypi/vigo/contrib/vhtml" ) var Router = vigo.NewRouter()