# 驾驶员任务管理功能指南

## 功能概述

驾驶员任务管理系统支持完整的任务创建、分配、执行和反馈流程，提供工时自动计算功能。

## ✅ 已实现功能

### 1. 管理员端功能

#### 1.1 创建任务
- **位置**: 驾驶员信息管理 → 驾驶员任务
- **功能**: 点击"创建任务"按钮
- **支持字段**:
  - ✅ 选择农机（下拉列表，显示农机名称和型号）
  - ✅ 选择驾驶员（下拉列表，仅显示"在岗"状态的驾驶员）
  - ✅ 地块名称（手动输入）
  - ✅ 作业类型（如：耕地、播种、收获）
  - ✅ 计划开始时间（日期时间选择器）
  - ✅ 计划结束时间（日期时间选择器）
  - ✅ 优先级（高/中/低）
  - ✅ 任务描述（多行文本）

#### 1.2 任务分配
- **自动功能**:
  - ✅ 自动生成任务编号（格式：T+日期+序号）
  - ✅ 记录分配人和分配时间
  - ✅ 任务初始状态为"待接收"
  - ✅ 数据持久化到 localStorage

#### 1.3 任务管理
- ✅ 任务列表展示（表格形式）
- ✅ 实时统计面板：
  - 总任务数
  - 待接收任务数
  - 进行中任务数
  - 已完成任务数
  - 有问题反馈的任务数

### 2. 驾驶员端功能

#### 2.1 接收任务通知
- ✅ 任务列表实时更新
- ✅ 待接收任务高亮显示
- ✅ 一键接收任务功能
- 💡 建议：后续可添加浏览器通知或消息推送

#### 2.2 任务状态反馈
支持完整的任务状态流转：

```
待接收 → 已接收 → 进行中 → 已完成
   ↓         ↓
 已取消    已取消
```

**操作按钮**:
- ✅ **待接收**: 显示"接收"按钮（CheckCircle图标）
- ✅ **已接收**: 显示"开始"按钮
- ✅ **进行中**: 显示"完成"和"中断"按钮
- ✅ **查看详情**: Eye图标，查看任务完整信息

**时间戳自动记录**:
- ✅ 开始任务时自动记录 `actualStartTime`
- ✅ 完成任务时自动记录 `actualEndTime`
- ✅ 每次状态更新自动更新 `updatedAt`

#### 2.3 上报问题 ⭐ 新增功能

**入口**: 任务列表 → 进行中的任务 → 点击"上报问题"按钮（MessageSquare图标）

**问题上报表单**:
- ✅ **问题类型**（下拉选择）:
  - 设备故障
  - 地块问题
  - 天气影响
  - 作业困难
  - 其他问题

- ✅ **问题描述**（必填）:
  - 多行文本框
  - 支持详细描述问题

- ✅ **上传图片**（可选）:
  - 支持多张图片上传
  - 图片预览功能
  - 可删除已上传的图片
  - 实时显示上传进度

**问题记录信息**:
- ✅ 自动记录上报时间
- ✅ 自动记录上报人（驾驶员姓名）
- ✅ 问题状态：待处理/处理中/已解决
- ✅ 关联到对应任务

#### 2.4 任务详情查看 ⭐ 新增功能

**功能**: 点击"查看详情"（Eye图标）打开详情对话框

**显示内容**:
- ✅ 任务基本信息：
  - 任务编号、状态
  - 驾驶员、农机设备
  - 作业地块、作业类型
  - 计划时间、实际工时

- ✅ 问题反馈列表：
  - 问题类型和状态
  - 上报时间和上报人
  - 问题描述
  - 问题图片（网格展示）
  - 处理进度

### 3. 工时自动计算 ⭐ 核心功能

#### 3.1 计算逻辑
```typescript
工时（小时）= (actualEndTime - actualStartTime) / (1000 * 60 * 60)
```

#### 3.2 触发时机
- ✅ 任务状态变更为"已完成"时自动计算
- ✅ 实时显示在任务列表的"工时"列
- ✅ 任务详情中显示实际工时

#### 3.3 显示格式
- ✅ 保留2位小数
- ✅ 带单位"h"或"小时"
- ✅ Clock图标辅助显示
- ✅ 绿色文字高亮

#### 3.4 特殊情况处理
- ✅ 未开始的任务：显示"-"
- ✅ 进行中的任务：显示"-"（实时计算可选）
- ✅ 已完成的任务：显示具体工时

## 📊 数据结构

### 任务数据 (DriverTask)
```typescript
{
  id: string;
  taskNumber: string;              // 任务编号
  machineryId: string;             // 农机ID
  machineryName: string;           // 农机名称
  driverId: string;                // 驾驶员ID
  driverName: string;              // 驾驶员名称
  fieldId?: string;                // 地块ID
  fieldName?: string;              // 地块名称
  operationType: string;           // 作业类型
  description?: string;            // 任务描述
  plannedStartTime: string;        // 计划开始时间
  plannedEndTime: string;          // 计划结束时间
  actualStartTime?: string;        // 实际开始时间
  actualEndTime?: string;          // 实际结束时间
  status: TaskStatus;              // 任务状态
  issues: TaskIssue[];             // 问题列表
  workHours?: number;              // 工时（小时）
  priority: 'low'|'medium'|'high'; // 优先级
  assignedBy: string;              // 分配人
  assignedAt: string;              // 分配时间
  createdAt: string;
  updatedAt: string;
}
```

