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

10 KiB
Raw Blame History

作业路线规划 - 地块二次修改功能

🎯 新增功能

选中路线后,可以在规划地图区域重新选择地块


📦 功能说明

功能概述

  • 选中已有路线后,可以更换关联的地块
  • 更换地块后,边界自动重新加载
  • 路线名称自动更新为新地块名称
  • 保留障碍物和作业参数设置

🎨 界面展示

地块信息卡片 - 已关联地块时

┌────────────────────────────────────────────────┐
│  📍 关联地块                                    │
├────────────────────────────────────────────────┤
│                                                │
│  ✓ 当前: 东一地块                              │
│  地块边界已加载                                 │
│                                                │
│  [更换地块 ▼]                                  │
│  ├─ 当前: 东一地块 (禁用)                      │
│  ├─ 📍 西二地块 (80亩 · 西区)                  │
│  ├─ 📍 南三地块 (35亩 · 南区)                  │
│  └─ 📍 北四地块 (60亩 · 北区)                  │
│                                                │
└────────────────────────────────────────────────┘

地块信息卡片 - 未关联地块时

┌────────────────────────────────────────────────┐
│  📍 关联地块                                    │
├────────────────────────────────────────────────┤
│                                                │
│  ⚠️ 该路线未关联地块,请选择地块                │
│                                                │
│  [选择地块 ▼]                                  │
│  ├─ 请选择地块                                 │
│  ├─ 📍 东一地块 (50亩 · 东区)                  │
│  ├─ 📍 西二地块 (80亩 · 西区)                  │
│  ├─ 📍 南三地块 (35亩 · 南区)                  │
│  └─ 📍 北四地块 (60亩 · 北区)                  │
│                                                │
└────────────────────────────────────────────────┘

🔧 使用方法

方法1: 更换已有地块

1. 在路线列表中选中一条路线
   ↓
2. 在地图区域看到"关联地块"卡片
   ↓
3. 当前地块显示为: ✓ 当前: XXX地块
   ↓
4. 点击下方的"更换地块"下拉框
   ↓
5. 选择新的地块
   ↓
6. 系统自动:
   - 加载新地块边界
   - 更新路线名称
   - 清除原有的作业路线(保留障碍物)
   - 标记为未保存状态
   ↓
7. 点击"保存路线"按钮保存更改

方法2: 为未关联地块的路线添加地块

1. 选中一条未关联地块的路线
   ↓
2. 卡片显示: ⚠️ 该路线未关联地块,请选择地块
   ↓
3. 从下拉框选择地块
   ↓
4. 地块边界自动加载
   ↓
5. 保存路线

💡 功能特性

