优化分页和筛选功能:实现服务端分页和筛选,修复总数不匹配问题
- 优化设备管理、版本管理、用户管理、在线实例、公告管理页面的分页功能 - 后端添加筛选参数支持(application_id, status, type, search等) - 前端移除冗余的前端筛选逻辑,改为服务端筛选 - 修复分页总数与筛选数据不匹配的问题 - 优化云端变量记录页面的时间筛选和搜索功能 - 修复DateTimePicker组件关闭后不自动更新的问题
This commit is contained in:
@@ -3,6 +3,7 @@ package admin
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
"time"
|
||||
"verification-platform-backend/internal/database"
|
||||
"verification-platform-backend/internal/model"
|
||||
@@ -57,10 +58,14 @@ func handleGetUsers(c *gin.Context) {
|
||||
userID := c.GetUint("user_id")
|
||||
log.Printf("[DEBUG] handleGetUsers called, userID: %d", userID)
|
||||
|
||||
var users []model.AppUser
|
||||
var appHeartbeatTimeoutMap map[uint]int
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
||||
|
||||
applicationID := c.Query("application_id")
|
||||
statusFilter := c.Query("status")
|
||||
|
||||
var users []model.AppUser
|
||||
var appHeartbeatTimeoutMap map[uint]int
|
||||
if applicationID != "" {
|
||||
var appID uint
|
||||
if _, err := fmt.Sscanf(applicationID, "%d", &appID); err != nil {
|
||||
@@ -81,8 +86,13 @@ func handleGetUsers(c *gin.Context) {
|
||||
}
|
||||
appHeartbeatTimeoutMap[app.ID] = timeout
|
||||
|
||||
query := database.DB.Preload("Application").Where("application_id = ?", appID)
|
||||
if statusFilter != "" {
|
||||
query = query.Where("status = ?", statusFilter)
|
||||
}
|
||||
|
||||
if app.UserID == userID {
|
||||
if err := database.DB.Preload("Application").Where("application_id = ?", appID).Find(&users).Error; err != nil {
|
||||
if err := query.Find(&users).Error; err != nil {
|
||||
response.Error(c, 500, "获取用户列表失败")
|
||||
return
|
||||
}
|
||||
@@ -102,7 +112,11 @@ func handleGetUsers(c *gin.Context) {
|
||||
}
|
||||
|
||||
if len(cardUserIDs) > 0 {
|
||||
if err := database.DB.Preload("Application").Where("id IN ?", cardUserIDs).Find(&users).Error; err != nil {
|
||||
query = database.DB.Preload("Application").Where("id IN ?", cardUserIDs)
|
||||
if statusFilter != "" {
|
||||
query = query.Where("status = ?", statusFilter)
|
||||
}
|
||||
if err := query.Find(&users).Error; err != nil {
|
||||
response.Error(c, 500, "获取用户列表失败")
|
||||
return
|
||||
}
|
||||
@@ -137,7 +151,11 @@ func handleGetUsers(c *gin.Context) {
|
||||
}
|
||||
|
||||
if len(ownAppIDs) > 0 {
|
||||
if err := database.DB.Preload("Application").Where("application_id IN ?", ownAppIDs).Find(&users).Error; err != nil {
|
||||
query := database.DB.Preload("Application").Where("application_id IN ?", ownAppIDs)
|
||||
if statusFilter != "" {
|
||||
query = query.Where("status = ?", statusFilter)
|
||||
}
|
||||
if err := query.Find(&users).Error; err != nil {
|
||||
response.Error(c, 500, "获取用户列表失败")
|
||||
return
|
||||
}
|
||||
@@ -179,8 +197,12 @@ func handleGetUsers(c *gin.Context) {
|
||||
}
|
||||
|
||||
if len(allCardUserIDs) > 0 {
|
||||
query := database.DB.Preload("Application").Where("id IN ?", allCardUserIDs)
|
||||
if statusFilter != "" {
|
||||
query = query.Where("status = ?", statusFilter)
|
||||
}
|
||||
var appUsers []model.AppUser
|
||||
if err := database.DB.Preload("Application").Where("id IN ?", allCardUserIDs).Find(&appUsers).Error; err != nil {
|
||||
if err := query.Find(&appUsers).Error; err != nil {
|
||||
log.Printf("[DEBUG] Failed to get users: %v", err)
|
||||
} else {
|
||||
users = append(users, appUsers...)
|
||||
@@ -246,9 +268,21 @@ func handleGetUsers(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
end := offset + pageSize
|
||||
if offset > len(usersWithStatus) {
|
||||
offset = len(usersWithStatus)
|
||||
}
|
||||
if end > len(usersWithStatus) {
|
||||
end = len(usersWithStatus)
|
||||
}
|
||||
paginatedUsers := usersWithStatus[offset:end]
|
||||
|
||||
responseData := gin.H{
|
||||
"users": usersWithStatus,
|
||||
"users": paginatedUsers,
|
||||
"total": totalCount,
|
||||
"page": page,
|
||||
"page_size": pageSize,
|
||||
"online_count": onlineCount,
|
||||
"offline_count": offlineCount,
|
||||
"banned_count": bannedCount,
|
||||
|
||||
Reference in New Issue
Block a user