宿州市网站建设_网站建设公司_小程序网站_seo优化
2025/12/17 17:41:51 网站建设 项目流程

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

本文对应模块:Web 层的子任务与任务分解系统实现,包括子任务的创建管理、完成度计算、进度追踪,以及与原生层的子任务同步机制。

📌 概述

子任务系统是任务管理应用的重要功能,允许用户将大任务分解为多个小任务。子任务系统包括子任务的创建、删除、查询和完成度计算等功能。通过子任务系统,用户可以将复杂的任务分解为更小、更容易管理的步骤,提高任务的可执行性和完成率。

🔗 子任务系统的完整流程

子任务系统分为三层:Web 层的 SubtaskManager(子任务管理器)负责业务逻辑和完成度计算,DatabaseModule(数据库模块)负责数据的持久化和查询,IndexedDB 是底层的本地数据库。当用户为任务创建子任务时,SubtaskManager 接收父任务 ID 和子任务标题,调用 DatabaseModule 的 createTask 方法创建子任务,并设置 parentId 为父任务的 ID。当用户完成子任务时,SubtaskManager 更新子任务的状态,并自动计算父任务的完成度。当用户查询任务时,SubtaskManager 可以获取任务的所有子任务和完成度信息。

子任务系统与标签、笔记等功能不同,它建立了任务之间的层级关系。一个任务可以有多个子任务,每个子任务也可以有自己的子任务,形成一个树形结构。子任务继承父任务的某些属性,例如分类和截止日期。子任务的完成度直接影响父任务的完成度,当所有子任务都完成时,父任务的完成度为 100%。

子任务系统的实现需要考虑以下几个方面:首先是子任务的创建和管理,需要维护任务之间的父子关系。其次是完成度的计算,需要根据子任务的完成情况动态计算父任务的完成度。第三是子任务的查询,需要支持按父任务 ID 查询所有子任务。第四是子任务的删除,需要考虑删除父任务时是否删除所有子任务。最后是与原生层的集成,需要通过 Cordova 插件将子任务变化通知给原生层。

子任务系统在实际应用中非常有用。例如,用户可能有一个"完成项目报告"的任务,可以分解为"收集数据"、“分析数据”、“编写报告”、"审核报告"等多个子任务。通过子任务系统,用户可以清晰地看到每个步骤的进度,更好地管理整个项目。完成度计算功能使得用户可以一目了然地看到任务的整体进度,这对于大型项目的管理非常重要。

🔧 子任务管理器实现

子任务管理器的核心实现包括子任务的增删查、完成度计算、进度追踪等功能。子任务创建时需要验证父任务存在,并继承父任务的某些属性。子任务删除时需要更新父任务的完成度。子任务查询时支持按父任务 ID 查询。完成度计算时需要统计已完成的子任务数量。

// 子任务管理器的关键方法functiongetSubtasks(parentId){returntaskManager.tasks.filter(t=>t.parentId===parentId);}asyncfunctioncreateSubtask(parentId,title){constparentTask=taskManager.getTask(parentId);if(!parentTask)thrownewError('父任务不存在');constsubtask={title,description:'',status:'pending',priority:'medium',category:parentTask.category,parentId:parentId,icon:'📑',dueDate:parentTask.dueDate};constid=awaittaskManager.createTask(subtask);returnid;}functioncalculateTaskProgress(taskId){constsubtasks=getSubtasks(taskId);if(subtasks.length===0)return0;constcompleted=subtasks.filter(t=>t.status==='completed').length;returnMath.round((completed/subtasks.length)*100);}functiongetTaskProgressInfo(taskId){constsubtasks=getSubtasks(taskId);constcompleted=subtasks.filter(t=>t.status==='completed').length;return{total:subtasks.length,completed:completed,pending:subtasks.length-completed,progress:calculateTaskProgress(taskId)};}

代码解释:

getSubtasks() 函数获取指定父任务的所有子任务,通过过滤任务的 parentId 实现。createSubtask() 函数创建新子任务,首先验证父任务是否存在,然后创建一个新的子任务对象,继承父任务的分类和截止日期,最后调用 taskManager.createTask() 保存子任务。calculateTaskProgress() 函数计算任务的完成度,首先获取所有子任务,如果没有子任务则返回 0,否则计算已完成的子任务数量与总数的比例。getTaskProgressInfo() 函数获取任务的详细进度信息,包括总数、已完成数、待完成数和完成度百分比。

� 原生层的子任务系统同步

HarmonyOS 原生层也需要与 Web 层的子任务系统进行集成。原生层可以通过 Cordova 插件来接收来自 Web 层的子任务变化事件。

