# ✅ 决策模拟 - 手动添加决策功能完成

## 📋 更新概述

在**智能决策生成-决策模拟**模块中，新增了**手动添加决策**功能，并在列表中清晰区分**自动生成**和**手动添加**的决策场景。用户现在可以根据实际需求，自行创建定制化的决策场景进行模拟测试。

---

## 🎯 核心功能

### 1. 决策来源分类 🏷️

#### **决策来源类型**

| 来源类型 | 标识 | 说明 | 图标 |
|---------|------|------|------|
| **自动生成** | `auto` | 从业务融合模块自动生成的决策 | ✨ Sparkles |
| **手动添加** | `manual` | 用户手动创建的自定义决策 | ➕ Plus |

#### **数据结构更新**

```typescript
// 决策来源类型
type DecisionSource = 'auto' | 'manual';

// 预设场景
interface PresetScenario {
  id: string;
  name: string;
  category: ScenarioCategory;
  description: string;
  inputData: { [key: string]: any };
  expectedOutcome: string;
  difficulty: 'simple' | 'medium' | 'complex';
  modelName: string;
  modelVersion: string;
  source: DecisionSource;      // ← 新增：决策来源
  createdAt?: string;           // ← 新增：创建时间
  createdBy?: string;           // ← 新增：创建人
}
```

---

### 2. 来源筛选功能 🔍

#### **筛选选项**

在场景库顶部提供了来源筛选下拉框：

```typescript
// 筛选状态
const [sourceFilter, setSourceFilter] = useState<'all' | 'auto' | 'manual'>('all');
```

**筛选选项**：
- **全部**：显示所有决策场景（默认）
- **自动生成**：只显示从业务融合自动生成的决策
- **手动添加**：只显示用户手动创建的决策

**实时统计**：
- 筛选器旁边实时显示当前筛选条件下的场景数量
- 例如："4 个场景"、"2 个场景"

---

### 3. 手动添加决策 ➕

#### **入口位置**

在**决策场景库**卡片的右上角，提供了"手动添加"按钮：

```tsx
<Button
  size="sm"
  onClick={() => setShowAddDecisionDialog(true)}
  className="bg-green-600 hover:bg-green-700"
>
  <Plus className="w-4 h-4 mr-1" />
  手动添加
</Button>
```

#### **添加对话框**

点击"手动添加"按钮后，会弹出专门的表单对话框：

**表单字段**：

| 字段名称 | 类型 | 必填 | 说明 | 示例 |
|---------|------|------|------|------|
| 决策名称 | 文本 | ✅ | 简洁明确的决策名称 | "2号大棚施肥决策" |
| 决策类别 | 下拉 | ✅ | 灌溉/病虫害/施肥/收获/气象/自定义 | "施肥" |
| 决策描述 | 多行文本 | ✅ | 详细描述决策场景的背景和目标 | "基于土壤养分检测..." |
| 模型名称 | 文本 | ✅ | 使用的模型名称 | "施肥优化模型" |
| 模型版本 | 文本 | ❌ | 模型的版本号 | "v1.0.0" |
| 难度等级 | 下拉 | ✅ | 简单/中等/复杂 | "中等" |
| 预期结果 | 文本 | ❌ | 预期产生的决策结果 | "生成精准施肥方案" |

**表单验证**：
- ✅ 决策名称不能为空
- ✅ 决策描述不能为空
- ✅ 模型名称不能为空
- ✅ 其他字段提供默认值

**自动填充**：
- 📅 创建时间：自动记录当前时间
- 👤 创建人：默认为"当前用户"
- 🆔 决策ID：自动生成（格式：`manual_时间戳`）
- 🏷️ 来源标识：自动设置为 `manual`

---

### 4. 列表显示区分 🎨

#### **场景卡片标识**

每个决策场景卡片上都会显示来源标签：

**自动生成标签**：
```tsx
<Badge variant="outline" className="text-xs bg-blue-50 text-blue-700">
  <Sparkles className="w-3 h-3 mr-1" />
  自动生成
</Badge>
```
- 🎨 样式：蓝色背景，蓝色文字
- ✨ 图标：Sparkles（闪光）
- 📍 位置：决策名称右侧

