生产管理系统前端 - 更新瓦力提交的产品原型到参考目录

This commit is contained in:
2025-10-23 10:57:14 +08:00
parent 83523dad64
commit 28229ce795
354 changed files with 147599 additions and 7892 deletions

View File

@@ -0,0 +1,610 @@
# ✅ 作业方案下发 - 计划开始时间功能
## 🎯 功能说明
**在作业方案下发功能中增加"计划开始时间"字段,便于提前规划作业时间**
---
## 📦 功能更新
### 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
**状态**: ✅ **计划开始时间功能已完成**
**核心改进**: 作业方案下发增加计划开始时间字段,支持提前规划和时间管理!