# ✅ 作业方案下发 - 计划开始时间功能

## 🎯 功能说明

**在作业方案下发功能中增加"计划开始时间"字段，便于提前规划作业时间**

---

## 📦 功能更新

### 1️⃣ **数据结构更新**

在 `DispatchRecord` 接口中添加计划开始时间字段：

```typescript
interface DispatchRecord {
  id: string;
  dispatchNumber: string;
  machineryId: string;
  machineryName: string;
  driverId?: string;
  driverName?: string;
  routePlanId?: string;
  routePlanName?: string;
  taskType: string;
  description: string;
  plannedStartTime?: string;  // ✅ 新增：计划开始时间
  parameters: {
    targetSpeed?: number;
    workingWidth?: number;
    workingDepth?: number;
    rowSpacing?: number;
    seedingRate?: number;
    fertilizerRate?: number;
    customParams?: Record<string, any>;
  };
  protocol: Protocol;
  status: DispatchStatus;
  dispatchedAt: string;
  receivedAt?: string;
  executedAt?: string;
  // ... 其他字段
}
```

### 2️⃣ **新建下发对话框**

在新建下发对话框中添加计划开始时间输入框：

```tsx
<div>
  <Label>计划开始时间</Label>
  <Input
    type="datetime-local"
    value={plannedStartTime}
    onChange={(e) => setPlannedStartTime(e.target.value)}
    placeholder="选择计划开始时间（可选）"
  />
</div>
```

### 3️⃣ **详情对话框显示**

在下发详情中显示计划开始时间：

```tsx
<div className="flex justify-between py-2 border-b">
  <span className="text-muted-foreground">计划开始时间:</span>
  <span className="text-xs">
    {selectedDispatch.plannedStartTime ? 
      new Date(selectedDispatch.plannedStartTime).toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit'
      }) : 
      <span className="text-muted-foreground">-</span>
    }
  </span>
</div>
```

### 4️⃣ **示例数据更新**

更新示例数据包含计划开始时间：

```typescript
{
  id: 'dispatch-1',
  dispatchNumber: 'D20251017001',
  machineryName: '约翰迪尔拖拉机',
  taskType: '耕地',
  description: '深耕作业，准备春播',
  plannedStartTime: '2025-10-18T08:00:00',  // ✅ 计划明天早上8点开始
  // ...
}
```

---

## 🎨 界面展示

### 新建下发对话框

```
┌──────────────────────────────────────────┐
│  新建作业方案下发                         │
├──────────────────────────────────────────┤
│                                          │
│  [农机设备 *]  [约翰迪尔拖拉机 ▼]        │
│  [路线方案]    [东地1号作业路线 ▼]       │
│                                          │
│  [任务类型 *]  [耕地 ▼]                  │
│  [优先级]      [中 ▼]                    │
│                                          │
│  [任务描述]                              │
│  ┌────────────────────────────┐         │
│  │深耕作业，准备春播           │         │
│  └────────────────────────────┘         │
│                                          │
│  [计划开始时间] ✅ 新增                  │
│  ┌────────────────────────────┐         │
│  │📅 2025-10-18  🕐 08:00     │         │
│  └────────────────────────────┘         │
│                                          │
│  ---- 作业参数 ----                      │
│  [目标速率]  [5.0 km/h]                 │
│  [作业幅宽]  [2.5 m]                    │
│  [作业深度]  [25 cm]                    │
│  [行距]      [3.0 m]                    │
│                                          │
│  [通信协议]  [MQTT ▼]                   │
│                                          │
│              [取消]  [立即下发]          │
└──────────────────────────────────────────┘
```

### 下发详情对话框

```
┌──────────────────────────────────────────┐
│  下发详情                                 │
├──────────────────────────────────────────┤
│                                          │
│  下发编号:      D20251017001             │
│  农机设备:      约翰迪尔拖拉机           │
│  机手:          张三                     │
│  任务类型:      耕地                     │
│  路线方案:      东地1号作业路线          │
│  计划开始时间:  2025-10-18 08:00 ✅      │
│  优先级:        高                       │
│  通信协议:      MQTT                     │
│  下发时间:      2025-10-17 08:00:00     │
│  接收时间:      2025-10-17 08:01:30     │
│  执行时间:      2025-10-17 08:05:00     │
│                                          │
│  ---- 作业参数 ----                      │
│  目标速率:      5.0 km/h                │
│  作业幅宽:      2.5 m                   │
│  作业深度:      25 cm                   │
│                                          │
│  ---- 执行状态 ----                      │
│  当前状态:      已执行 ✅                │
│  设备状态:      在线 🟢                  │
│  信号强度:      85%                     │
│  重试次数:      0/3                     │
│                                          │
│              [关闭]  [导出记录]          │
└──────────────────────────────────────────┘
```

