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

10 KiB
Raw Blame History

驾驶员任务管理 - 地块集成功能验证清单

📋 验证时间

2025-10-16

代码验证清单

1. 类型导入

import { Field } from '../../../types/field';
  • 已导入 Field 类型定义
  • 路径正确
  • 类型可用

2. 状态管理

const [fields, setFields] = useState<Field[]>([]);
  • 已添加 fields 状态
  • 类型注解正确
  • 初始值为空数组

3. 数据加载

// 加载地块
const fieldsData = localStorage.getItem('smart_agriculture_fields');
if (fieldsData) {
  setFields(JSON.parse(fieldsData));
}
  • localStorage key 正确
  • JSON 解析正确
  • 错误处理完善
  • 在 loadData 函数中正确位置

4. UI 组件

<Label>选择地块 *</Label>
<Select onValueChange={(value) => setValue('fieldId', value)}>
  <SelectTrigger>
    <SelectValue placeholder="选择地块" />
  </SelectTrigger>
  <SelectContent>
    {fields.length === 0 ? (
      <SelectItem value="no-fields" disabled>
        暂无地块,请先在地块管理中添加
      </SelectItem>
    ) : (
      fields.filter(f => f.status === 'active').map(f => (
        <SelectItem key={f.id} value={f.id}>
          {f.name} ({f.code}) - {f.area}
        </SelectItem>
      ))
    )}
  </SelectContent>
</Select>

