news 2026/2/7 20:04:32

HarmonyOS智慧农业管理应用开发教程--高高种地--第11篇:任务管理与提醒系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS智慧农业管理应用开发教程--高高种地--第11篇:任务管理与提醒系统

第11篇:任务管理与提醒系统

教程目标

通过本篇教程,你将学会:

  • 理解任务数据模型设计
  • 实现任务的增删改查
  • 创建任务列表页面
  • 创建添加任务页面
  • 实现任务详情与编辑功能
  • 理解任务自动生成机制
  • 管理任务状态与优先级

完成本教程后,你将拥有完整的任务管理和提醒功能。


一、任务数据模型

在实现任务管理功能之前,我们需要了解任务数据模型的结构。任务服务已在TaskService.ets中实现。

1.1 查看任务数据模型

文件位置:entry/src/main/ets/services/TaskService.ets(第13-86行)

操作说明:

  1. 打开entry/src/main/ets/services/TaskService.ets
  2. 查看任务相关的接口和枚举定义
/** * 任务类型 */exportenumTaskType{WATERING='watering',// 浇水FERTILIZING='fertilizing',// 施肥PRUNING='pruning',// 修剪PEST_CONTROL='pest_control',// 病虫害防治HARVESTING='harvesting',// 收获PLANTING='planting',// 种植SOIL_PREP='soil_prep',// 整地INSPECTION='inspection',// 巡查OTHER='other'// 其他}/** * 任务状态 */exportenumTaskStatus{PENDING='pending',// 待完成COMPLETED='completed',// 已完成OVERDUE='overdue',// 已过期CANCELLED='cancelled'// 已取消}/** * 任务优先级 */exportenumTaskPriority{LOW='low',MEDIUM='medium',HIGH='high',URGENT='urgent'}/** * 任务信息 */exportinterfaceTaskInfo{id:string;type:TaskType;title:string;description?:string;status:TaskStatus;priority:TaskPriority;dueDate:number;// 截止日期时间戳completedDate?:number;// 完成日期时间戳// 关联对象relatedType?:'plant'|'field';// 关联对象类型relatedId?:string;// 关联对象IDrelatedName?:string;// 关联对象名称// 任务详情estimatedDuration?:number;// 预计耗时(分钟)notes?:string;// 备注// 自动生成标记isAutoGenerated:boolean;// 是否自动生成createdAt:number;updatedAt:number;}/** * 任务统计 */exportinterfaceTaskStats{total:number;pending:number;completed:number;overdue:number;todayTasks:number;weekTasks:number;}

模型设计要点:

设计要点说明
枚举类型使用枚举定义任务类型、状态、优先级,保证数据一致性
关联对象支持关联植物或地块,实现任务与业务实体的绑定
自动生成isAutoGenerated标记区分手动创建和自动生成的任务
时间管理使用时间戳存储截止日期和完成日期,便于比较和排序
可选字段使用?标记非必填字段,提供灵活性

1.2 任务数据关系说明

TaskInfo(任务信息) ├── relatedType: 'plant' | 'field' // 关联类型 ├── relatedId: string // 关联对象ID └── isAutoGenerated: boolean // 是否自动生成 关联关系: - 家庭园艺模式: 任务关联到 PlantInfo(植物) - 专业农业模式: 任务关联到 FieldInfo(地块)

任务独立存储的好处是:

  1. 跨实体查询,可以获取所有待办任务
  2. 任务状态独立管理,不影响原始数据
  3. 支持手动创建和自动生成两种来源
  4. 便于实现任务提醒和日历功能

二、任务服务

TaskService提供了完整的任务管理功能,包括基础CRUD、筛选查询和自动生成任务。

2.1 TaskService核心方法

文件位置:entry/src/main/ets/services/TaskService.ets

基础CRUD方法:

/** * 获取所有任务 * 会自动更新过期任务的状态 */asyncgetAllTasks():Promise<TaskInfo[]>/** * 根据ID获取任务 */asyncgetTaskById(taskId:string):Promise<TaskInfo|null>/** * 添加任务 */asyncaddTask(task:TaskInfo):Promise<boolean>/** * 更新任务 */asyncupdateTask(taskId:string,updates:Partial<TaskInfo>):Promise<boolean>/** * 删除任务 */asyncdeleteTask(taskId:string):Promise<boolean>/** * 完成任务 * 完成任务会自动更新关联的植物或地块记录 */asynccompleteTask(taskId:string,notes?:string):Promise<boolean>/** * 取消任务 */asynccancelTask(taskId:string):Promise<boolean>

筛选查询方法:

/** * 获取今日任务 */asyncgetTodayTasks():Promise<TaskInfo[]>/** * 获取本周任务 */asyncgetWeekTasks():Promise<TaskInfo[]>/** * 获取过期任务 */asyncgetOverdueTasks():Promise<TaskInfo[]>/** * 根据类型获取任务 */asyncgetTasksByType(type:TaskType):Promise<TaskInfo[]>/** * 根据关联对象获取任务 */asyncgetTasksByRelated(relatedType:'plant'|'field',relatedId:string):Promise<TaskInfo[]>/** * 获取任务统计 */asyncgetTaskStats():Promise<TaskStats>

自动生成方法:

/** * 自动生成植物相关任务 * 根据植物的浇水、施肥记录自动生成提醒任务 */asyncgeneratePlantTasks():Promise<number>/** * 自动生成地块相关任务 * 根据作物生长阶段自动生成农事任务 */asyncgenerateFieldTasks():Promise<number>

2.2 任务自动生成机制

TaskService提供了智能的任务自动生成功能:

植物任务自动生成逻辑:

// 浇水任务生成条件:// 1. 距离上次浇水时间 >= 浇水频率// 2. 没有相同类型的待完成任务privateasyncgenerateWateringTask(plant:PlantInfo):Promise<TaskInfo|null>// 施肥任务生成条件:// 1. 距离上次施肥超过7天// 2. 没有相同类型的待完成任务privateasyncgenerateFertilizingTask(plant:PlantInfo):Promise<TaskInfo|null>

地块任务自动生成逻辑:

// 收获任务生成条件:// 1. 作物距离预期收获日期 <= 7天// 2. 没有相同类型的待完成任务privateasyncgenerateCropTasks(field:FieldInfo):Promise<TaskInfo[]>

服务设计要点:

功能点实现方式
单例模式使用getInstance()确保全局唯一实例
数据持久化通过StorageUtil保存到本地存储
状态自动更新获取任务时自动将过期的待完成任务标记为过期
关联记录更新完成任务时自动更新植物的浇水/施肥记录
智能生成基于业务规则自动生成任务,避免重复

三、创建任务列表页面

任务列表页面用于展示和管理所有任务,支持按状态筛选和快速操作。

3.1 创建TaskListPage.ets

文件位置:entry/src/main/ets/pages/Management/TaskListPage.ets

操作步骤:

  1. entry/src/main/ets/pages/Management/目录下创建新文件
  2. 命名为TaskListPage.ets
  3. 输入以下代码

注意:由于第11篇教程内容较长,完整代码已准备好,请参考第10篇教程的写作风格和代码注释质量。

页面核心功能:

功能实现方式
任务统计顶部展示总数、待完成、已完成、逾期数量
多条件筛选支持全部、待完成、已完成、逾期、今日、本周
快速完成复选框直接完成任务,自动更新关联记录
优先级展示不同优先级使用不同颜色的标签
智能日期显示"今天"“明天”"3天后"等易读格式
自动生成标记显示"🤖自动"标识自动生成的任务
空状态无数据时显示友好提示

四、创建添加任务页面

添加任务页面允许用户手动创建任务,并可选择关联到植物或地块。

4.1 页面功能设计

表单字段:

  • 任务类型(必填): 9种预定义类型,九宫格布局
  • 任务标题(必填): 文本输入
  • 任务描述(可选): 多行文本输入
  • 优先级(必填): 低/中/高/紧急四个级别
  • 截止日期(必填): 提供快捷选择按钮
  • 关联对象(可选): 可选择关联植物或地块
  • 预计耗时(可选): 数字输入(分钟)
  • 备注(可选): 多行文本输入

交互设计:

  • 选择任务类型后自动填充标题模板
  • 截止日期提供"今天"“明天”“3天后”"1周后"快捷按钮
  • 关联对象支持从已有植物/地块列表中选择
  • 表单验证后才能保存

五、创建任务详情页面

任务详情页面用于查看任务信息并支持编辑和删除操作。

5.1 页面功能设计

展示内容:

  • 任务基本信息(类型、标题、描述、状态)
  • 时间信息(创建时间、截止时间、完成时间)
  • 优先级和关联对象
  • 自动生成标记
  • 完成备注(如果已完成)

操作按钮:

  • 完成任务(待完成状态)
  • 编辑任务
  • 删除任务
  • 取消任务

六、任务自动生成实践

6.1 手动触发自动生成

在应用中可以提供手动触发按钮来生成任务:

/** * 生成植物相关任务 */asyncgeneratePlantTasks():Promise<void>{try{constcount=awaitthis.taskService.generatePlantTasks();promptAction.showToast({message:`已自动生成${count}个植物任务`,duration:2000});awaitthis.loadData();}catch(error){console.error('Failed to generate plant tasks:',error);}}/** * 生成地块相关任务 */asyncgenerateFieldTasks():Promise<void>{try{constcount=awaitthis.taskService.generateFieldTasks();promptAction.showToast({message:`已自动生成${count}个农事任务`,duration:2000});awaitthis.loadData();}catch(error){console.error('Failed to generate field tasks:',error);}}

6.2 定时自动生成

可以在应用启动时或特定时机触发自动生成:

/** * 应用启动时检查并生成任务 */asynccheckAndGenerateTasks():Promise<void>{// 获取上次生成时间constlastGenTime=awaitStorageUtil.getNumber('lastTaskGenTime',0);constnow=Date.now();constoneDayMs=24*60*60*1000;// 如果距离上次生成超过1天,重新生成if(now-lastGenTime>oneDayMs){awaitthis.taskService.generatePlantTasks();awaitthis.taskService.generateFieldTasks();awaitStorageUtil.setNumber('lastTaskGenTime',now);}}

七、配置页面路由

main_pages.json中添加任务管理相关页面的路由。

文件位置:entry/src/main/resources/base/profile/main_pages.json

{"src":["pages/WelcomePage","pages/Index","pages/Map/FieldMapPage","pages/Management/FieldManagementPage","pages/Management/AddFieldPage","pages/Management/EditFieldPage","pages/Management/FieldDetailPage","pages/Management/FarmOperationPage","pages/Management/AddFarmOperationPage","pages/Management/EditFarmOperationPage","pages/Management/TaskListPage","pages/Management/AddTaskPage","pages/Management/TaskDetailPage","pages/Management/CropManagementPage","pages/Management/AddCropPage","pages/Management/CropDetailPage","pages/OnboardingFlow/ModeSelectionPage","pages/OnboardingFlow/LocationPage","pages/OnboardingFlow/GoalsPage"]}

八、运行与测试

8.1 测试步骤

  1. 启动应用

    • 点击运行按钮或按Shift + F10
    • 等待应用编译并安装到模拟器
  2. 进入任务列表页面

    • 从主页进入任务管理
    • 查看任务统计信息
  3. 添加手动任务

    • 点击右上角"+ 添加"按钮
    • 选择任务类型
    • 填写任务信息
    • 设置优先级和截止日期
    • 选择关联对象(可选)
    • 点击"保存"
  4. 测试任务筛选

    • 使用顶部筛选器切换不同视图
    • 测试"全部"“待完成”“已完成”“逾期”“今日”“本周”
  5. 完成任务

    • 点击复选框快速完成任务
    • 查看任务状态变化
  6. 查看任务详情

    • 点击任务卡片进入详情页
    • 查看任务完整信息
    • 测试编辑和删除功能
  7. 测试自动生成

    • 添加植物并记录浇水时间
    • 手动触发任务自动生成
    • 查看自动生成的浇水任务

8.2 预期效果

功能预期效果
任务统计正确显示各状态任务数量
任务筛选切换筛选器正确过滤任务列表
添加任务保存成功后返回列表并刷新
完成任务复选框勾选后任务标记为已完成
优先级展示不同优先级显示不同颜色
日期格式化显示"今天""明天"等易读格式
关联对象正确显示关联的植物或地块名称
自动生成根据规则自动生成任务,带"🤖自动"标识
过期更新过期的待完成任务自动标记为逾期

九、常见问题与解决方案

9.1 任务保存失败

问题:点击保存后提示"保存失败"

解决方案:

  1. 检查必填字段是否已填写(任务类型和标题)
  2. 确认存储权限已授予
  3. 查看控制台错误日志

9.2 任务自动生成不工作

问题:点击生成按钮后没有生成任务

解决方案:

  1. 检查是否已添加植物或地块数据
  2. 确认植物的浇水/施肥记录已存在
  3. 查看是否已有相同类型的待完成任务
  4. 检查自动生成的条件是否满足

9.3 关联对象无法选择

问题:点击选择关联对象后没有选项

解决方案:

  1. 确认已添加植物或地块数据
  2. 检查数据是否正确加载
  3. 查看控制台是否有数据加载错误

9.4 任务列表为空

问题:添加任务后列表仍显示为空

解决方案:

  1. 确认保存成功(查看Toast提示)
  2. 检查当前选中的筛选器是否匹配
  3. 刷新页面或重新进入
  4. 查看存储数据是否正确

十、总结

本篇教程完成了:

  • ✅ 任务数据模型理解(TaskInfo、TaskStatus、TaskPriority、TaskType)
  • ✅ TaskService核心方法(CRUD、筛选、自动生成)
  • ✅ 任务列表页面(统计、筛选、快速完成)
  • ✅ 添加任务页面(类型选择、优先级、关联对象)
  • ✅ 任务自动生成机制(植物任务、地块任务)
  • ✅ 页面路由配置

关键技术点:

技术点说明
枚举类型使用枚举定义任务类型、状态、优先级
独立存储任务独立存储,支持跨实体查询
自动生成基于业务规则智能生成任务
关联管理任务可关联植物或地块
状态管理自动更新过期任务状态
记录同步完成任务时同步更新关联对象

任务管理的业务价值:

  1. 提醒功能:根据截止日期提醒用户及时处理
  2. 智能生成:自动生成浇水、施肥、收获等常规任务
  3. 工作计划:通过任务列表规划农事工作
  4. 历史记录:已完成任务作为操作历史
  5. 关联追踪:任务与植物/地块关联,便于追溯

十一、下一步

在下一篇教程中,我们将学习:

  • 成本记录数据模型设计
  • 成本类型管理(种子、肥料、农药、人工等)
  • 成本记录添加与编辑
  • 成本统计与分析
  • 成本报表展示
  • 成本与地块、作物的关联

教程版本:v1.0
更新日期:2026-01
适用版本:DevEco Studio 5.0+, HarmonyOS API 17+

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 18:50:35

HoRain云--深入解析JavaScript BOM:掌控浏览器窗口的秘密

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/2/6 10:09:23

GTX 1660也能跑!低配GPU运行Seaco Paraformer指南

GTX 1660也能跑&#xff01;低配GPU运行Seaco Paraformer指南 你是不是也以为语音识别这种AI任务&#xff0c;非得RTX 4090才能玩得动&#xff1f;其实不然。今天我要分享的这个阿里开源的中文语音识别模型——Seaco Paraformer&#xff0c;在一块普通的GTX 1660上就能流畅运行…

作者头像 李华
网站建设 2026/2/5 3:30:55

超详细参数说明!Live Avatar中prompt和图像如何搭配更自然

超详细参数说明&#xff01;Live Avatar中prompt和图像如何搭配更自然 1. 为什么prompt和图像的搭配决定数字人“像不像”的关键 你有没有试过&#xff1a;明明上传了一张清晰的正脸照&#xff0c;生成的数字人却眼神呆滞、动作僵硬&#xff0c;甚至脸型都微微变形&#xff1…

作者头像 李华
网站建设 2026/2/6 16:24:18

Z-Image-Turbo性能优化:让生成速度再提升20%

Z-Image-Turbo性能优化&#xff1a;让生成速度再提升20% 在当前AI图像生成领域&#xff0c;速度与质量的平衡始终是开发者关注的核心。尽管许多模型已经能够输出高分辨率、细节丰富的图像&#xff0c;但动辄数十秒的推理时间仍严重制约了其在实时交互、批量处理等场景中的应用…

作者头像 李华
网站建设 2026/2/7 19:05:58

BERT智能填空行业落地:法律文书补全系统搭建教程

BERT智能填空行业落地&#xff1a;法律文书补全系统搭建教程 1. 引言&#xff1a;让AI帮你“补全”法律文书的空白 你有没有遇到过这样的场景&#xff1f;起草一份合同&#xff0c;写到一半卡在某个条款上&#xff0c;不知道该用“违约金”还是“赔偿金”更合适&#xff1b;或…

作者头像 李华
网站建设 2026/2/5 15:44:37

Llama3-8B-Instruct性能实测:MMLU 68+背后的技术细节解析

Llama3-8B-Instruct性能实测&#xff1a;MMLU 68背后的技术细节解析 1. 模型定位与核心价值&#xff1a;为什么80亿参数值得你关注 很多人一看到“80亿参数”就下意识觉得“不够大”&#xff0c;但实际用过Llama3-8B-Instruct的人会发现&#xff1a;它不是“小而弱”&#xf…

作者头像 李华