### 问题反馈数据 (TaskIssue)
```typescript
{
  id: string;
  taskId: string;                  // 关联任务ID
  reportedAt: string;              // 上报时间
  reportedBy: string;              // 上报人
  issueType: string;               // 问题类型
  description: string;             // 问题描述
  photos?: string[];               // 问题照片URL数组
  status: '待处理'|'处理中'|'已解决';
  solution?: string;               // 解决方案
  solvedAt?: string;               // 解决时间
}
```

## 💾 数据存储

**LocalStorage Key**: `smart_agriculture_driver_tasks`

**初始化数据**: 系统提供2条示例任务，包含完整的任务信息

## 🎨 UI/UX 特性

### 状态颜色标识
- **待接收**: 灰色（bg-gray-100）
- **已接收**: 蓝色（bg-blue-100）
- **进行中**: 绿色（bg-green-100）
- **已完成**: 紫色（bg-purple-100）
- **已中断**: 橙色（bg-orange-100）
- **已取消**: 红色（bg-red-100）

### 优先级颜色
- **高**: 红色（text-red-600）
- **中**: 橙色（text-orange-600）
- **低**: 绿色（text-green-600）

### 图标使用
- Plus: 创建任务
- Eye: 查看详情
- CheckCircle: 接收/确认
- Clock: 时间/工时
- AlertTriangle: 中断/警告
- MessageSquare: 问题反馈
- Upload: 图片上传
- X: 删除/关闭

## 🔧 使用流程

### 管理员创建任务流程
1. 进入"智能农机管理系统" → "驾驶员信息管理"
2. 切换到"驾驶员任务"标签
3. 点击"创建任务"按钮
4. 填写任务信息：
   - 选择农机设备
   - 选择驾驶员（仅在岗人员）
   - 填写地块和作业类型
   - 设置计划时间
   - 选择优先级
   - 填写任务描述
5. 点击"创建任务"提交
6. 系统自动生成任务编号并分配

### 驾驶员执行任务流程
1. 查看任务列表，找到待接收的任务
2. 点击"接收"按钮（CheckCircle图标）→ 任务状态变为"已接收"
3. 准备就绪后，点击"开始"按钮 → 任务状态变为"进行中"，记录开始时间
4. 执行任务过程中：
   - 如遇到问题，点击"上报问题"（MessageSquare图标）
   - 填写问题类型和描述
   - 可上传现场图片
   - 提交问题反馈
5. 任务完成后，点击"完成"按钮 → 任务状态变为"已完成"，自动计算工时
6. 如需中断，点击"中断"按钮（AlertTriangle图标）→ 任务状态变为"已中断"

### 查看任务详情流程
1. 在任务列表中点击"查看详情"（Eye图标）
2. 查看完整的任务信息
3. 查看所有问题反馈记录
4. 查看问题图片
5. 查看实际工时统计

## 📈 统计功能

**实时统计面板**显示：
- **总任务数**: 所有任务总数
- **待接收**: 新分配未接收的任务
- **进行中**: 正在执行的任务
- **已完成**: 已完成的任��
- **有问题反馈**: 存在问题上报的任务数

## 🚀 后续优化建议

### 1. 通知功能增强
- [ ] 浏览器推送通知（新任务、任务提醒）
- [ ] 任务即将开始提醒（提前30分钟）
- [ ] 任务超时预警

### 2. 地块选择优化
- [ ] 从地块管理系统动态加载地块列表
- [ ] 支持地图选点方式选择地块
- [ ] 显示地块面积和位置信息

### 3. 工时统计增强
- [ ] 按驾驶员统计总工时
- [ ] 按月度统计工时报表
- [ ] 工时趋势图表
- [ ] 工作效率分析

### 4. 问题管理功能
- [ ] 问题处理流程（指派、跟踪、解决）
- [ ] 问题分类统计
- [ ] 问题图片压缩上传
- [ ] 实际图片服务器存储

### 5. 任务调度优化
- [ ] 任务冲突检测（同一驾驶员/农机）
- [ ] 智能任务分配建议
- [ ] 任务优先级自动调整
- [ ] 批量任务导入

### 6. 移动端适配
- [ ] 响应式布局优化
- [ ] 移动端专用界面
- [ ] 离线数据同步
- [ ] GPS位置上报

## 🐛 已知问题

1. **图片上传**: 当前使用模拟上传（URL.createObjectURL），实际应用需要对接真实的图片服务器
2. **地块数据**: 地块ID和名称需要手动输入，建议与地块管理系统集成
3. **实时通知**: 当前仅在页面内更新，需要后端支持实现实时推送

## 📝 测试建议

### 功能测试
- [x] 创建任务
- [x] 接收任务
- [x] 开始任务
- [x] 完成任务
- [x] 中断任务
- [x] 上报问题
- [x] 上传图片
- [x] 工时计算
- [x] 查看详情

### 边界测试
- [ ] 必填字段验证
- [ ] 时间合法性验证（结束时间>开始时间）
- [ ] 图片数量限制
- [ ] 图片大小限制
- [ ] 特殊字符处理

### 性能测试
- [ ] 大量任务列表加载
- [ ] 多图片上传性能
- [ ] 数据持久化性能

## 💡 最佳实践

1. **及时接收任务**: 驾驶员应在收到任务后及时点击接收，确认任务信息
2. **准确记录时间**: 开始和完成任务时及时操作，确保工时计算准确
3. **详细描述问题**: 上报问题时提供详细描述和现场图片，便于快速解决
4. **合理设置优先级**: 根据任务紧急程度合理设置优先级
5. **定期检查任务**: 管理员定期检查待处理的问题反馈

## 📞 技术支持

如有问题或建议，请联系系统管理员。
