修复工单、日志、卡密管理页面的分页和筛选功能

- 工单管理:后端添加分页和筛选支持(status, priority, type, 日期范围)
- 日志管理:前端使用服务端分页和筛选(后端已支持)
- 卡密管理:前端使用服务端分页和筛选(后端已支持)
- 所有页面移除前端筛选逻辑,改为服务端筛选
- 修复分页总数与筛选数据不匹配的问题
- 添加watch监听筛选条件变化,自动刷新数据
This commit is contained in:
2026-05-08 14:45:38 +08:00
parent d0ef52ab4f
commit dde179a896
4 changed files with 195 additions and 148 deletions
+51 -4
View File
@@ -1,8 +1,9 @@
package admin
package admin
import (
"fmt"
"log"
"strconv"
"verification-platform-backend/internal/database"
"verification-platform-backend/internal/model"
@@ -49,12 +50,55 @@ func handleGetTicketStats(c *gin.Context) {
func handleGetTickets(c *gin.Context) {
userID := c.GetUint("user_id")
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
statusFilter := c.Query("status")
priorityFilter := c.Query("priority")
typeFilter := c.Query("type")
createdStartDate := c.Query("created_start_date")
createdEndDate := c.Query("created_end_date")
updatedStartDate := c.Query("updated_start_date")
updatedEndDate := c.Query("updated_end_date")
query := database.DB.Model(&model.Ticket{}).Where("user_id = ? OR assigned_to = ?", userID, userID)
if statusFilter != "" {
query = query.Where("status = ?", statusFilter)
}
if priorityFilter != "" {
query = query.Where("priority = ?", priorityFilter)
}
if typeFilter != "" {
query = query.Where("type = ?", typeFilter)
}
if createdStartDate != "" {
query = query.Where("created_at >= ?", createdStartDate+" 00:00:00")
}
if createdEndDate != "" {
query = query.Where("created_at <= ?", createdEndDate+" 23:59:59")
}
if updatedStartDate != "" {
query = query.Where("updated_at >= ?", updatedStartDate+" 00:00:00")
}
if updatedEndDate != "" {
query = query.Where("updated_at <= ?", updatedEndDate+" 23:59:59")
}
var total int64
query.Count(&total)
offset := (page - 1) * pageSize
var tickets []model.Ticket
if err := database.DB.Where("user_id = ? OR assigned_to = ?", userID, userID).
if err := query.
Preload("Replies").
Preload("Application").
Preload("User").
Preload("AssignedUser").
Order("created_at DESC").
Offset(offset).
Limit(pageSize).
Find(&tickets).Error; err != nil {
response.Error(c, 500, "获取工单列表失败")
return
@@ -84,8 +128,11 @@ func handleGetTickets(c *gin.Context) {
}
response.Success(c, gin.H{
"tickets": result,
"total": len(result),
"tickets": result,
"total": total,
"page": page,
"page_size": pageSize,
"total_page": (total + int64(pageSize) - 1) / int64(pageSize),
})
}