Files
smart-crop-ui/src/ROUTE_PLANNING_FIELD_REQUIRED.md

11 KiB
Raw Blame History

作业路线规划 - 强制关联地块

🎯 重大更新

作业路线规划现在必须关联地块,不再允许手动绘制边界


📦 更新内容

1 强制选择地块

  • 创建路线时必须选择地块
  • 移除"不选择地块"/"手动绘制边界"选项
  • 未选择地块时无法创建路线

2 移除手动绘制功能

  • 移除"绘制边界"按钮功能
  • 地块边界完全由系统自动加载
  • "绘制边界"按钮改为"✓ 边界已加载"(禁用状态)

3 界面优化

  • 页面标题添加"必须关联地块"徽章
  • 对话框说明更新为必选提示
  • 地块选择标记为必填项(*
  • 未选择地块时显示警告提示

🎨 界面展示

页面标题

┌──────────────────────────────────────────────┐
│  作业路线规划                                 │
│  基于地块信息智能规划全覆盖无重复的作业路线   │
│  [必须关联地块] ← 橙色徽章提示                │
└──────────────────────────────────────────────┘

地块选择对话框

┌─────────────────────────────────────────┐
│  选择地块                                │
│  作业路线规划必须关联地块,              │
│  请从地块管理系统中选择一个地块          │
├─────────────────────────────────────────┤
│                                         │
│  选择地块 *  ← 必填标记                 │
│  [请选择地块 ▼]                         │
│    • 📍 东一地块 (50亩 · 东区)          │
│    • 📍 西二地块 (80亩 · 西区)          │
│    • 📍 南三地块 (35亩 · 南区)          │
│                                         │
│  ┌───────────────────────────────────┐ │
│  │  📍 地块信息                       │ │
│  │  地块名称: 东一地块                │ │
│  │  地块面积: 50 亩                   │ │
│  │  所在位置: 东区                    │ │
│  │  土壤类型: 壤土                    │ │
│  └───────────────────────────────────┘ │
│                                         │
│  [取消]  [✓ 确认创建]                  │
└─────────────────────────────────────────┘

未选择地块时的警告

┌─────────────────────────────────────────┐
│  ⚠️ 请选择地块,                        │
│     作业路线规划必须关联地块信息        │
└─────────────────────────────────────────┘

无可用地块时的错误提示

┌─────────────────────────────────────────┐
│  ❌ 暂无可用地块,                      │
│     请先在地块管理系统中添加地块        │
└─────────────────────────────────────────┘

地图区域

┌────────────────────────────────────────┐
│  📍 关联地块                            │
│  ✓ 东一地块                            │
│  地块边界已自动加载                     │
└────────────────────────────────────────┘

┌────────────────────────────────────────┐
│  规划地图                               │
│  ✓ 东一地块 - 地块边界已加载            │
│                                        │
│  [✓ 边界已加载] [标注障碍]             │  ← 绘制边界按钮禁用
└────────────────────────────────────────┘

🔧 技术实现

创建路线验证

const confirmCreateRoute = () => {
  // 强制要求选择地块
  if (!selectedFieldId || selectedFieldId === 'none') {
    toast.error('请选择地块,作业路线规划必须关联地块');
    return;
  }

  // 使用选中的地块边界
  const selectedField = fields.find(f => f.id === selectedFieldId);
  if (!selectedField) {
    toast.error('未找到选中的地块');
    return;
  }

  // 自动加载地块边界
  const fieldBoundary = selectedField.coordinates.map(coord => ({
    lng: coord.lng * 10 + 100,
    lat: coord.lat * 10 + 100,
  }));

  // 创建路线(必须有地块信息)
  const newRoute: RoutePlan = {
    id: `route-${Date.now()}`,
    name: `${selectedField.name}作业路线`,
    fieldId: selectedField.id,      // 必须有
    fieldName: selectedField.name,  // 必须有
    fieldBoundary,                  // 必须有
    // ...
  };
};

地块选择下拉框

<Select value={selectedFieldId} onValueChange={setSelectedFieldId}>
  <SelectTrigger>
    <SelectValue placeholder="请选择地块" />
  </SelectTrigger>
  <SelectContent>
    {/* 移除了 "不选择地块" 选项 */}
    {fields.filter(f => f.status === 'active').map(field => (
      <SelectItem key={field.id} value={field.id}>
        📍 {field.name} ({field.area} · {field.location})
      </SelectItem>
    ))}
  </SelectContent>
</Select>

确认按钮禁用逻辑

<Button 
  onClick={confirmCreateRoute}
  disabled={
    !selectedFieldId || 
    selectedFieldId === 'none' || 
    fields.filter(f => f.status === 'active').length === 0
  }
>
  <CheckCircle className="w-4 h-4 mr-2" />
  确认创建
</Button>

绘制边界按钮(禁用)

<Button
  size="sm"
  variant="outline"
  disabled
  title="地块边界已自动加载"
>
  <Square className="w-4 h-4 mr-1" />
   边界已加载
</Button>

📊 更新前 vs 更新后

功能 更新前 更新后
地块选择 可选 必选
手动绘制边界 支持 不支持
"不选择地块"选项 已移除
绘制边界按钮 可用 禁用
地块边界加载 可选 强制自动加载
无地块时创建 允许 不允许
路线-地块关联 可选 100%关联

🎯 强制关联的好处

1. 数据完整性

  • 每条路线都有明确的地块信息
  • 数据可追溯性100%
  • 消除孤立的路线数据

2. 管理规范性

  • 统一的数据管理标准
  • 地块-路线-作业完整链条
  • 便于后续数据分析

3. 业务合理性

  • 符合农业生产实际
  • 路线必定对应实际地块
  • 避免虚拟或临时路线

4. 系统集成性

  • 与地块管理系统深度集成
  • 数据流转更顺畅
  • 便于跨系统查询

📋 用户操作流程

标准流程(唯一流程)

1. 确保地块管理系统中已有地块
   ↓
2. 点击"新建规<E5BBBA><E8A784>"
   ↓
3. 在对话框中选择地块(必选)
   ↓
4. 查看地块信息预览
   ↓
5. 点击"确认创建"
   ↓
6. 地块边界自动加载
   ↓
7. 路线自动命名为"{地块名称}作业路线"
   ↓
8. 标注障碍物(可选)
   ↓
9. 设置作业参数
   ↓
10. 生成作业路线
    ↓
11. 保存并导出

异常处理

情况1: 未选择地块直接点确认

❌ 提示: "请选择地块,作业路线规划必须关联地块"
→ 无法创建路线
→ 必须选择地块后才能继续

情况2: 没有可用地块

❌ 显示: "暂无可用地块,请先在地块管理系统中添加地块"
→ 确认按钮禁用
→ 需要先去地块管理添加地块

验证清单

创建路线时

  • 对话框说明为"必须关联地块"
  • 地块选择标记为必填(*
  • 无"不选择地块"选项
  • 未选择地块时显示警告
  • 未选择地块时确认按钮禁用
  • 选择地块后显示地块信息
  • 确认创建后边界自动加载

地图区域

  • 显示关联地块信息卡片
  • "绘制边界"按钮改为"✓ 边界已加载"
  • "绘制边界"按钮禁用
  • 悬停显示"地块边界已自动加载"

页面标题

  • 显示"必须关联地块"徽章
  • 徽章为橙色,醒目提示

路线列表

  • 所有路线都显示地块名称
  • 所有路线都有地块ID关联

🚨 重要提醒

1. 必须先维护地块

⚠️ 使用路线规划功能前:
1. 进入"地块管理"系统
2. 添加至少一个地块
3. 录入地块边界坐标
4. 保存地块信息

2. 地块状态要求

⚠️ 只有"活跃"状态的地块可用:
- 状态为"active"的地块会显示
- 状态为"inactive"的地块不显示
- 状态为"pending"的地块不显示

3. 不能更改关联

⚠️ 路线创建后地块关联不可更改:
- 地块边界是路线的基础
- 更改地块会导致路线失效
- 如需更换地块,请创建新路线

📝 数据要求

地块数据必备字段

interface Field {
  id: string;              // ✅ 必须
  name: string;            // ✅ 必须
  area: number;            // ✅ 必须
  location: string;        // ✅ 必须
  coordinates: GeoCoordinate[];  // ✅ 必须(边界坐标)
  status: 'active';        // ✅ 必须为 active
  // 其他字段...
}

路线数据保证

interface RoutePlan {
  id: string;
  name: string;
  fieldId: string;         // ✅ 100% 有值
  fieldName: string;       // ✅ 100% 有值
  fieldBoundary: RoutePoint[];  // ✅ 100% 有边界
  // 其他字段...
}

🎉 总结

更新完成

  1. 强制要求选择地块
  2. 移除手动绘制边界选项
  3. 禁用绘制边界按钮
  4. 100%地块关联保证
  5. 完善的验证和提示

🎯 核心价值

  • 数据完整性: 100%路线-地块关联
  • 管理规范性: 统一的数据标准
  • 业务合理性: 符合实际生产需求
  • 系统集成性: 与地块系统深度集成

📊 影响范围

  • 新建路线:必须选择地块
  • 地块边界100%自动加载
  • 数据质量100%可追溯
  • 用户操作:流程更规范

更新时间: 2025-10-17
版本: v2.0
状态: 强制关联地块已生效

重要: 从此版本开始,作业路线规划必须关联地块,不再支持手动绘制边界。