---

## 💡 使用场景

### 场景1: 提前规划明日作业

```
需求：
今天下午规划明天早上的耕地作业

操作：
1. 点击"新建下发"
2. 选择农机：约翰迪尔拖拉机
3. 选择任务类型：耕地
4. 设置计划开始时间：明天 08:00 ✅
5. 设置作业参数
6. 点击"立即下发"

结果：
✅ 下发指令创建成功
✅ 计划开始时间：2025-10-18 08:00
✅ 机手提前知道明天的作业安排
```

### 场景2: 安排多个时间段作业

```
需求：
安排全天多个作业任务

上午作业：
- 计划开始时间：08:00
- 任务：耕地
- 农机：拖拉机1号

下午作业：
- 计划开始时间：14:00
- 任务：播种
- 农机：播种机2号

晚间作业：
- 计划开始时间：18:00
- 任务：施肥
- 农机：施肥机3号

结果：
✅ 三个任务都设置了明确的计划时间
✅ 机手可以按时间表执行
✅ 提高作业效率和组织性
```

### 场景3: 应急作业（不设置计划时间）

```
需求：
紧急抢收，立即作业

操作：
1. 点击"新建下发"
2. 选择农机
3. 任务类型：收获
4. 优先级：紧急
5. 计划开始时间：不填写（立即开始）✅
6. 点击"立即下发"

结果：
✅ 下发指令立即创建
✅ 计划开始时间：-（未设置）
✅ 机手收到后立即开始作业
```

---

## 🎯 字段特性

### 可选字段

```
计划开始时间是可选字段：
- ✅ 可以不填写（立即作业）
- ✅ 可以设置未来时间（计划作业）
- ✅ 可以设置今天稍后时间（延迟作业）
```

### 时间格式

```
输入格式：
datetime-local 类型

显示格式：
2025-10-18 08:00

存储格式：
ISO 8601 格式
"2025-10-18T08:00:00"
```

### 时间范围

```
建议范围：
- 最早：当前时间
- 最晚：未来7天内

实际使用：
- 当天作业：当天时间
- 明日作业：明天时间
- 计划作业：未来任意时间
```

---

## 📊 数据示例

### 示例1: 常规计划作业

```json
{
  "id": "dispatch-1",
  "dispatchNumber": "D20251017001",
  "machineryName": "约翰迪尔拖拉机",
  "taskType": "耕地",
  "plannedStartTime": "2025-10-18T08:00:00",
  "status": "已发送",
  "priority": "high"
}
```

### 示例2: 立即作业（未设置计划时间）

```json
{
  "id": "dispatch-2",
  "dispatchNumber": "D20251017002",
  "machineryName": "久保田播种机",
  "taskType": "播种",
  "plannedStartTime": undefined,
  "status": "已执行",
  "priority": "urgent"
}
```

### 示例3: 下午计划作业

```json
{
  "id": "dispatch-3",
  "dispatchNumber": "D20251017003",
  "machineryName": "雷沃施肥机",
  "taskType": "施肥",
  "plannedStartTime": "2025-10-17T14:30:00",
  "status": "待发送",
  "priority": "medium"
}
```

---

## 🔧 技术实现

### 状态管理

```typescript
const [plannedStartTime, setPlannedStartTime] = useState<string>('');
```

### 输入控件

```tsx
<Input
  type="datetime-local"
  value={plannedStartTime}
  onChange={(e) => setPlannedStartTime(e.target.value)}
  placeholder="选择计划开始时间（可选）"
/>
```

### 数据保存

```typescript
const newDispatch: DispatchRecord = {
  // ... 其他字段
  plannedStartTime: plannedStartTime || undefined,
  // ... 
};
```

### 显示格式化

```typescript
{selectedDispatch.plannedStartTime ? 
  new Date(selectedDispatch.plannedStartTime).toLocaleString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit'
  }) : 
  <span className="text-muted-foreground">-</span>
}
```

---

## 📋 字段说明对比

### 更新前

```
下发记录字段：
- 下发编号
- 农机设备
- 机手
- 任务类型
- 路线方案
- 优先级
- 通信协议
- 下发时间      （系统自动记录）
- 接收时间      （设备反馈）
- 执行时间      （设备反馈）
```

