diff --git a/internal/database/conversation.go b/internal/database/conversation.go index d28e483e..1fc99652 100644 --- a/internal/database/conversation.go +++ b/internal/database/conversation.go @@ -200,9 +200,10 @@ func (db *DB) ListConversations(limit, offset int, search string) ([]*Conversati // UpdateConversationTitle 更新对话标题 func (db *DB) UpdateConversationTitle(id, title string) error { + // 注意:不更新 updated_at,因为重命名操作不应该改变对话的更新时间 _, err := db.Exec( - "UPDATE conversations SET title = ?, updated_at = ? WHERE id = ?", - title, time.Now(), id, + "UPDATE conversations SET title = ? WHERE id = ?", + title, id, ) if err != nil { return fmt.Errorf("更新对话标题失败: %w", err) diff --git a/internal/database/group.go b/internal/database/group.go index cb9597da..7a56ff56 100644 --- a/internal/database/group.go +++ b/internal/database/group.go @@ -292,9 +292,10 @@ func (db *DB) UpdateConversationPinned(id string, pinned bool) error { if pinned { pinnedValue = 1 } + // 注意:不更新 updated_at,因为置顶操作不应该改变对话的更新时间 _, err := db.Exec( - "UPDATE conversations SET pinned = ?, updated_at = ? WHERE id = ?", - pinnedValue, time.Now(), id, + "UPDATE conversations SET pinned = ? WHERE id = ?", + pinnedValue, id, ) if err != nil { return fmt.Errorf("更新对话置顶状态失败: %w", err) diff --git a/web/static/js/monitor.js b/web/static/js/monitor.js index db207402..cc3fed4a 100644 --- a/web/static/js/monitor.js +++ b/web/static/js/monitor.js @@ -448,8 +448,11 @@ function handleStreamEvent(event, progressElement, progressId, updateActiveConversation(); addAttackChainButton(currentConversationId); loadActiveTasks(); - // 立即刷新对话列表,让新对话显示在历史记录中 - loadConversations(); + // 延迟刷新对话列表,确保用户消息已保存,updated_at已更新 + // 这样新对话才能正确显示在最近对话列表的顶部 + setTimeout(() => { + loadConversations(); + }, 200); } break; case 'iteration': @@ -627,8 +630,10 @@ function handleStreamEvent(event, progressElement, progressId, collapseAllProgressDetails(assistantId, progressId); }, 3000); - // 刷新对话列表 - loadConversations(); + // 延迟刷新对话列表,确保助手消息已保存,updated_at已更新 + setTimeout(() => { + loadConversations(); + }, 200); break; case 'error':