**手动添加标签**：
```tsx
<Badge variant="outline" className="text-xs bg-green-50 text-green-700">
  <Plus className="w-3 h-3 mr-1" />
  手动添加
</Badge>
```
- 🎨 样式：绿色背景，绿色文字
- ➕ 图标：Plus（加号）
- 📍 位置：决策名称右侧

---

## 📊 功能对比

### 自动生成 vs 手动添加

| 特性 | 自动生成 | 手动添加 |
|------|---------|---------|
| **数据来源** | 业务融合模块 | 用户手动创建 |
| **创建方式** | 系统自动 | 表单填写 |
| **数据完整性** | 完整（含融合过程） | 基础信息 |
| **适用场景** | 常规决策场景 | 定制化需求 |
| **修改权限** | 只读 | 可编辑（未来） |
| **删除权限** | 不可删除 | 可删除（未来） |
| **标识颜色** | 蓝色 | 绿色 |
| **标识图标** | ✨ 闪光 | ➕ 加号 |

---

## 🎬 使用流程

### 流程1：手动添加决策 ⏱️ 2分钟

```
1. 进入决策模拟页面
   ↓
2. 点击"手动添加"按钮
   ↓
3. 填写表单信息
   ├─ 决策名称 *
   ├─ 决策类别 *
   ├─ 决策描述 *
   ├─ 模型名称 *
   ├─ 模型版本
   ├─ 难度等级
   └─ 预期结果
   ↓
4. 点击"添加决策"按钮
   ↓
5. 新决策出现在场景库中
   ↓
6. 带有绿色"手动添加"标签
   ↓
7. 可以立即运行模拟测试
```

---

### 流程2：筛选决策场景 ⏱️ 10秒

```
1. 在场景库顶部找到"来源筛选"下拉框
   ↓
2. 选择筛选条件
   ├─ 全部：显示所有决策
   ├─ 自动生成：只显示自动生成的决策
   └─ 手动添加：只显示手动添加的决策
   ↓
3. 列表实时更新，显示筛选结果
   ↓
4. 右侧显示当前场景数量
```

---

### 流程3：识别决策来源 ⏱️ 5秒

```
1. 查看场景卡片
   ↓
2. 观察决策名称右侧的标签
   ├─ 蓝色 + ✨图标 = 自动生成
   └─ 绿色 + ➕图标 = 手动添加
   ↓
3. 快速识别决策来源
```

---

## 🧪 快速测试指南（5分钟）

### 测试1: 手动添加决策 ⏱️ 2分钟

**操作步骤**：
1. 访问 **AI作物模型** → **智能决策生成** → **决策模拟**
2. 点击场景库右上角的 **"手动添加"** 按钮
3. 填写表单信息：
   ```
   决策名称：2号大棚精准施肥决策
   决策类别：施肥
   决策描述：基于土壤养分检测和作物需求分析，生成精准施肥方案
   模型名称：施肥优化模型
   模型版本：v1.2.0
   难度等级：中等
   预期结果：生成NPK配比方案和施肥时间建议
   ```
4. 点击 **"添加决策"** 按钮

**预期结果**：
- ✅ 弹出成功提示："手动添加决策成功！"
- ✅ 对话框自动关闭
- ✅ 场景库中出现新决策
- ✅ 新决策带有绿色"手动添加"标签
- ✅ 场景数量增加1个

**截图位置**：
- 📷 手动添加对话框
- 📷 成功添加后的场景卡片
- 📷 绿色"手动添加"标签

---

### 测试2: 来源筛选功能 ⏱️ 1分钟

**操作步骤**：
1. 在场景库顶部找到 **"来源筛选"** 下拉框
2. 选择 **"自动生成"**
3. 观察列表变化
4. 选择 **"手动添加"**
5. 观察列表变化
6. 选择 **"全部"**
7. 观察列表变化

**预期结果**：

| 筛选条件 | 显示场景 | 场景数量 |
|---------|---------|---------|
| 全部 | 所有决策（4个自动 + 1个手动） | 5 个场景 |
| 自动生成 | 只显示带蓝色标签的决策 | 4 个场景 |
| 手动添加 | 只显示带绿色标签的决策 | 1 个场景 |

**检查清单**：
- [ ] 筛选器能正常切换
- [ ] 列表实时更新
- [ ] 场景数量统计正确
- [ ] 筛选逻辑准确