// ArkTS 代码示例 - 子任务系统插件import{CordovaPlugin,CallbackContext}from'@magongshou/harmony-cordova/Index';import{PluginResult,MessageStatus}from'@magongshou/harmony-cordova/Index';exportclassSubtaskSyncPluginextendsCordovaPlugin{// 监听 Web 层的子任务创建事件asynconSubtaskCreated(callbackContext:CallbackContext,args:string[]):Promise<void>{try{constsubtaskData=JSON.parse(args[0]);console.log('[SubtaskSyncPlugin] 子任务已创建:',subtaskData.title);constresult=PluginResult.createByString(MessageStatus.OK,'子任务已同步');callbackContext.sendPluginResult(result);}catch(error){constresult=PluginResult.createByString(MessageStatus.ERROR,(errorasError).message);callbackContext.sendPluginResult(result);}}// 监听 Web 层的子任务完成事件asynconSubtaskCompleted(callbackContext:CallbackContext,args:string[]):Promise<void>{try{constsubtaskData=JSON.parse(args[0]);constparentProgress=JSON.parse(args[1]);console.log('[SubtaskSyncPlugin] 子任务已完成:',subtaskData.title);console.log('[SubtaskSyncPlugin] 父任务进度:',parentProgress.progress+'%');constresult=PluginResult.createByString(MessageStatus.OK,'子任务完成已同步');callbackContext.sendPluginResult(result);}catch(error){constresult=PluginResult.createByString(MessageStatus.ERROR,(errorasError).message);callbackContext.sendPluginResult(result);}}// 监听 Web 层的进度更新事件asynconProgressUpdated(callbackContext:CallbackContext,args:string[]):Promise<void>{try{constprogressData=JSON.parse(args[0]);console.log('[SubtaskSyncPlugin] 进度已更新:',progressData.taskId);constresult=PluginResult.createByString(MessageStatus.OK,'进度已同步');callbackContext.sendPluginResult(result);}catch(error){constresult=PluginResult.createByString(MessageStatus.ERROR,(errorasError).message);callbackContext.sendPluginResult(result);}}}

原生代码解释:

SubtaskSyncPlugin 是一个 Cordova 插件,提供了原生层与 Web 层子任务系统的交互接口。onSubtaskCreated 方法监听 Web 层的子任务创建事件,接收子任务数据。原生层可以根据这个事件在原生层也创建对应的子任务。onSubtaskCompleted 方法监听 Web 层的子任务完成事件,接收子任务数据和父任务的最新进度。原生层可以根据这个事件更新原生层的子任务状态和父任务进度。onProgressUpdated 方法监听 Web 层的进度更新事件,接收进度数据。原生层可以根据这个事件更新进度显示。

Web 层通知原生子任务事件

Web 层可以调用原生插件来通知原生层子任务已创建、完成或进度已更新:

// JavaScript 代码 - 通知原生子任务事件functionnotifySubtaskCreated(subtaskData){cordova.exec(function(){console.log('原生层已收到子任务创建通知');},function(error){console.error('通知失败:',error);},'SubtaskSyncPlugin','onSubtaskCreated',[JSON.stringify(subtaskData)]);}functionnotifySubtaskCompleted(subtaskData,parentProgress){cordova.exec(function(){console.log('原生层已收到子任务完成通知');},function(error){console.error('通知失败:',error);},'SubtaskSyncPlugin','onSubtaskCompleted',[JSON.stringify(subtaskData),JSON.stringify(parentProgress)]);}functionnotifyProgressUpdated(progressData){cordova.exec(function(){console.log('原生层已收到进度更新通知');},function(error){console.error('通知失败:',error);},'SubtaskSyncPlugin','onProgressUpdated',[JSON.stringify(progressData)]);}

Web 层代码解释:

notifySubtaskCreated 函数使用 cordova.exec() 调用原生插件的 onSubtaskCreated 方法,传递子任务数据。这样可以从 Web 层通知原生层子任务已创建。notifySubtaskCompleted 函数调用原生插件的 onSubtaskCompleted 方法,传递子任务数据和父任务的最新进度。这样可以从 Web 层通知原生层子任务已完成并同步进度。notifyProgressUpdated 函数调用原生插件的 onProgressUpdated 方法,传递进度数据。这样可以从 Web 层通知原生层进度已更新。通过这些函数,Web 层可以将子任务事件同步给原生层,使原生层能够保持与 Web 层的数据一致。

📝 总结

子任务系统是应用的重要功能,通过任务分解和进度追踪,用户可以更好地管理复杂的项目。通过与原生层的集成,可以实现子任务数据的完整同步,使用户在不同层级都能看到任务的进度。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询