修复: 主菜单点不开 + 对话列表样式/菜单 + 标题卡死/弹回/updated_at(God 拆分遗漏 + 多 bug 合并)
主菜单点不开(7f1242c):c38cefe ErrorBoundary 嵌 transition 内部,slot 透传非元素根 → mode="out-in" 过渡卡死 → 点主菜单 URL 变页面不切换。修:ErrorBoundary 移 transition 外 + 根固定 div.error-boundary-root + display:contents 对话列表样式/菜单(God 拆分遗漏4f8f1cf+ 脉冲点5c395f4+ 审查 agent 菜单): - God 拆分样式没移子组件,AiChat scoped 不匹配子元素 → 列表/输入框样式丢。修:样式移 ConversationSidebar/ChatInput scoped + 复用抽 components.css - 脉冲点 vertical-align/margin-left 冲突。修:移除用 flex gap 统一 - 4 操作按钮窄宽撑高 → 收进"..."下拉菜单(置顶/归档/删除)+ 移除导出(后端 IPC 保留) 标题 3 重根因(8192cd2 合并): - 卡死:ensure :40 title.is_some() return,"新对话"占位永远跳过;switch need_title_regen 仅 None 不触发。修:排除"新对话"占位 + need_title_regen 含"新对话" - 弹回::121 无条件落 LLM 结果,clean_title 空兜底"新对话"覆盖 extract。修:非空非"新对话"才落 - updated_at 跳变:update_field 强制 SET updated_at=now,标题生成致时间分组跳。修:set_title 不动 updated_at CR-20/21 审查登记(待审查.md) cargo check + vue-tsc + vite build EXIT 0
This commit is contained in:
@@ -345,6 +345,28 @@ impl AiConversationRepo {
|
||||
.map_err(storage_err)?
|
||||
}
|
||||
|
||||
/// 设置标题(仅改 title,不动 updated_at)
|
||||
///
|
||||
/// 区别于 update_field(强制 SET updated_at=now,会把标题生成误判为内容更新,
|
||||
/// 导致侧栏时间分组/排序跳变)。标题生成是系统后台操作,应保持会话相对时间不变。
|
||||
pub async fn set_title(&self, id: &str, title: &str) -> Result<bool> {
|
||||
let conn = self.conn.clone();
|
||||
let id = id.to_owned();
|
||||
let title = title.to_owned();
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let guard = conn.blocking_lock();
|
||||
let affected = guard
|
||||
.execute(
|
||||
"UPDATE ai_conversations SET title = ?1 WHERE id = ?2",
|
||||
params![title, id],
|
||||
)
|
||||
.map_err(storage_err)?;
|
||||
Ok(affected > 0)
|
||||
})
|
||||
.await
|
||||
.map_err(storage_err)?
|
||||
}
|
||||
|
||||
/// 设置置顶标记(仅改 pinned,不动 updated_at) — UX-17
|
||||
///
|
||||
/// 同 set_archived:置顶是纯元数据标记,不应改变相对时间。前端排序读 pinned DESC, updated_at DESC。
|
||||
|
||||
Reference in New Issue
Block a user