# 侧边栏导航系统实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 将现有的顶部水平 header 导航重构为左侧固定侧边栏导航系统,支持展开/收起、状态记忆、响应式适配,并保持与现有白色体系设计规范的一致性。
**Architecture:** 采用 Vue 3 Composition API + Flexbox 布局实现经典的左侧固定侧边栏模式。通过 `useSidebar` composable 集中管理状态(展开/收起、移动端检测、localStorage 持久化),将侧边栏拆分为 5 个职责单一的子组件(品牌区、导航菜单、导航项、用户信息区、移动端按钮),确保代码可维护性和可测试性。
**Tech Stack:**
- Vue 3 (Composition API, `
```
- [ ] **Step 2: 手动验证**
在 `Home.vue` 中临时导入并渲染该组件,检查:
- 展开时显示完整文字
- 收起时文字隐藏
- 点击折叠按钮触发事件
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/SidebarHeader.vue
git commit -m "feat: add SidebarHeader component with brand area and collapse button"
```
---
## Task 4: 实现 SidebarNavItem 组件
**Files:**
- Create: `src/components/layout/SidebarNavItem.vue`
**目标**: 实现单个导航项,支持激活状态、悬停效果、Tooltip(收起状态)
- [ ] **Step 1: 编写组件完整代码**
```vue
```
**注意**: 当前实现中 Tooltip 通过 CSS `:hover` 显示。如果需要更精确的控制(延迟显示等),可以在 `@mouseenter` 和 `@mouseleave` 事件中设置 `isHovering`。
- [ ] **Step 2: 验证交互状态**
在临时测试页面中渲染多个实例:
- 默认状态:灰色图标+文字
- 悬停状态:背景色变浅
- 激活状态:蓝色背景 + 左侧指示条
- 收起状态:仅显示图标,悬停显示 tooltip
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/SidebarNavItem.vue
git commit -m "feat: add SidebarNavItem with active state and tooltip support"
```
---
## Task 5: 实现 SidebarNav 组件
**Files:**
- Create: `src/components/layout/SidebarNav.vue`
**目标**: 导航菜单容器,遍历渲染导航项列表
- [ ] **Step 1: 编写组件代码**
```vue
```
- [ ] **Step 2: 集成测试**
在临时页面中使用真实的导航项配置数据测试:
```javascript
const testItems = [
{ key: 'read', label: '文件查看', icon: '📄' },
{ key: 'manage', label: '文件管理', icon: '📁' },
{ key: 'qa', label: '知识问答', icon: '💬' }
]
```
预期:正确渲染 3 个导航项,点击可触发 select 事件
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/SidebarNav.vue
git commit -m "feat: add SidebarNav container component"
```
---
## Task 6: 实现 SidebarUser 组件
**Files:**
- Create: `src/components/layout/SidebarUser.vue`
**目标**: 用户信息展示区,包含头像、用户名、角色、操作按钮
- [ ] **Step 1: 编写组件代码**
```vue
```
- [ ] **Step 2: 验证用户信息显示**
传入模拟数据:
```javascript
{
userInfo: { realName: '张三' },
roleLabel: '系统管理员'
}
```
预期:显示头像(字母"张")、用户名、角色标签
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/SidebarUser.vue
git commit -m "feat: add SidebarUser component with avatar and actions"
```
---
## Task 7: 实现 MobileMenuButton 组件
**Files:**
- Create: `src/components/layout/MobileMenuButton.vue`
**目标**: 移动端的汉堡菜单按钮,仅在屏幕宽度 < 768px 时显示
- [ ] **Step 1: 编写组件代码**
```vue
```
- [ ] **Step 2: 验证响应式行为**
调整浏览器窗口宽度:
- ≥ 768px:按钮隐藏
- < 768px:按钮可见且可点击
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/MobileMenuButton.vue
git commit -m "feat: add MobileMenuButton for responsive navigation"
```
---
## Task 8: 实现 AppSidebar 主组件
**Files:**
- Create: `src/components/layout/AppSidebar.vue`
**目标**: 整合所有子组件,实现完整的侧边栏功能,包括桌面端固定模式和移动端 overlay 模式
- [ ] **Step 1: 编写主组件代码**
```vue
```
- [ ] **Step 2: 集成测试**
在临时页面中组装所有子组件,测试:
- 展开/收起动画流畅
- 导航点击事件正确传递
- 用户信息正确显示
- 移动端模式下 overlay 行为正常
- [ ] **Step 3: Commit**
```bash
git add src/components/layout/AppSidebar.vue
git commit -m "feat: add AppSidebar main container with responsive support"
```
---
## Task 9: 改造 Home.vue - 集成侧边栏布局
**Files:**
- Modify: `src/views/Home.vue`
**目标**: 移除现有的 ``,替换为新的侧边栏布局系统
- [ ] **Step 1: 备份当前 Home.vue**
```bash
cp src/views/Home.vue src/views/Home.vue.backup
```
- [ ] **Step 2: 重写模板部分**
将现有的 `` 替换为:
```vue
```
**关键变更说明**:
- ❌ 删除 `` 和 ``
- ✅ 新增 `` 作为根容器
- ✅ 引入 `
` 和 ``
- ✅ 主内容区从 `` 改为 `` 并添加动态类名
- [ ] **Step 3: 更新脚本部分**
在 `