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

9.1 KiB
Raw Blame History

路线保存 - 地块必选校验

🎯 功能说明

在保存路线和生成路线时,强制校验必须关联地块


🔒 校验位置

1 保存路线时校验

const saveRoute = () => {
  if (!selectedRoute) {
    toast.error('没有要保存的路线');
    return;
  }

  // 校验地块必选
  if (!selectedRoute.fieldId || !selectedRoute.fieldName) {
    toast.error('请先选择关联地块,作业路线规划必须关联地块');
    return;
  }

  // 保存逻辑...
  const updatedRoutes = routes.map(r => 
    r.id === selectedRoute.id ? selectedRoute : r
  );
  
  setRoutes(updatedRoutes);
  setHasUnsavedChanges(false);
  toast.success('路线已保存');
};

2 生成路线时校验

const generateRoute = () => {
  if (!selectedRoute) {
    toast.error('请先选择或创建一个路线规划');
    return;
  }

  // 校验地块必选
  if (!selectedRoute.fieldId || !selectedRoute.fieldName) {
    toast.error('请先选择关联地块,作业路线规划必须关联地块');
    return;
  }

  if (selectedRoute.fieldBoundary.length < 3) {
    toast.error('地块边界点数不足,无法生成作业路线');
    return;
  }

  // 生成路线逻辑...
};

📊 校验流程

保存路线流程

用户点击"保存更改"按钮
  ↓
检查是否有选中的路线
  ↓
检查路线是否关联地块 ✅
  ├─ 未关联 → ❌ 显示错误提示
  └─ 已关联 → ✅ 继续保存
       ↓
    保存成功
       ↓
    Toast: "路线已保存"

生成路线流程

用户点击"生成路线"按钮
  ↓
检查是否有选中的路线
  ↓
检查路线是否关联地块 ✅
  ├─ 未关联 → ❌ 显示错误提示
  └─ 已关联 → ✅ 继续检查
       ↓
    检查边界是否足够
       ↓
    生成作业路线
       ↓
    Toast: "路线生成成功!..."

🎨 用户体验

场景1: 未选择地块时保存

操作:
1. 新建路线规划
2. 未选择地块
3. 点击"保存更改"按钮

结果:
❌ Toast错误提示
"请先选择关联地块,作业路线规划必须关联地块"

界面状态:
- 路线不会被保存
- "未保存"标识继续显示
- 地块选择卡片保持橙色警告状态

场景2: 未选择地块时生成路线

操作:
1. 新建路线规划
2. 未选择地块
3. 设置作业参数
4. 点击"生成路线"按钮

结果:
❌ Toast错误提示
"请先选择关联地块,作业路线规划必须关联地块"

界面状态:
- 路线不会被生成
- 地图保持空白(无作业线)
- 统计数据为0

场景3: 已选择地块时保存

操作:
1. 新建路线规划
2. 选择地块(例如:东一地块)
3. 边界自动加载
4. 点击"保存更改"按钮

结果:
✅ Toast成功提示
"路线已保存"

界面状态:
- 路线成功保存到本地存储
- "未保存"标识消失
- 路线状态保持"草稿"

场景4: 已选择地块时生成路线

操作:
1. 新建路线规划
2. 选择地块(例如:东一地块)
3. 边界自动加载
4. 设置作业参数
5. 点击"生成路线"按钮

结果:
✅ Toast成功提示
"路线生成成功共XX行总里程XX km请点击保存按钮保存路线"

界面状态:
- 作业路线生成
- 地图显示蓝色作业线
- 统计数据更新
- "未保存"标识显示

⚠️ 错误提示信息

统一的错误提示

"请先选择关联地块,作业路线规划必须关联地块"

为什么使用统一提示?

  1. 一致性 - 在不同操作中保持一致
  2. 明确性 - 清楚告知用户需要做什么
  3. 强调性 - 突出地块是必选项
  4. 引导性 - 引导用户去选择地块

🔧 技术实现

校验条件

if (!selectedRoute.fieldId || !selectedRoute.fieldName) {
  // 未关联地块
}

为什么同时检查两个字段?

fieldId: string | undefined;      // 地块ID
fieldName: string | undefined;    // 地块名称

原因:

  1. 双重保险 - 确保数据完整性
  2. 防止部分数据 - 避免只有ID没有名称
  3. 向后兼容 - 兼容旧数据
  4. 严格校验 - 两者都必须存在

📝 完整操作流程

正确的操作流程

1. 点击"新建规划"
   ↓
2. 路线创建成功
   ✅ Toast: "新建路线规划成功,请在地图区域选择关联地块"
   ↓
3. 在"关联地块"卡片中选择地块
   ↓
