# 快捷对话按钮栏设计文档

**日期**: 2026-04-01
**状态**: 待审查
**作者**: Claude

## 概述

在 AI 聊天页面底部输入框上方添加快捷对话按钮栏，提供 4 个常用功能的快速入口，用户点击后自动发送预设消息给 AI。

## 功能需求

### 核心功能
1. 在图片预览区域和输入框之间显示快捷按钮栏
2. 提供 4 个快捷按钮：我的账单、我要报修、工单查询、社区服务
3. 点击按钮后自动发送预设的详细问题给 AI
4. 快捷按钮栏始终显示，不受聊天状态影响

### 按钮内容映射

| 按钮文字 | 发送消息内容 |
|---------|------------|
| 我的账单 | 请帮我查询我的账单信息 |
| 我要报修 | 我要报修 |
| 工单查询 | 请帮我查询我的工单 |
| 社区服务 | 请提供社区服务信息 |

## 设计方案

### 1. 布局结构

```
.chat-input-area
  ├─ .image-preview-area (条件显示：selectedImages.length > 0)
  ├─ .quick-actions-bar (始终显示) ← 新增
  └─ .input-container
      ├─ input (message-input)
      ├─ button (upload-button)
      └─ button (send-button)
```

### 2. 数据结构

```typescript
interface QuickAction {
  label: string    // 按钮显示文字
  message: string  // 点击后发送的消息内容
}

const quickActions: QuickAction[] = [
  { label: '我的账单', message: '请帮我查询我的账单信息' },
  { label: '我要报修', message: '我要报修' },
  { label: '工单查询', message: '请帮我查询我的工单' },
  { label: '社区服务', message: '请提供社区服务信息' }
]
```

### 3. 交互逻辑

```typescript
// 处理快捷按钮点击
const handleQuickAction = (action: QuickAction) => {
  inputMessage.value = action.message
  handleSendMessage()
}
```

### 4. 样式设计

#### 快捷按钮栏容器 (`.quick-actions-bar`)
- 布局：flex row，自动换行
- 间距：上下 16rpx padding
- 对齐：居左或居中
- 背景：透明（继承父容器）

#### 快捷按钮 (`.quick-action-btn`)
- 尺寸：高度 64rpx，宽度自适应内容
- 内边距：16rpx 24rpx
- 背景色：#ffffff（白色）
- 边框：1px solid #e5e5e5（浅灰色）
- 圆角：12rpx
- 字体大小：26rpx
- 字体颜色：#333333（深灰）
- 字体粗细：normal（400）
- 间距：左右按钮之间 16rpx gap
- 过渡动画：transform 0.2s ease
- 点击态：scale(0.98)，背景色 #f8f8f8

### 5. 代码修改位置

**文件**: `/src/pages/ai/chat.vue`

#### 模板修改（第 172-173 行之间）
```vue
<!-- 图片预览区域 -->
<view v-if="selectedImages.length > 0" class="image-preview-area">
  <!-- 现有内容 -->
</view>

<!-- 快捷按钮栏 - 新增 -->
<view class="quick-actions-bar">
  <view
    v-for="(action, index) in quickActions"
    :key="index"
    class="quick-action-btn"
    @click="handleQuickAction(action)"
  >
    <text>{{ action.label }}</text>
  </view>
</view>

<!-- 输入框容器 -->
<view class="input-container">
  <!-- 现有内容 -->
</view>
```

#### 脚本修改（在 setup 中添加）
```typescript
// 快捷按钮数据定义
const quickActions: QuickAction[] = [
  { label: '我的账单', message: '请帮我查询我的账单信息' },
  { label: '我要报修', message: '我要报修' },
  { label: '工单查询', message: '请帮我查询我的工单' },
  { label: '社区服务', message: '请提供社区服务信息' }
]

// 处理快捷按钮点击
const handleQuickAction = (action: QuickAction) => {
  inputMessage.value = action.message
  handleSendMessage()
}
```

#### 样式修改（在 style 中添加）
```scss
.quick-actions-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 16rpx;
  padding: 16rpx 0;
}

.quick-action-btn {
  height: 64rpx;
  padding: 0 24rpx;
  background-color: #ffffff;
  border: 1px solid #e5e5e5;
  border-radius: 12rpx;
  font-size: 26rpx;
  color: #333333;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.2s ease;
  white-space: nowrap;

  &:active {
    transform: scale(0.98);
    background-color: #f8f8f8;
  }

  text {
    display: block;
  }
}
```

## 实现要点

1. **不删除任何文件**：仅在现有 chat.vue 文件中添加代码
2. **保持现有功能**：不影响现有的图片上传、消息发送等功能
3. **响应式布局**：按钮横向排列，宽度不足时自动换行
4. **用户体验**：点击反馈动画，发送消息时显示 loading 状态
5. **代码风格一致**：遵循现有代码的命名规范和结构

## 测试要点

1. 快捷按钮始终显示
2. 点击按钮后消息正确发送
3. 按钮布局正常（不同屏幕宽度）
4. 点击动画效果正常
5. 发送消息时 loading 状态正常
6. 与现有功能无冲突（图片上传、输入框等）

## 实现范围

**包含**：
- 在 chat.vue 中添加快捷按钮栏 UI
- 实现点击快捷按钮发送消息的逻辑
- 添加快捷按钮的样式

**不包含**：
- 修改后端 API
- 修改其他页面
- 提取快捷按钮为独立组件
- 添加快捷按钮配置功能

## 设计自检

- ✅ 无占位符或 TBD 内容
- ✅ 无内部矛盾
- ✅ 范围明确且聚焦
- ✅ 需求清晰无歧义
- ✅ 布局位置明确（图片预览和输入框之间）
- ✅ 样式规格完整
- ✅ 代码修改位置明确
