From a2eccb9818e8590883ad606d7458ab4b3d740b2e Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 7 May 2026 01:13:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD=E5=88=B0=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2,=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E6=97=A0=E6=95=88=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/router/admin/agents.go | 41 +++++++ frontend/src/pages/admin/agent-apps/index.vue | 15 +-- .../pages/admin/agents/components/columns.ts | 7 +- .../admin/agents/components/data-table.vue | 2 + frontend/src/pages/admin/agents/index.vue | 104 +++++++++++++++++- frontend/src/plugins/i18n/zh.json | 1 + 6 files changed, 154 insertions(+), 16 deletions(-) diff --git a/backend/internal/router/admin/agents.go b/backend/internal/router/admin/agents.go index 5ea0d07..d9020d7 100644 --- a/backend/internal/router/admin/agents.go +++ b/backend/internal/router/admin/agents.go @@ -21,6 +21,7 @@ func SetupAgentsRoutes(r *gin.RouterGroup) { agents.GET("/:id", handleGetAgentDetail) agents.PUT("/:id", handleUpdateAgent) agents.PUT("/:id/status", handleUpdateAgentStatus) + agents.POST("/:id/recharge", handleRechargeAgent) agents.DELETE("/:id", handleDeleteAgent) agents.GET("/:id/cards", handleGetAgentCards) agents.PUT("/:id/cards", handleUpdateAgentCards) @@ -77,6 +78,7 @@ func handleGetAgents(c *gin.Context) { CreatedAt string `json:"created_at"` LastLoginAt string `json:"last_login_at"` Balance float64 `json:"balance"` + TotalConsumption float64 `json:"total_consumption"` CanCreateAgent bool `json:"can_create_agent"` CardsCount int `json:"cards_count"` ChildAgentsCount int `json:"child_agents_count"` @@ -149,6 +151,7 @@ func handleGetAgents(c *gin.Context) { CreatedAt: user.CreatedAt.Format("2006-01-02 15:04:05"), LastLoginAt: lastLoginAt, Balance: user.Balance, + TotalConsumption: user.TotalConsumption, CanCreateAgent: user.CanCreateAgent, CardsCount: cardsCountMap[user.ID], ChildAgentsCount: childCountMap[user.ID], @@ -678,3 +681,41 @@ func handleBatchDeleteAgents(c *gin.Context) { "deleted": len(req.AgentIDs), }) } + +func handleRechargeAgent(c *gin.Context) { + agentID := c.Param("id") + + var user model.User + if err := database.DB.Where("id = ? AND role = ?", agentID, "agent").First(&user).Error; err != nil { + response.Error(c, 404, "代理不存在") + return + } + + var req struct { + Amount float64 `json:"amount" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + response.Error(c, 400, "参数错误") + return + } + + if req.Amount <= 0 { + response.Error(c, 400, "充值金额必须大于0") + return + } + + newBalance := user.Balance + req.Amount + if err := database.DB.Model(&user).Update("balance", newBalance).Error; err != nil { + response.Error(c, 500, "充值失败") + return + } + + service.LogOperation(c, "recharge", "agent", &user.ID, fmt.Sprintf("为代理充值: %.2f, 余额: %.2f -> %.2f", req.Amount, user.Balance, newBalance), nil) + + response.Success(c, gin.H{ + "balance": newBalance, + "recharge": req.Amount, + "agent_id": user.ID, + "agent_name": user.Username, + }) +} diff --git a/frontend/src/pages/admin/agent-apps/index.vue b/frontend/src/pages/admin/agent-apps/index.vue index b4dcd9b..e204c75 100644 --- a/frontend/src/pages/admin/agent-apps/index.vue +++ b/frontend/src/pages/admin/agent-apps/index.vue @@ -1,5 +1,5 @@