---

### 测试3: 标签显示验证 ⏱️ 1分钟

**操作步骤**：
1. 在场景库中找到所有决策卡片
2. 逐个检查决策名称右侧的标签
3. 验证标签颜色和图标

**预期结果**：

**自动生成决策**（4个）：
```
✅ 3号大棚灌溉决策
   └─ [蓝色标签] ✨ 自动生成

✅ 番茄早疫病防治决策
   └─ [蓝色标签] ✨ 自动生成

✅ 番茄高产栽培决策
   └─ [蓝色标签] ✨ 自动生成

✅ 1号大棚温度调控决策
   └─ [蓝色标签] ✨ 自动生成
```

**手动添加决策**（1个）：
```
✅ 2号大棚精准施肥决策
   └─ [绿色标签] ➕ 手动添加
```

**检查清单**：
- [ ] 所有决策都有来源标签
- [ ] 蓝色标签使用 ✨ 图标
- [ ] 绿色标签使用 ➕ 图标
- [ ] 标签位置一致（名称右侧）
- [ ] 标签文字清晰可读

---

### 测试4: 表单验证测试 ⏱️ 1分钟

**操作步骤**：
1. 点击 **"手动添加"** 按钮
2. 不填写任何信息，直接点击 **"添加决策"**
3. 观察错误提示
4. 只填写决策名称，点击 **"添加决策"**
5. 观察错误提示
6. 填写完整信息，点击 **"添加决策"**
7. 观察成功提示

**预期结果**：

| 测试场景 | 预期提示 |
|---------|---------|
| 空表单 | ❌ "请输入决策名称" |
| 只填决策名称 | ❌ "请输入决策描述" |
| 只填名称+描述 | ❌ "请输入模型名称" |
| 填写完整 | ✅ "手动添加决策成功！" |

**检查清单**：
- [ ] 必填字段验证生效
- [ ] 错误提示清晰明确
- [ ] 成功后对话框自动关闭
- [ ] 成功后表单自动重置

---

## 📝 数据示例

### 示例1：自动生成决策

```json
{
  "id": "preset_1",
  "name": "3号大棚灌溉决策",
  "category": "irrigation",
  "description": "综合分析土壤湿度、天气预报、作物需水量等多维数据，生成精准灌溉方案",
  "source": "auto",
  "createdAt": "2024-10-23 10:35:00",
  "inputData": {
    "cropType": "番茄",
    "variety": "金粉808",
    "growthStage": "开花期",
    "soilMoisture": 35,
    "temperature": 28
  },
  "expectedOutcome": "建议在今天傍晚17:00-18:00进行灌溉，灌溉量120升",
  "difficulty": "medium",
  "modelName": "灌溉需求预测模型",
  "modelVersion": "v2.1.3"
}
```

---

### 示例2：手动添加决策

```json
{
  "id": "manual_1729656789012",
  "name": "2号大棚精准施肥决策",
  "category": "fertilizer",
  "description": "基于土壤养分检测和作物需求分析，生成精准施肥方案",
  "source": "manual",
  "createdAt": "2024-10-23 14:26:29",
  "createdBy": "当前用户",
  "inputData": {},
  "expectedOutcome": "生成NPK配比方案和施肥时间建议",
  "difficulty": "medium",
  "modelName": "施肥优化模型",
  "modelVersion": "v1.2.0"
}
```

---

## 🎨 UI/UX 设计

### 来源筛选器设计

```tsx
<div className="flex items-center gap-2 mr-2">
  <Label className="text-xs">来源筛选：</Label>
  <select
    value={sourceFilter}
    onChange={(e) => setSourceFilter(e.target.value)}
    className="text-sm border border-gray-300 rounded px-2 py-1"
  >
    <option value="all">全部</option>
    <option value="auto">自动生成</option>
    <option value="manual">手动添加</option>
  </select>
</div>
```

**设计特点**：
- 📍 位置：场景库标题右侧
- 🎨 样式：简洁的下拉框
- 📊 统计：实时显示场景数量
- ➕ 按钮：紧邻筛选器的"手动添加"按钮

---

### 来源标签设计