验证项:

  • 标签文字正确("选择地块 *"
  • 使用 Select 组件而非 Input
  • placeholder 文字合适
  • 空状态提示文字友好
  • 筛选条件正确status === 'active'
  • 显示格式正确(名称 (编号) - 面积亩)
  • key 值使用 f.id
  • value 值使用 f.id
  • onChange 正确设置 fieldId

5. 数据保存逻辑

const selectedField = fields.find(f => f.id === data.fieldId);

const newTask: DriverTaskType = {
  // ...
  fieldId: data.fieldId,
  fieldName: selectedField?.name,
  // ...
};

验证项:

  • 查找选中的地块
  • 保存 fieldId
  • 保存 fieldName
  • 使用可选链避免错误
  • 数据关联正确

🧪 功能测试清单

测试1: 正常选择地块

前提条件:

  • 地块管理系统中有至少1个active状态的地块

测试步骤:

  1. 进入驾驶员任务管理
  2. 点击"创建任务"按钮
  3. 检查地块下拉框
  4. 选择一个地块
  5. 填写其他必填字段
  6. 提交创建
  7. 检查任务列表

预期结果:

  • 地块下拉框显示所有active地块
  • 地块格式为:名称 (编号) - 面积亩
  • 可以正常选择地块
  • 任务创建成功
  • 任务列表显示正确的地块名称

测试2: 无地块情况

前提条件:

  • 地块管理系统中没有任何地块

测试步骤:

  1. 清空地块数据(或使用新环境)
  2. 进入驾驶员任务管理
  3. 点击"创建任务"按钮
  4. 检查地块下拉框

预期结果:

  • 显示"暂无地块,请先在地块管理中添加"
  • 该选项为禁用状态
  • 无法选择

测试3: 混合状态地块

前提条件:

  • 地块管理系统中有多个地块,包含不同状态

测试数据:

地块1: 东一地块, status: active
地块2: 东二地块, status: inactive
地块3: 西一地块, status: active
地块4: 西二地块, status: pending

测试步骤:

  1. 添加上述测试数据
  2. 进入驾驶员任务管理
  3. 点击"创建任务"按钮
  4. 检查地块下拉框

预期结果:

  • 仅显示地块1和地块3active状态
  • 地块2inactive不显示
  • 地块4pending不显示
  • 顺序与数据顺序一致

测试4: 地块信息显示

前提条件:

  • 有一个地块:名称="示例地块", code="TEST001", area=50

测试步骤:

  1. 进入驾驶员任务管理
  2. 点击"创建任务"按钮
  3. 展开地块下拉框
  4. 检查地块选项文字

预期结果:

  • 显示为:"示例地块 (TEST001) - 50亩"
  • 格式整齐,括号和空格正确
  • 单位"亩"正确显示

测试5: 任务数据验证

前提条件:

  • 有可用地块

测试步骤:

  1. 创建一个新任务并选择地块
  2. 任务创建成功后
  3. 打开浏览器控制台
  4. 检查 localStorage 中的任务数据

检查项:

const tasks = JSON.parse(localStorage.getItem('smart_agriculture_driver_tasks'));
const lastTask = tasks[tasks.length - 1];

// 验证
console.log(lastTask.fieldId);    // 应该是地块ID
console.log(lastTask.fieldName);  // 应该是地块名称

预期结果:

  • fieldId 有值且为字符串
  • fieldName 有值且与选择的地块名称一致
  • fieldId 和 fieldName 匹配

测试6: 任务详情显示

前提条件:

  • 已创建包含地块信息的任务

测试步骤:

  1. 在任务列表中找到创建的任务
  2. 点击"查看详情"按钮
  3. 检查地块信息显示

预期结果:

  • 地块名称正确显示
  • 地块信息完整
  • 无显示错误

测试7: 数据同步

前提条件:

  • 驾驶员任务页面已打开

测试步骤:

  1. 打开一个新标签页
  2. 进入地块管理系统
  3. 添加一个新地块
  4. 返回驾驶员任务页面
  5. 重新打开创建任务对话框

预期结果:

  • 新地块出现在下拉列表中
  • 数据实时同步

测试8: 边界情况

测试场景:

  • 地块名称很长超过20个字符
  • 地块编号很长
  • 地块面积为小数(如 50.5亩)
  • 地块面积很大(如 1000亩

预期结果:

  • 长文本正常显示或截断
  • 数字显示正确
  • 布局不会错乱

📊 性能验证

测试9: 大量地块

前提条件:

  • 地块管理系统中有100+个地块

测试步骤:

  1. 批量添加100个地块
  2. 打开创建任务对话框
  3. 展开地块下拉框
  4. 滚动查看所有地块
  5. 选择一个地块

预期结果:

  • 加载速度快(<1秒
  • 滚动流畅
  • 选择无延迟
  • 无性能问题

🔍 集成验证

验证1: 与地块管理系统的集成

步骤:

  1. 在地块管理中添加地块
  2. 在任务管理中能看到新地块
  3. 在地块管理中修改地块状态为inactive
  4. 在任务管理中该地块不再显示
  5. 在地块管理中修改回active
  6. 在任务管理中该地块重新显示

结果: [ ] 通过 / [ ] 失败

验证2: localStorage 数据一致性

步骤:

  1. 打开浏览器开发者工具
  2. 查看 Application → Local Storage
  3. 检查 smart_agriculture_fields
  4. 检查 smart_agriculture_driver_tasks
  5. 验证数据关联正确

结果: [ ] 通过 / [ ] 失败

🐛 错误处理验证

测试10: 异常数据处理

场景1: localStorage 数据损坏

// 模拟损坏数据
localStorage.setItem('smart_agriculture_fields', '{invalid json}');
  • 不会导致页面崩溃
  • 显示友好错误提示

场景2: 缺少必要字段

// 地块缺少 name 或 code
const field = { id: '1', area: 50, status: 'active' };
  • 不会导致显示错误
  • 能够合理处理

场景3: 网络问题(未来)

  • 加载失败有提示
  • 支持重试机制

📱 兼容性验证

浏览器兼容

  • Chrome (最新版)
  • Firefox (最新版)
  • Safari (最新版)
  • Edge (最新版)

屏幕尺寸

  • 桌面端 (1920x1080)
  • 笔记本 (1366x768)
  • 平板 (768x1024)
  • 手机 (375x667)

验证结果汇总

分类 测试项 状态 备注
代码实现 类型导入 通过 -
代码实现 状态管理 通过 -
代码实现 数据加载 通过 -
代码实现 UI组件 通过 -
代码实现 数据保存 通过 -
功能测试 正常选择 待测试 -
功能测试 无地块情况 待测试 -
功能测试 混合状态 待测试 -
功能测试 信息显示 待测试 -
功能测试 数据验证 待测试 -
功能测试 详情显示 待测试 -
功能测试 数据同步 待测试 -
功能测试 边界情况 待测试 -
性能测试 大量地块 待测试 -
集成测试 系统集成 待测试 -
集成测试 数据一致性 待测试 -
错误处理 异常数据 待测试 -
兼容性 浏览器 待测试 -
兼容性 响应式 待测试 -

📝 测试说明

如何使用此清单

  1. 代码验证: 已自动完成
  2. 功能测试: 需要在实际运行环境中手动测试
  3. 性能测试: 在有大量数据时测试
  4. 集成测试: 验证与其他系统的配合
  5. 错误处理: 测试异常情况
  6. 兼容性: 在不同环境中测试

建议测试顺序

  1. 先完成基础功能测试测试1-6
  2. 再进行边界和异常测试测试7-8, 10
  3. 最后进行性能和兼容性测试测试9, 浏览器兼容)

测试环境准备

方式1: 使用真实数据

  1. 进入地块管理系统
  2. 添加至少3个地块
  3. 设置不同状态active, inactive
  4. 开始测试

方式2: 使用模拟数据

// 在浏览器控制台执行
const mockFields = [
  {
    id: 'field-1',
    code: 'D001',
    name: '东一地块',
    area: 50,
    status: 'active',
    // ... 其他必要字段
  },
  {
    id: 'field-2',
    code: 'D002',
    name: '东二地块',
    area: 48,
    status: 'inactive',
    // ... 其他必要字段
  },
  {
    id: 'field-3',
    code: 'W001',
    name: '西一地块',
    area: 60,
    status: 'active',
    // ... 其他必要字段
  }
];

localStorage.setItem('smart_agriculture_fields', JSON.stringify(mockFields));

🎯 验证目标

本次验证的目标是确保:

  • 代码实现正确无误
  • 功能运行稳定可靠
  • 用户体验良好友好
  • 系统集成无缝衔接
  • 错误处理完善
  • 兼容性良好

📞 问题反馈

如在测试过程中发现问题,请记录:

  • 问题描述
  • 复现步骤
  • 预期行为
  • 实际行为
  • 截图或录屏

验证负责人: [待填写]
验证日期: [待填写]
验证版本: v1.1
验证状态: 代码验证通过,功能验证待执行