### 更新后

```
下发记录字段：
- 下发编号
- 农机设备
- 机手
- 任务类型
- 路线方案
- 计划开始时间  ✅ 新增（用户设置）
- 优先级
- 通信协议
- 下发时间      （系统自动记录）
- 接收时间      （设备反馈）
- 执行时间      （设备反馈）
```

---

## 🎯 核心价值

### 1. 提前规划

```
价值：
✅ 可以提前安排第二天的作业
✅ 可以规划全天多个作业任务
✅ 提高作业组织性和计划性
```

### 2. 时间管理

```
价值：
✅ 明确的时间节点
✅ 避免时间冲突
✅ 优化资源调度
```

### 3. 灵活应对

```
价值：
✅ 可选字段，不强制填写
✅ 支持立即作业
✅ 支持计划作业
```

### 4. 数据追溯

```
价值：
✅ 记录计划时间
✅ 对比实际执行时间
✅ 分析作业准时率
```

---

## 🧪 测试用例

### 测试1: 设置明天的计划时间

```
操作：
1. 新建下发
2. 选择农机和任务
3. 计划开始时间：明天 08:00
4. 点击"立即下发"

预期：
✅ 下发创建成功
✅ plannedStartTime 字段保存
✅ 详情中显示 "2025-10-18 08:00"
```

### 测试2: 不设置计划时间（立即作业）

```
操作：
1. 新建下发
2. 选择农机和任务
3. 计划开始时间：留空
4. 点击"立即下发"

预期：
✅ 下发创建成功
✅ plannedStartTime 为 undefined
✅ 详情中显示 "-"
```

### 测试3: 设置今天下午的时间

```
操作：
1. 新建下发
2. 选择农机和任务
3. 计划开始时间：今天 14:30
4. 点击"立即下发"

预期：
✅ 下发创建成功
✅ plannedStartTime 保存今天下午时间
✅ 详情中显示 "2025-10-17 14:30"
```

### 测试4: 查看详情显示计划时间

```
操作：
1. 点击已有下发记录的"查看"
2. 打开详情对话框

预期：
✅ 显示计划开始时间字段
✅ 有值显示格式化时间
✅ 无值显示 "-"
```

---

## ✅ 更新清单

### 数据结构
- [x] ✅ DispatchRecord 接口添加 plannedStartTime 字段

### 状态管理
- [x] ✅ 添加 plannedStartTime 状态

### 新建对话框
- [x] ✅ 添加计划开始时间输入框
- [x] ✅ datetime-local 类型控件
- [x] ✅ 表单重置包含该字段

### 详情对话框
- [x] ✅ 显示计划开始时间
- [x] ✅ 格式化显示
- [x] ✅ 未设置时显示 "-"

### 数据保存
- [x] ✅ handleDispatch 函数保存该字段
- [x] ✅ localStorage 持久化

### 示例数据
- [x] ✅ 更新 mock 数据包含计划时间

---

## 📊 效果对比

### 更新前

```
操作流程：
1. 创建下发
2. 选择农机和任务
3. 设置参数
4. 立即下发

问题：
❌ 无法提前规划
❌ 只能立即作业
❌ 缺少时间计划
```

### 更新后

```
操作流程：
1. 创建下发
2. 选择农机和任务
3. 设置计划时间 ✅
4. 设置参数
5. 下发

优势：
✅ 可以提前规划
✅ 支持立即作业
✅ 支持计划作业
✅ 时间管理更好
```

---

## 🎉 总结

### ✅ 主要功能

1. ✅ **新增字段** - plannedStartTime 计划开始时间
2. ✅ **输入控件** - datetime-local 时间选择器
3. ✅ **详情显示** - 格式化显示计划时间
4. ✅ **可选字段** - 不填写则立即作业
5. ✅ **数据持久化** - localStorage 保存

### 🎯 核心价值

- **提前规划**: 可以安排未来的作业任务
- **时间管理**: 明确的时间节点和计划
- **灵活应对**: 支持立即作业和计划作业
- **数据追溯**: 记录计划时间便于分析

### 📊 应用场景

- ✅ 提前规划明日作业
- ✅ 安排全天多时段作业
- ✅ 应急作业立即执行
- ✅ 优化作业时间调度

---

**更新时间**: 2025-10-17  
**版本**: v2.4  
**状态**: ✅ **计划开始时间功能已完成**

**核心改进**: 作业方案下发增加计划开始时间字段，支持提前规划和时间管理！