**自动生成标签**：
- 🎨 背景色：`bg-blue-50`（浅蓝色）
- 📝 文字色：`text-blue-700`（深蓝色）
- ✨ 图标：Sparkles（闪光）
- 📏 尺寸：`text-xs`（小号字体）

**手动添加标签**：
- 🎨 背景色：`bg-green-50`（浅绿色）
- 📝 文字色：`text-green-700`（深绿色）
- ➕ 图标：Plus（加号）
- 📏 尺寸：`text-xs`（小号字体）

**一致性**：
- 📍 位置：决策名称右侧
- 🎯 对齐：垂直居中
- 📐 间距：与名称间隔 `gap-2`

---

### 手动添加对话框设计

**对话框尺寸**：
- 📐 宽度：`max-w-2xl`（中等宽度）
- 📏 高度：`max-h-[90vh]`（最大90%视口高度）
- 📜 滚动：内容超出时自动滚动

**表单布局**：
- 📋 第1行：决策名称（1/2宽） + 决策类别（1/2宽）
- 📋 第2行：决策描述（全宽，多行）
- 📋 第3行：模型名称（1/3宽） + 模型版本（1/3宽） + 难度等级（1/3宽）
- 📋 第4行：预期结果（全宽）
- 💡 提示框：填写说明（黄色提示框）

**按钮设计**：
- ⬜ 取消按钮：`variant="outline"`（灰色边框）
- ✅ 添加按钮：`bg-green-600`（绿色背景） + Plus图标

---

## 💡 最佳实践

### 1. 场景命名规范

✅ **推荐命名方式**：
```
[地块/大棚] + [作物] + [操作类型] + 决策

示例：
- ✅ "3号大棚灌溉决策"
- ✅ "A区番茄施肥决策"
- ✅ "1号温室温控决策"
```

❌ **不推荐命名方式**：
```
- ❌ "测试决策1"（不具体）
- ❌ "我的决策"（无意义）
- ❌ "灌溉"（过于简单）
```

---

### 2. 决策描述编写

✅ **优秀描述示例**：
```
基于土壤养分检测和作物需求分析，综合考虑土壤pH值、
氮磷钾含量、有机质含量等指标，结合作物生长阶段和
目标产量，生成科学合理的施肥方案，包括肥料配比、
施肥时间、施肥量等关键参数。
```

**编写要点**：
- 📊 说明数据来源
- 🎯 明确决策目标
- 🔍 列出考虑因素
- 📋 描述输出内容

---

### 3. 模型选择建议

| 决策类别 | 推荐模型 | 模型版本 |
|---------|---------|---------|
| 灌溉 | 灌溉需求预测模型 | v2.x |
| 病虫害 | 病虫害识别模型 | v3.x |
| 施肥 | 施肥优化模型 | v1.x |
| 收获 | 产量预测模型 | v2.x |
| 气象 | 环境监测模型 | v1.x |

---

### 4. 难度等级判定

| 难度 | 判定标准 | 典型场景 |
|------|---------|---------|
| **简单** | 单一数据源、少量参数、直接决策 | 温度报警、湿度提醒 |
| **中等** | 多个数据源、多维参数、需要计算 | 灌溉决策、施肥方案 |
| **复杂** | 复杂数据融合、多模型协同、优化求解 | 高产栽培、综合管理 |

---

## 🔄 数据流程

### 手动添加决策的完整流程

```
1. 用户点击"手动添加"按钮
   ↓
2. 弹出表单对话框
   ↓
3. 用户填写决策信息
   ├─ 决策名称
   ├─ 决策类别
   ├─ 决策描述
   ├─ 模型信息
   └─ 其他参数
   ↓
4. 用户点击"添加决策"按钮
   ↓
5. 系统进行表单验证
   ├─ 检查必填字段
   └─ 验证数据格式
   ↓
6. 生成新决策对象
   ├─ 自动生成ID（manual_时间戳）
   ├─ 设置来源为 'manual'
   ├─ 记录创建时间
   └─ 记录创建人
   ↓
7. 添加到场景列表
   ↓
8. 更新UI显示
   ├─ 关闭对话框
   ├─ 重置表单
   ├─ 显示成功提示
   └─ 刷新场景库
   ↓
9. 新决策可立即使用
```

---

## 📊 统计与监控

