diff --git a/backend/internal/handler/ticket.go b/backend/internal/handler/ticket.go index bd98d6f..11836cb 100644 --- a/backend/internal/handler/ticket.go +++ b/backend/internal/handler/ticket.go @@ -255,11 +255,28 @@ func ApproveTicket(c *gin.Context) { now := time.Now() - // Update approval record + // Update approval record — auto-create if missing (legacy tickets) var approval model.TicketApproval if err := model.DB.Where("ticket_id = ? AND approver_id = ? AND action IS NULL", id, userID).First(&approval).Error; err != nil { - c.JSON(http.StatusBadRequest, gin.H{"detail": "No pending approval for you"}) - return + // No approval record — check if user is authorized to review + _, userRole, _ := middleware.GetCurrentUser(c) + if userRole == "admin" || userRole == "dba" { + stepName := "审核" + stepType := "audit" + approverRole := userRole + approval = model.TicketApproval{ + TicketID: ticket.ID, + StepNumber: 1, + StepName: &stepName, + StepType: &stepType, + ApproverID: &userID, + ApproverRole: &approverRole, + } + model.DB.Create(&approval) + } else { + c.JSON(http.StatusBadRequest, gin.H{"detail": "No pending approval for you"}) + return + } } approval.Action = &input.Action