14 KiB
14 KiB
✅ 作业方案下发 - 计划开始时间功能
🎯 功能说明
在作业方案下发功能中增加"计划开始时间"字段,便于提前规划作业时间
📦 功能更新
1️⃣ 数据结构更新
在 DispatchRecord 接口中添加计划开始时间字段:
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️⃣ 新建下发对话框
在新建下发对话框中添加计划开始时间输入框:
<div>
<Label>计划开始时间</Label>
<Input
type="datetime-local"
value={plannedStartTime}
onChange={(e) => setPlannedStartTime(e.target.value)}
placeholder="选择计划开始时间(可选)"
/>
</div>
3️⃣ 详情对话框显示
在下发详情中显示计划开始时间:
<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️⃣ 示例数据更新
更新示例数据包含计划开始时间:
{
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: 常规计划作业
{
"id": "dispatch-1",
"dispatchNumber": "D20251017001",
"machineryName": "约翰迪尔拖拉机",
"taskType": "耕地",
"plannedStartTime": "2025-10-18T08:00:00",
"status": "已发送",
"priority": "high"
}
示例2: 立即作业(未设置计划时间)
{
"id": "dispatch-2",
"dispatchNumber": "D20251017002",
"machineryName": "久保田播种机",
"taskType": "播种",
"plannedStartTime": undefined,
"status": "已执行",
"priority": "urgent"
}
示例3: 下午计划作业
{
"id": "dispatch-3",
"dispatchNumber": "D20251017003",
"machineryName": "雷沃施肥机",
"taskType": "施肥",
"plannedStartTime": "2025-10-17T14:30:00",
"status": "待发送",
"priority": "medium"
}
🔧 技术实现
状态管理
const [plannedStartTime, setPlannedStartTime] = useState<string>('');
输入控件
<Input
type="datetime-local"
value={plannedStartTime}
onChange={(e) => setPlannedStartTime(e.target.value)}
placeholder="选择计划开始时间(可选)"
/>
数据保存
const newDispatch: DispatchRecord = {
// ... 其他字段
plannedStartTime: plannedStartTime || undefined,
// ...
};
显示格式化
{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. 打开详情对话框
预期:
✅ 显示计划开始时间字段
✅ 有值显示格式化时间
✅ 无值显示 "-"
✅ 更新清单
数据结构
- ✅ DispatchRecord 接口添加 plannedStartTime 字段
状态管理
- ✅ 添加 plannedStartTime 状态
新建对话框
- ✅ 添加计划开始时间输入框
- ✅ datetime-local 类型控件
- ✅ 表单重置包含该字段
详情对话框
- ✅ 显示计划开始时间
- ✅ 格式化显示
- ✅ 未设置时显示 "-"
数据保存
- ✅ handleDispatch 函数保存该字段
- ✅ localStorage 持久化
示例数据
- ✅ 更新 mock 数据包含计划时间
📊 效果对比
更新前
操作流程:
1. 创建下发
2. 选择农机和任务
3. 设置参数
4. 立即下发
问题:
❌ 无法提前规划
❌ 只能立即作业
❌ 缺少时间计划
更新后
操作流程:
1. 创建下发
2. 选择农机和任务
3. 设置计划时间 ✅
4. 设置参数
5. 下发
优势:
✅ 可以提前规划
✅ 支持立即作业
✅ 支持计划作业
✅ 时间管理更好
🎉 总结
✅ 主要功能
- ✅ 新增字段 - plannedStartTime 计划开始时间
- ✅ 输入控件 - datetime-local 时间选择器
- ✅ 详情显示 - 格式化显示计划时间
- ✅ 可选字段 - 不填写则立即作业
- ✅ 数据持久化 - localStorage 保存
🎯 核心价值
- 提前规划: 可以安排未来的作业任务
- 时间管理: 明确的时间节点和计划
- 灵活应对: 支持立即作业和计划作业
- 数据追溯: 记录计划时间便于分析
📊 应用场景
- ✅ 提前规划明日作业
- ✅ 安排全天多时段作业
- ✅ 应急作业立即执行
- ✅ 优化作业时间调度
更新时间: 2025-10-17
版本: v2.4
状态: ✅ 计划开始时间功能已完成
核心改进: 作业方案下发增加计划开始时间字段,支持提前规划和时间管理!