### 场景统计维度

```tsx
// 按来源统计
const autoCount = presetScenarios.filter(s => s.source === 'auto').length;
const manualCount = presetScenarios.filter(s => s.source === 'manual').length;

// 按类别统计
const categoryStats = {
  irrigation: presetScenarios.filter(s => s.category === 'irrigation').length,
  pest: presetScenarios.filter(s => s.category === 'pest').length,
  fertilizer: presetScenarios.filter(s => s.category === 'fertilizer').length,
  // ...
};

// 按难度统计
const difficultyStats = {
  simple: presetScenarios.filter(s => s.difficulty === 'simple').length,
  medium: presetScenarios.filter(s => s.difficulty === 'medium').length,
  complex: presetScenarios.filter(s => s.difficulty === 'complex').length,
};
```

---

## ⚠️ 注意事项

### 1. 数据持久化

当前实现中，手动添加的决策存储在组件的state中：
```typescript
const [presetScenarios, setPresetScenarios] = useState<PresetScenario[]>([...]);
```

**⚠️ 重要提醒**：
- 刷新页面后，手动添加的决策会丢失
- 建议未来集成后端API，实现数据持久化
- 可以考虑使用localStorage作为临时存储方案

---

### 2. 输入数据结构

手动添加时，`inputData`字段默认为空对象：
```typescript
inputData: {}
```

**改进建议**：
- 未来可以根据决策类别，提供预设的输入数据字段
- 例如：灌溉决策需要土壤湿度、温度等字段
- 可以添加动态表单，让用户填写具体的输入参数

---

### 3. 权限控制

当前所有用户都可以手动添加决策。

**未来扩展**：
- 可以添加权限控制，限制哪些用户可以手动添加
- 可以添加审核机制，手动添加的决策需要审核通过
- 可以添加编辑和删除功能，只允许创建人修改

---

### 4. 决策复制功能

**未来建议**：
- 添加"复制决策"功能，快速创建相似决策
- 添加"基于自动决策创建"功能，基于自动决策修改参数
- 添加"导入/导出"功能，批量管理决策

---

## 🎉 更新总结

### ✅ 已完成功能

1. **✅ 决策来源分类**
   - 添加 `source` 字段区分自动生成和手动添加
   - 添加 `createdAt` 和 `createdBy` 字段记录创建信息

2. **✅ 来源筛选功能**
   - 提供"全部"、"自动生成"、"手动添加"三种筛选选项
   - 实时统计当前筛选条件下的场景数量

3. **✅ 手动添加功能**
   - 提供完整的表单对话框
   - 支持填写决策的所有基本信息
   - 实现表单验证和错误提示

4. **✅ 列表显示区分**
   - 在场景卡片上显示来源标签
   - 自动生成：蓝色标签 + ✨ 图标
   - 手动添加：绿色标签 + ➕ 图标

5. **✅ 用户交互优化**
   - 添加成功后自动关闭对话框
   - 表单自动重置，方便连续添加
   - 显示友好的成功提示

---

### 📈 数据流向

```
┌─────────────────────────────────────────────────────┐
│           决策场景库 (presetScenarios)               │
└─────────────────────────────────────────────────────┘
                      │
         ┌────────────┴────────────┐
         ▼                         ▼
┌──────────────────┐      ┌──────────────────┐
│   自动生成决策    │      │   手动添加决策    │
│   source: 'auto' │      │  source: 'manual'│
├──────────────────┤      ├──────────────────┤
│ 来自业务融合模块  │      │ 用户手动创建     │
│ 数据完整         │      │ 自定义场景       │
│ 只读             │      │ 可编辑（未来）   │
└──────────────────┘      └──────────────────┘
         │                         │
         └────────────┬────────────┘
                      ▼
         ┌────────────────────────┐
         │      来源筛选器         │
         ├────────────────────────┤
         │ • 全部                 │
         │ • 自动生成             │
         │ • 手动添加             │
         └────────────────────────┘
                      │
                      ▼
         ┌────────────────────────┐
         │    场景列表显示         │
         ├────────────────────────┤
         │ • 蓝色标签（自动）     │
         │ • 绿色标签（手动）     │
         └────────────────────────┘
```

---

### 🎯 使用场景示例

