修复工单、日志、卡密管理页面的分页和筛选功能
- 工单管理:后端添加分页和筛选支持(status, priority, type, 日期范围) - 日志管理:前端使用服务端分页和筛选(后端已支持) - 卡密管理:前端使用服务端分页和筛选(后端已支持) - 所有页面移除前端筛选逻辑,改为服务端筛选 - 修复分页总数与筛选数据不匹配的问题 - 添加watch监听筛选条件变化,自动刷新数据
This commit is contained in:
@@ -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),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user