# 前端组件化 Phase 2 – 侧栏与文件面板

## 交付内容

1. **对话侧栏组件化**
   - 新增 `static/src/components/ConversationSidebar.vue`，集成 Pinia `useConversationStore`，提供对话列表、搜索、新建、复制、删除、加载更多等操作。
   - `useConversationStore`（`static/src/stores/conversation.ts`）负责对话分页、当前对话、调用 `/api/conversations` 系列接口；`App.vue` 显示当前选中对话的概要。

2. **左侧文件/面板骨架**
   - `static/src/components/LeftPanel.vue` + `components/atoms/FileNode.vue` 渲染项目文件树，并预留待办/子智能体 Tab。
   - `useFileStore`（`static/src/stores/files.ts`）封装 `/api/files` 加载逻辑并构建递归节点；FileNode 支持展开/收起与快捷下载。

3. **页面布局重构**
   - `App.vue` 替换临时占位，组装 `ConversationSidebar + LeftPanel + MainArea` 布局；`base.css` 补充基础样式。
   - `static/index.html` 中的新入口逻辑不变，依旧可通过 `localStorage.useNewFrontend` 切换。

4. **实用工具**
   - `static/src/utils/api.ts` 提供统一 fetch 包装，简化 CSRF/错误处理。

## 使用说明

```bash
npm install          # 如未安装依赖
npm run build        # 生成 static/dist 供 Flask 加载
# 或 npm run dev 以 watch 方式重建
```

在浏览器执行 `localStorage.setItem('useNewFrontend','1')` 后刷新即可体验组件化侧栏；删除该键即可回退 legacy UI。

## 回归清单

1. 登录后启用新前端，确认：
   - 对话列表可加载/搜索/分页，新建/复制/删除接口有反馈；
   - 选中某个对话后，主区域显示标题与元数据；
   - `localStorage` 清除后回到旧版 UI。
2. 左侧面板刷新文件树成功，点击文件的“下载”按钮可触发下载。
3. `npm run build` 通过（已验证），构建产物位于 `static/dist/assets/`。

Phase 3 将把聊天区、消息流和快捷菜单迁移到组件化架构中。
