# 合并「批量生成」与「生成一篇」按钮设计 ## 背景 `WorkspaceToolbar.vue` 当前并排放置两个独立按钮: ```vue ``` 需求:把这两个按钮合并成一个按钮,点击后通过下拉菜单选择具体执行哪种生成方式。 ## 交互 - 合并后的主按钮文案为「生成教案 ▾」。 - 点击主按钮**只**展开/收起下拉菜单,本身不直接触发任何生成动作。 - 下拉菜单包含两个选项:「生成一篇」「批量生成」。点击任意一项后: 1. 触发对应事件(`generate` / `batchGenerate`)。 2. 自动收起菜单。 - 点击组件外部区域、或按下 `Escape` 键,菜单自动收起。 ## 组件设计 ### 新增 `src/components/GenerateMenuButton.vue` 负责封装下拉菜单的全部状态与交互,对外接口与现状保持一致: ```ts defineEmits<{ generate: [] batchGenerate: [] }>() ``` 行为: - 内部 `open = ref(false)` 控制展开状态。 - 根元素绑定 `ref`,`onMounted` 时在 `document` 上注册 `click` 监听,点击目标不在根元素内时关闭菜单;`onUnmounted` 时移除监听。 - 监听 `keydown` 的 `Escape` 关闭菜单。 - 菜单项按钮保留 `data-testid="generate"` 与 `data-testid="batch-generate"`,点击后 `emit` 对应事件并将 `open` 置为 `false`。 - 主按钮 `data-testid="generate-menu-toggle"`,点击切换 `open`,并设置 `aria-expanded` 反映状态;下拉 `