统一管理后台分页样式

- 新建 AdminTablePagination 组件,统一分页 UI
- 改造 6 个前端页面使用统一分页组件:
  - 管理员管理
  - 用户管理
  - 申诉管理
  - 审计日志
  - 公告管理
  - 钱包流水
- 订单管理前后端完整改造:
  - 后端:添加 PaginatedResult 结构,支持 page/page_size 参数
  - 前端:API 支持分页参数,页面使用统一分页组件
- 所有列表页分页样式统一为商品管理的 .table-pagination 设计

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
yml
2026-06-06 00:13:59 +08:00
co-authored by Claude Opus 4.8
parent abb2204e56
commit ec9baada67
13 changed files with 226 additions and 90 deletions
+7
View File
@@ -72,6 +72,13 @@ type AdminActionRequest struct {
type AuditMeta = auditlog.Meta
type PaginatedResult struct {
Items []OrderDTO `json:"items"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
type RefundStatusDTO struct {
OrderID uint64 `json:"order_id"`
OrderNo string `json:"order_no"`
+18 -2
View File
@@ -53,12 +53,13 @@ func (h *Handler) List(c *gin.Context) {
}
func (h *Handler) AdminList(c *gin.Context) {
items, err := h.service.ListAdmin()
page, pageSize := parsePagination(c)
result, err := h.service.ListAdmin(page, pageSize)
if err != nil {
writeOrderError(c, err)
return
}
response.OK(c, gin.H{"items": items})
response.OK(c, result)
}
func (h *Handler) AdminDetail(c *gin.Context) {
@@ -408,6 +409,21 @@ func parseID(c *gin.Context) (uint64, bool) {
return id, true
}
func parsePagination(c *gin.Context) (int, int) {
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
if page < 1 {
page = 1
}
if pageSize < 1 {
pageSize = 20
}
if pageSize > 100 {
pageSize = 100
}
return page, pageSize
}
func writeOrderError(c *gin.Context, err error) {
switch {
case errors.Is(err, ErrDependencyUnavailable):
+17 -3
View File
@@ -707,20 +707,34 @@ func (r *Repository) ListForUser(userID uint64) ([]OrderDTO, error) {
return items, nil
}
func (r *Repository) ListAdmin() ([]OrderDTO, error) {
func (r *Repository) ListAdmin(page, pageSize int) (*PaginatedResult, error) {
var total int64
if err := r.adminQuery().Count(&total).Error; err != nil {
return nil, err
}
offset := (page - 1) * pageSize
var rows []orderRow
err := r.adminQuery().
Order("o.id DESC").
Limit(200).
Limit(pageSize).
Offset(offset).
Scan(&rows).Error
if err != nil {
return nil, err
}
items := make([]OrderDTO, 0, len(rows))
for _, row := range rows {
items = append(items, row.toAdminDTO())
}
return items, nil
return &PaginatedResult{
Items: items,
Total: total,
Page: page,
PageSize: pageSize,
}, nil
}
func (r *Repository) FindAdmin(orderID uint64) (*OrderDTO, error) {
+2 -2
View File
@@ -141,11 +141,11 @@ func (s *Service) ListForUser(userID uint64) ([]OrderDTO, error) {
return s.repo.ListForUser(userID)
}
func (s *Service) ListAdmin() ([]OrderDTO, error) {
func (s *Service) ListAdmin(page, pageSize int) (*PaginatedResult, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.ListAdmin()
return s.repo.ListAdmin(page, pageSize)
}
func (s *Service) FindAdmin(orderID uint64) (*OrderDTO, error) {