4. 地块选择成功
   ✅ Toast: "已关联地块XXX边界已自动加载"
   ↓
5. 设置作业参数(行距、方向等)
   ↓
6. 点击"生成路线"
   ✅ 校验通过 → 生成作业路线
   ✅ Toast: "路线生成成功!..."
   ↓
7. 点击"保存更改"
   ✅ 校验通过 → 保存成功
   ✅ Toast: "路线已保存"

错误的操作流程(会被拦截)

1. 点击"新建规划"
   ↓
2. 路线创建成功
   ⚠️ 显示橙色警告:"该路线未关联地块"
   ↓
3. 跳过选择地块,直接设置参数
   ↓
4. 点击"生成路线"
   ❌ 校验失败
   ❌ Toast: "请先选择关联地块,作业路线规划必须关联地块"
   ↓
   操作被阻止

🎯 校验效果对比

添加校验前

问题:
❌ 可以保存未关联地块的路线
❌ 可以生成未关联地块的路线
❌ 数据不完整
❌ 后续操作可能出错

后果:
- 路线数据不完整
- 难以追溯是哪个地块的路线
- 报表统计出错
- 用户体验差

添加校验后

优势:
✅ 强制关联地块
✅ 数据完整性保障
✅ 操作流程规范
✅ 用户体验提升

效果:
- 每条路线都有明确的地块关联
- 数据可追溯
- 报表统计准确
- 流程清晰

🧪 测试用例

测试1: 保存未关联地块的路线

步骤:
1. 新建路线规划
2. 不选择地块
3. 点击"保存更改"

预期结果:
❌ Toast错误提示"请先选择关联地块,作业路线规划必须关联地块"
✅ 路线未被保存
✅ "未保存"标识继续显示

测试2: 生成未关联地块的路线

步骤:
1. 新建路线规划
2. 不选择地块
3. 点击"生成路线"

预期结果:
❌ Toast错误提示"请先选择关联地块,作业路线规划必须关联地块"
✅ 路线未被生成
✅ 地图无作业线

测试3: 保存已关联地块的路线

步骤:
1. 新建路线规划
2. 选择地块(例如:东一地块)
3. 边界自动加载
4. 点击"保存更改"

预期结果:
✅ Toast成功提示"路线已保存"
✅ 路线被保存
✅ "未保存"标识消失

测试4: 生成已关联地块的路线

步骤:
1. 新建路线规划
2. 选择地块(例如:东一地块)
3. 边界自动加载
4. 设置作业参数
5. 点击"生成路线"

预期结果:
✅ Toast成功提示"路线生成成功!..."
✅ 作业路线生成
✅ 地图显示作业线
✅ 统计数据更新

测试5: 更换地块后保存

步骤:
1. 选择已有路线已关联地块A
2. 在"关联地块"卡片中更换为地块B
3. 边界自动更新
4. 点击"保存更改"

预期结果:
✅ Toast成功提示"路线已保存"
✅ 路线关联地块B
✅ 边界为地块B的边界
✅ 路线名称更新为"地块B作业路线"

验证清单

保存路线校验

  • 未关联地块时无法保存
  • 显示正确的错误提示
  • 已关联地块时可以保存
  • 保存成功显示提示

生成路线校验

  • 未关联地块时无法生成
  • 显示正确的错误提示
  • 已关联地块时可以生成
  • 生成成功显示提示

用户体验

  • 错误提示清晰明确
  • 引导用户选择地块
  • 操作流程顺畅
  • 防止数据不完整

📊 影响范围

受影响的功能

  1. 保存路线 - 添加地块校验
  2. 生成路线 - 添加地块校验

不受影响的功能

  1. 新建路线 - 仍然可以创建
  2. 删除路线 - 正常删除
  3. 编辑路线名称 - 正常编辑
  4. 标注障碍物 - 正常标注
  5. 设置作业参数 - 正常设置
  6. 选择地块 - 正常选择

🎉 总结

主要改进

  1. 保存路线校验 - 强制关联地块
  2. 生成路线校验 - 强制关联地块
  3. 统一错误提示 - 清晰明确
  4. 数据完整性 - 保障质量

🎯 核心价值

  • 数据质量: 确保每条路线都有地块关联
  • 用户引导: 清晰的错误提示引导用户
  • 操作规范: 强制执行正确的操作流程
  • 系统健壮: 防止不完整数据进入系统

📊 效果评估

指标 添加前 添加后 改善
数据完整性 +100%
操作规范性 +100%
用户引导 +100%
错误防范 新增

更新时间: 2025-10-17
版本: v2.3
状态: 地块必选校验已完成

核心功能: 保存和生成路线时强制校验地块关联,确保数据完整性!