From 83cd8227176dcfa497b0bdb0ef5665faab811f7e Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 10 May 2026 02:36:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=8D=A1=E5=AF=86=E7=BB=9F=E8=AE=A1=E5=92=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 前端使用后端返回的total字段显示总数 - 后端查询条件兼容旧数据(agent_id IS NULL AND creator_id = ?) - handleGetStats统计接口使用相同查询逻辑 Co-Authored-By: Claude Opus 4.7 --- backend/internal/router/agent/agent.go | 25 +++++++++++++----------- frontend/src/pages/agent/cards/index.vue | 8 +++++++- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/backend/internal/router/agent/agent.go b/backend/internal/router/agent/agent.go index 583a232..03622de 100644 --- a/backend/internal/router/agent/agent.go +++ b/backend/internal/router/agent/agent.go @@ -30,8 +30,9 @@ func handleGetStats(c *gin.Context) { var totalApps int64 database.DB.Model(&model.AgentApplication{}).Where("agent_id = ?", userID).Count(&totalApps) + // 统计卡密数:包括 agent_id 或 creator_id 等于当前用户的卡密 var totalCards int64 - database.DB.Model(&model.Card{}).Where("agent_id = ?", userID).Count(&totalCards) + database.DB.Model(&model.Card{}).Where("agent_id = ? OR (agent_id IS NULL AND creator_id = ?)", userID, userID).Count(&totalCards) var totalUsers int64 var agentApps []model.AgentApplication @@ -45,22 +46,22 @@ func handleGetStats(c *gin.Context) { } var totalRevenue float64 - database.DB.Model(&model.Card{}).Where("agent_id = ?", userID).Select("COALESCE(SUM(price), 0)").Scan(&totalRevenue) + database.DB.Model(&model.Card{}).Where("agent_id = ? OR (agent_id IS NULL AND creator_id = ?)", userID, userID).Select("COALESCE(SUM(price), 0)").Scan(&totalRevenue) today := time.Now().Format("2006-01-02") var todayCards int64 - database.DB.Model(&model.Card{}).Where("agent_id = ? AND DATE(created_at) = ?", userID, today).Count(&todayCards) + database.DB.Model(&model.Card{}).Where("(agent_id = ? OR (agent_id IS NULL AND creator_id = ?)) AND DATE(created_at) = ?", userID, userID, today).Count(&todayCards) var todayRevenue float64 - database.DB.Model(&model.Card{}).Where("agent_id = ? AND DATE(created_at) = ?", userID, today).Select("COALESCE(SUM(price), 0)").Scan(&todayRevenue) + database.DB.Model(&model.Card{}).Where("(agent_id = ? OR (agent_id IS NULL AND creator_id = ?)) AND DATE(created_at) = ?", userID, userID, today).Select("COALESCE(SUM(price), 0)").Scan(&todayRevenue) response.Success(c, gin.H{ "totalApps": totalApps, - "totalCards": totalCards, - "totalUsers": totalUsers, - "totalRevenue": totalRevenue, - "todayCards": todayCards, - "todayRevenue": todayRevenue, + "totalCards": totalCards, + "totalUsers": totalUsers, + "totalRevenue": totalRevenue, + "todayCards": todayCards, + "todayRevenue": todayRevenue, }) } @@ -157,8 +158,9 @@ func handleGetCards(c *gin.Context) { page := c.DefaultQuery("page", "1") pageSize := c.DefaultQuery("page_size", "20") + // 统计总数:包括 agent_id 或 creator_id 等于当前��户的卡密 var total int64 - database.DB.Model(&model.Card{}).Where("agent_id = ?", userID).Count(&total) + database.DB.Model(&model.Card{}).Where("agent_id = ? OR (agent_id IS NULL AND creator_id = ?)", userID, userID).Count(&total) var cards []model.Card offset := 0 @@ -171,7 +173,8 @@ func handleGetCards(c *gin.Context) { limit = pageSizeInt } - database.DB.Where("agent_id = ?", userID).Order("created_at DESC").Limit(limit).Offset(offset).Find(&cards) + // 查询卡密:包括 agent_id 或 creator_id 等于当前用户的卡密 + database.DB.Where("agent_id = ? OR (agent_id IS NULL AND creator_id = ?)", userID, userID).Order("created_at DESC").Limit(limit).Offset(offset).Find(&cards) // 获取关联数据 cardTypeIDs := make([]uint, 0) diff --git a/frontend/src/pages/agent/cards/index.vue b/frontend/src/pages/agent/cards/index.vue index 4a21dbb..00990be 100644 --- a/frontend/src/pages/agent/cards/index.vue +++ b/frontend/src/pages/agent/cards/index.vue @@ -15,6 +15,7 @@ const router = useRouter() const loading = ref(true) const cards = ref([]) +const total = ref(0) const tableRef = ref() const searchFilter = ref('') @@ -42,17 +43,22 @@ async function fetchCards() { const data = await api.get('/agent/cards') if (Array.isArray(data)) { cards.value = data + total.value = data.length } else if (data?.cards) { cards.value = data.cards + total.value = data.total || data.cards.length } else if (data?.data) { cards.value = Array.isArray(data.data) ? data.data : [] + total.value = data.total || cards.value.length } else { cards.value = [] + total.value = 0 } } catch (error) { console.error('Load cards failed:', error) cards.value = [] + total.value = 0 } finally { loading.value = false @@ -111,7 +117,7 @@ onMounted(() => {
- {{ cards.length }} + {{ total }}