From 86eea2503154a0ad2bde0564144b9124cdbe62c7 Mon Sep 17 00:00:00 2001 From: logan Date: Fri, 29 May 2026 18:46:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=A1=E6=89=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=A1=A5=E5=85=A8=E7=BC=BA=E5=A4=B1=E7=9A=84?= =?UTF-8?q?approval=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 旧ticket可能没有关联approval记录(创建时代码不同), 导致approve/reject报400 No pending approval。 现在admin/dba角色会自动创建approval记录再审批。 --- backend/internal/handler/ticket.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) 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