diff --git a/internal/handler/conversation.go b/internal/handler/conversation.go index 06d04888..7715a698 100644 --- a/internal/handler/conversation.go +++ b/internal/handler/conversation.go @@ -103,6 +103,7 @@ func (h *ConversationHandler) ListConversations(c *gin.Context) { limitStr := c.DefaultQuery("limit", "50") offsetStr := c.DefaultQuery("offset", "0") search := c.Query("search") // 获取搜索参数 + projectID := strings.TrimSpace(c.Query("project_id")) limit, _ := strconv.Atoi(limitStr) offset, _ := strconv.Atoi(offsetStr) @@ -114,7 +115,7 @@ func (h *ConversationHandler) ListConversations(c *gin.Context) { limit = 1000 } - excludeGrouped := strings.TrimSpace(search) == "" && + excludeGrouped := strings.TrimSpace(search) == "" && projectID == "" && (c.Query("exclude_grouped") == "true" || c.Query("exclude_grouped") == "1") sortBy := strings.TrimSpace(c.Query("sort_by")) @@ -122,14 +123,14 @@ func (h *ConversationHandler) ListConversations(c *gin.Context) { var total int var err error if excludeGrouped { - conversations, err = h.db.ListUngroupedConversations(limit, offset, sortBy) + conversations, err = h.db.ListUngroupedConversations(limit, offset, sortBy, projectID) if err == nil { - total, err = h.db.CountUngroupedConversations() + total, err = h.db.CountUngroupedConversations(projectID) } } else { - conversations, err = h.db.ListConversations(limit, offset, search, sortBy) + conversations, err = h.db.ListConversations(limit, offset, search, sortBy, projectID) if err == nil { - total, err = h.db.CountConversations(search) + total, err = h.db.CountConversations(search, projectID) } } if err != nil { diff --git a/internal/handler/openapi.go b/internal/handler/openapi.go index e14444d5..d25d06ae 100644 --- a/internal/handler/openapi.go +++ b/internal/handler/openapi.go @@ -1243,6 +1243,34 @@ func (h *OpenAPIHandler) GetOpenAPISpec(c *gin.Context) { "type": "string", }, }, + { + "name": "project_id", + "in": "query", + "required": false, + "description": "按项目筛选;传 __none__ 表示仅未绑定项目的对话", + "schema": map[string]interface{}{ + "type": "string", + }, + }, + { + "name": "exclude_grouped", + "in": "query", + "required": false, + "description": "为 true 时排除已加入分组的对话(默认在未搜索且未按项目筛选时启用)", + "schema": map[string]interface{}{ + "type": "boolean", + }, + }, + { + "name": "sort_by", + "in": "query", + "required": false, + "description": "排序字段:updated_at(默认)或 created_at", + "schema": map[string]interface{}{ + "type": "string", + "enum": []string{"updated_at", "created_at"}, + }, + }, }, "responses": map[string]interface{}{ "200": map[string]interface{}{ diff --git a/internal/handler/robot.go b/internal/handler/robot.go index 0c301506..0a703367 100644 --- a/internal/handler/robot.go +++ b/internal/handler/robot.go @@ -447,7 +447,7 @@ func (h *RobotHandler) cmdUnbindProject(platform, userID string) string { } func (h *RobotHandler) cmdList() string { - convs, err := h.db.ListConversations(50, 0, "", "") + convs, err := h.db.ListConversations(50, 0, "", "", "") if err != nil { return "获取对话列表失败: " + err.Error() }