# ChatHistory 会话列表重构迁移计划 ## 参考来源 - **源文件**: `ClawX/src/components/layout/Sidebar.tsx:280-335` - **目标文件**: `zn-ai/src/pages/home/ChatHistory.vue` ## 源实现思路分析 `Sidebar.tsx:280-335` 的历史会话列表核心设计: 1. **时间分桶(Time Buckets)** - 将会话按最后活动时间划分为:`today`、`yesterday`、`withinWeek`、`withinTwoWeeks`、`withinMonth`、`older`。 - 通过 `getSessionBucket(activityMs, nowMs)` 函数计算每个会话所属的分组。 - 会话先按时间降序排序,再归入对应 bucket。 2. **分组标签渲染** - 每个 bucket 顶部显示一个 11px 的灰色小标签(如 "Today" / "Yesterday" / "Older")。 - 空 bucket 直接跳过不渲染。 3. **会话项结构** - 外层 `group relative flex items-center` 包裹。 - 左侧显示 **agent 名称标签**(圆角小 pill),右侧显示 **会话标题**(`truncate` 截断)。 - 当前选中的会话高亮:背景色 + 加粗文字。 - hover 时背景变深。 4. **删除交互(悬停显隐)** - 删除按钮默认 `opacity-0`,hover 整个会话项时通过 `group-hover:opacity-100` 显现。 - 按钮绝对定位在右侧,避免挤压标题空间。 5. **点击行为** - 点击整个会话行:切换会话 + 导航到聊天页。 - 删除按钮单独拦截 `stopPropagation`。 --- ## 迁移目标 将上述时间分桶、分组标签、悬停删除、紧凑列表布局迁移到 `ChatHistory.vue`,替换当前简单平铺的 `groups` 列表,同时保留 zn-ai 项目现有风格与功能。 --- ## 实现步骤 ### 1. 引入时间分桶工具函数 在 `