#### 场景1：测试新决策算法

**需求**：
- 研发团队开发了新的施肥优化算法
- 需要在实际应用前进行模拟测试

**操作**：
1. 点击"手动添加"按钮
2. 填写新算法的信息
3. 添加决策到场景库
4. 运行模拟测试
5. 查看决策效果评估

---

#### 场景2：定制化决策需求

**需求**：
- 某个特殊地块需要定制化的管理决策
- 标准的自动决策无法满足需求

**操作**：
1. 基于实际需求手动添加决策
2. 填写地块特有的参数和条件
3. 运行模拟查看效果
4. 根据模拟结果优化决策参数

---

#### 场景3：决策方案对比

**需求**：
- 对比自动生成和人工经验的决策效果
- 评估AI决策的准确性

**操作**：
1. 查看自动生成的决策（筛选"自动生成"）
2. 手动添加基于人工经验的决策
3. 运行两种决策的模拟测试
4. 对比评估结果，选择最优方案

---

## 🔮 未来规划

### Phase 1: 数据持久化
- [ ] 集成后端API
- [ ] 实现决策的增删改查
- [ ] 支持决策数据导入导出

### Phase 2: 高级编辑功能
- [ ] 支持编辑已添加的决策
- [ ] 支持删除手动添加的决策
- [ ] 支持决策版本管理

### Phase 3: 智能辅助
- [ ] 根据决策类别智能推荐输入字段
- [ ] 提供决策模板库
- [ ] 支持从历史决策复制创建

### Phase 4: 协作功能
- [ ] 支持多人协作编辑
- [ ] 添加决策审核机制
- [ ] 支持决策分享和评论

---

## 📚 相关文档

- [DECISION_SIMULATION_DATA_UPDATE.md](./DECISION_SIMULATION_DATA_UPDATE.md) - 决策数据源更新说明
- [DECISION_SIMULATION_COMPLETE.md](./DECISION_SIMULATION_COMPLETE.md) - 决策模拟功能完整文档
- [DECISION_SIMULATION_QUICK_TEST_V3.md](./DECISION_SIMULATION_QUICK_TEST_V3.md) - 快速测试指南V3

---

**更新时间**: 2024-10-23  
**影响模块**: 决策模拟  
**功能**: 手动添加决策 + 来源筛选 + 列表区分  
**状态**: ✅ 已完成

---

## 🎊 完成截图对照

### Before（更新前）
```
┌────────────────────────────────────────────┐
│  决策场景库                    [4 个场景]  │
├────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐              │
│  │ 场景1    │  │ 场景2    │              │
│  │ (无标签) │  │ (无标签) │              │
│  └──────────┘  └──────────┘              │
│  ┌──────────┐  ┌──────────┐              │
│  │ 场景3    │  │ 场景4    │              │
│  │ (无标签) │  │ (无标签) │              │
│  └──────────┘  └──────────┘              │
└────────────────────────────────────────────┘
```

### After（更新后）
```
┌──────────────────────────────────────────────────────┐
│  决策场景库        来源筛选: [全部 ▾]  [5 个场景]   │
│                                      [➕ 手动添加]   │
├──────────────────────────────────────────────────────┤
│  ┌────────────────┐  ┌────────────────┐            │
│  │ 场景1 [✨自动] │  │ 场景2 [✨自动] │            │
│  │ (蓝色标签)     │  │ (蓝色标签)     │            │
│  └────────────────┘  └────────────────┘            │
│  ┌────────────────┐  ┌────────────────┐            │
│  │ 场景3 [✨自动] │  │ 场景4 [✨自动] │            │
│  │ (蓝色标签)     │  │ (蓝色标签)     │            │
│  └────────────────┘  └────────────────┘            │
│  ┌────────────────┐                                │
│  │ 场景5 [➕手动] │                                │
│  │ (绿色标签)     │                                │
│  └────────────────┘                                │
└──────────────────────────────────────────────────────┘
```

**主要变化**：
- ✅ 添加了来源筛选下拉框
- ✅ 添加了"手动添加"按钮
- ✅ 每个场景都有来源标签（自动/手动）
- ✅ 支持按来源筛选场景
- ✅ 场景数量实时统计

🎉 **功能更加完善，用户体验显著提升！**