1. 智能下拉选择

  • 显示当前关联的地块(禁用状态)
  • 只显示其他可选的地块
  • 显示地块详细信息(面积、位置)
  • 图标标识(📍

2. 自动更新

更换地块后,系统自动更新:

项目 更新说明
地块边界 自动加载新地块的边界坐标
路线名称 更新为"{新地块名称}作业路线"
地块ID 更新为新地块的ID
地块名称 更新为新地块的名称
作业路线 ⚠️ 清除(需要重新生成)
障碍物 保留
作业参数 保留

3. 即时反馈

  • Toast提示"已更换地块XXX边界已重新加载"
  • 徽章显示更新为新地块名称
  • 地图立即显示新边界
  • "未保存"标识自动显示

🎨 界面细节

地块选择下拉框

已关联地块时

<Select value={selectedRoute.fieldId || 'none'} onValueChange={...}>
  <SelectTrigger>
    <SelectValue placeholder="更换地块" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="none" disabled>
      当前: 东一地块
    </SelectItem>
    {/* 显示其他地块(过滤掉当前地块) */}
    <SelectItem value="field-2">
      📍 西二地块 (80 · 西区)
    </SelectItem>
    <SelectItem value="field-3">
      📍 南三地块 (35 · 南区)
    </SelectItem>
  </SelectContent>
</Select>

未关联地块时

<Select value="none" onValueChange={...}>
  <SelectTrigger>
    <SelectValue placeholder="选择地块" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="none">请选择地块</SelectItem>
    {/* 显示所有活跃地块 */}
    <SelectItem value="field-1">
      📍 东一地块 (50 · 东区)
    </SelectItem>
    <SelectItem value="field-2">
      📍 西二地块 (80 · 西区)
    </SelectItem>
  </SelectContent>
</Select>

🔧 技术实现

更换地块逻辑

onValueChange={(value) => {
  if (value && value !== 'none') {
    // 查找选中的地块
    const field = fields.find(f => f.id === value);
    if (field) {
      // 转换地块坐标为画布坐标
      const fieldBoundary = field.coordinates.map(coord => ({
        lng: coord.lng * 10 + 100,
        lat: coord.lat * 10 + 100,
      }));
      
      // 更新路线信息
      const updatedRoute = {
        ...selectedRoute,
        fieldId: value,
        fieldName: field.name,
        fieldBoundary,
        name: `${field.name}作业路线`,
      };
      
      // 更新路线数组
      const updatedRoutes = routes.map(r => 
        r.id === selectedRoute.id ? updatedRoute : r
      );
      
      // 更新状态
      setRoutes(updatedRoutes);
      setSelectedRoute(updatedRoute);
      setHasUnsavedChanges(true);
      
      // 提示用户
      toast.success(`已更换地块:${field.name},边界已重新加载`);
    }
  }
}}

📊 使用场景

场景1: 地块划分调整

原地块: 东区大地块 (100亩)
调整后: 拆分为东区1号地块 (50亩) 和东区2号地块 (50亩)

操作:
1. 选中"东区大地块作业路线"
2. 更换为"东区1号地块"
3. 重新生成作业路线
4. 保存

场景2: 地块信息录错

原地块: 西区地块 (错误)
正确地块: 东区地块

操作:
1. 选中路线
2. 从下拉框选择正确的地块
3. 系统自动更新边界和名称
4. 保存

场景3: 临时调整

原计划: 东区地块作业
临时调整: 改为西区地块作业

操作:
1. 选中东区路线
2. 更换为西区地块
3. 查看作业路线是否需要调整
4. 重新生成路线
5. 保存

⚠️ 注意事项

1. 更换地块的影响

✅ 保留的内容:
- 障碍物标注
- 作业参数设置
- 路线创建时间

⚠️ 清除的内容:
- 原有的作业路线
- 路线统计数据

🔄 自动更新的内容:
- 地块边界
- 路线名称
- 地块关联信息

2. 保存提醒

  • ⚠️ 更换地块后会标记为"未保存"状态
  • ⚠️ 必须点击"保存路线"才能保存更改
  • ⚠️<><E58887><EFBFBD>到其他路线前会提示保存

3. 数据一致性

  • ⚠️ 更换地块会清除作业路线
  • ⚠️ 需要重新生成作业路线
  • ⚠️ 建议更换地块后立即重新规划

功能验证

测试场景

场景1: 正常更换地块

✅ 选中已有路线
✅ 下拉框显示当前地块(禁用)
✅ 下拉框显示其他可选地块
✅ 选择新地块后边界自动加载
✅ 路线名称自动更新
✅ Toast提示成功
✅ 显示"未保存"标识
✅ 保存成功

场景2: 为未关联地块的路线添加地块

✅ 选中未关联地块的路线
✅ 卡片显示警告提示
✅ 下拉框显示所有可选地块
✅ 选择地块后边界加载
✅ 路线名称更新
✅ 保存成功

场景3: 更换地块后重新规划

✅ 更换地块
✅ 边界正确显示
✅ 设置作业参数
✅ 生成作业路线
✅ 路线正确显示
✅ 保存成功

🎯 优势对比

更新前 vs 更新后

功能 更新前 更新后
地块修改 不支持 支持二次修改
修改方式 - 下拉选择
修改时机 - 随时可修改
边界更新 - 自动重新加载
名称更新 - 自动更新
即时反馈 - Toast提示

📝 完整工作流程

标准流程(含地块修改)

1. 创建路线
   ↓
2. 选择地块
   ↓
3. 地块边界自动加载
   ↓
4. (可选)发现地块选错
   ↓
5. 从下拉框重新选择地块
   ↓
6. 边界自动重新加载
   ↓
7. 标注障碍物
   ↓
8. 设置作业参数
   ↓
9. 生成作业路线
   ↓
10. 保存路线

🎉 总结

新增功能

  1. 支持选中路线后更换地块
  2. 智能下拉选择器
  3. 自动边界重新加载
  4. 自动路线名称更新
  5. 即时反馈和提示

🎯 核心价值

  • 灵活性: 支持随时修改地块关联
  • 便捷性: 下拉选择,操作简单
  • 智能性: 自动更新边界和名称
  • 安全性: 未保存提醒,防止误操作

📊 影响范围

  • 已有路线:可以更换地块
  • 新建路线:仍然必须选择地块
  • 数据一致性:更换后需重新生成路线
  • 用户体验:更灵活,更友好

更新时间: 2025-10-17
版本: v2.1
状态: 地块二次修改功能已完成

提示: 选中路线后,在地图区域的"关联地块"卡片中可以重新选择地块。